seconda parte
Transcript
seconda parte
Accedere a documenti XML: XSL, DOM e Java API Dott. Nicole NOVIELLI [email protected] http://www.di.uniba.it/intint/people/nicole.html XSL eXstensible Stylesheet Language ! Specify how programs have to render XML document data ! XSL is a group of three technologies: ! XSL Formatting Objects (XSL-FO): a vocabulary for specifying formatting ! XPath: a sting-based language of expressions for locating structures and data in XML documents ! XSL Transformations (XSLT): a language for transforming XML documents l'XSLT (Extensible Stylesheet Language transformation) serve proprio a trasformare un documento XML in altri formati come l'HTML, PDF, RTF o ancora XML l'XSL-FO (Extensible Stylesheet Language Formatting Object) viene utilizzato per formattare e applicare degli stili ai dati XML. l'XSLT come sottoinsieme dell'XSL che utilizzato nel contesto delle traformazioni da XML ad HTML si comporta come un linguaggio autonomo senza utilizzare funzioni che appartengono all'XSL-FO. CSS vs. XSL ! CSS = Style Sheets for HTML ! HTML uses predefined tags, and the meaning of each tag is well understood. ! The <table> tag in HTML defines a table - and a browser knows how to display it. ! Adding styles to HTML elements is simple. Telling a browser to display an element in a special font or color, is easy with CSS ! XSL = Style Sheets for XML ! XML does not use predefined tags: the meaning of each tag is not well understood. ! A <table> tag could mean an HTML table, a piece of furniture, or something else - and a browser does not know how to display it. ! XSL describes how the XML document should be displayed XSLT ! A technology for transforming documents into other documents ! It transforms an XML source tree into another structure ! Useful for data employed in multiple applications or platforms designed to work with a given vocabulary ! XSLT uses XPath to find information in an XML document. XPath is used to navigate through elements and attributes in XML documents. Transforming an XML document ! Source tree: the XML document to be transformed ! Result tree: the XML document to be created ! XPath is used to locate part of the source-tree document that match templates defined in an XSL style sheet. When a match occurs (for example a node matches a template): ! the matching templates executes and ! it adds its results to the result tree When there are no more matches the XSLT has transformed the source tree into the result tree Transforming an XML document ! XSLT does not analyze every node of the source tree ! It selectively navigates the source tree using the XPath select and match attributes ! The source tree must be properly structured ! Schemas, DTDs and validating parsers can validat document structure before using XPath and XSLT XSLT and browsers ! All major browsers have support for XML and XSLT. ! Mozilla Firefox supports XML, XSLT, and XPath from version 3. ! Internet Explorer supports XML, XSLT, and XPath from version 6.Internet Explorer 5 is NOT compatible with the official W3C XSL Recommendation. ! Google Chrome supports XML, XSLT, and XPath from version 1. ! Opera supports XML, XSLT, and XPath from version 9. Opera 8 supports only XML + CSS. ! Apple Safari Safari supports XML and XSLT from version 3. An example <?xml version = "1.0"?> XSL da usare nella trasformazione <?xml-stylesheet type = "text/xsl" href = "sports.xsl"?> <!-- Sports Database --> <sports> <game id = "783”> <name>Cricket</name> <paragraph> More popular among commonwealth nations. </paragraph> </game> <game id = "239"> <name>Baseball</name> <paragraph> More popular in America. </paragraph> </game> <game id = "418"> <name>Soccer (Futbol)</name> <paragraph> Most popular sport in the world. </paragraph> </game> </sports> The previous document rendered by Opera and by Safari An XML document describing various sports ! To perform transformations an XSLT processor is required ! A processing instruction (PI) is embedded in an XML document and provides application-specific information to XML processors ! In the example the following PI is used to reference the XSL style sheet ‘sports.xsl’ in ‘sports.xml’ <?xml-stylesheet type = "text/xsl" href = "sports.xsl”?> PI value PI target <? ?> are used to delimit the processing instruction indica al processore che il documento è un documento XML, che la sua versione è la 1.0 sports.xsl Elemento radice, nel caso dell’xslt è necessariamente questo Inserisce nella tabella, ogni nodo del nodeset ‘/sports/game’ Con xsl:value-of accedo al contenuto di un determinato elemento del sorgente XML. XML and DOM <article> <title>Simple XML</title> <date>July 4, 2007</date> <author> <firstName>John</firstName> <lastName>Doe</lastName> </author> <summary> XML is pretty easy. </summary> <content>This chapter presents examples that use XML. </content> </article> root element article title date children of article author firstName summary lastName siblings elements content Using the XML DOM API We want to write JavaScript code to navigate the DOM structure using the XML DOM API The code in the example implement buttons that enable to navigate the document structure: as you click each button, an appropriate part of the document is highlighted Analizziamo il codice… article.xml <?xml version = "1.0"?> <!-- Fig. 14.2: article.xml --> <!-- Article structured with XML --> <article> <title>Simple XML</title> <date>July 4, 2007</date> <author> <firstName>John</firstName> <lastName>Doe</lastName> </author> <summary>XML is pretty easy.</summary> <content>This chapter presents examples that use XML.</content> </article> The body element When the body loads the ‘loadXMLDocument’ function is called A form is defined: each button is associated to the call of a JavaScript functions This div will contain the content of the ‘article.xml’ file passed as argument to the function invoked on the onload event Global script variables • doc: references a DOM object representation of article.xml • outputHTML stores the markup elements and their content as they will be placed in the div • idCounter is used to track the id of each element included in ouputHTML • depth determines the identation level for article.xml • current and previous track, respectively, the current and the previous nodes in the article.xml corresponding DOM structure The function loadXMLDocument Receives the url of the .xml file to load Loading instructions for Internet Explorer (the presence of the ActiveXObject indicates that we are using IE) For Firefox and many other browsers In case of browser not supporting the script Loading an XML using IE If the ActiveX object exists A new ActiveXObject is created usig the MSXML parser for XML Asking the JavaScript to perform synchronous loading By default, when you ask JavaScript to load an XML file, the browser won't wait for the loading to complete and will run the next line of the script. To ask the browser to wait for the loading to complete, assign the async property to false. Otherwise, the browser will run the script in parallel while loading the XML file. When the loading (doc.load(url)) is complete the buildHTML method is invoked to construct an XHTML representation of the XML document in input. The expression doc.childNodes denotes a list of all the XML top-level nodes Finally, the displayDoc function is called to display the content of article.xml in the div defined in the body Loading an XML using Firefox or other browsers These two method of document will exist if we are using Firefox c c c createDocument creates an empty XML document object The first argument is the namespace (if needed) and the second is the root element of the xml. The third argument is not implemented yet so it should always be null The load method loads article.xml in doc Loading an XML using Firefox or other browsers c Firefox supports asynchronous loading so we need to define a function to complete the loading of the document the function will be executed when the document finishes loading (doc.onload) The function buildHTML Recoursive function that receives a list of nodes as arguments nodeType determines wether the current node is an element, a text or a comment node if it is an element, then begin a new div element in our XHTML and give it a unique id. Then spaceOutput appends spaces ( ) and finally the nodeName property is used to append the current node to the outputHTML global variable The function is recoursively called if the node has children Function displayDoc // display the XML document and highlight the first child function displayDoc() { document.getElementById( "outputDiv" ).innerHTML = outputHTML; current = document.getElementById( 'id1' ); setCurrentNodeStyle( current.id, true ); } // end function displayDoc The DOM’s getElementById method is employed to obtain the outputDiv element of the document Then the innerHTML property of the object is set to the new markup generated by the function build HTML processFirstChild If the current node has only one child and this child is a text node firstChild is used to refere to the current node’s first child (if not text node) nextSibling to get its next sibling remove highlight on the previous node and set it on the current processLastChild This function works analogously to the previous one but uses the lastChild property to get the new current node processNextSibling Ensures that the current node is not the outputDiv and that the nextSibling exists processPreviousSibling Ensures that the current node is not the outputDiv and that the nextPrevious exists and that it is not a text node processParentNode // highlight parent of current node function processParentNode() { if ( current.parentNode.id != "body" ) { previous = current; // save currently highlighted node current = current.parentNode; // get new current node setCurrentNodeStyle( previous.id, false ); // remove highlight setCurrentNodeStyle( current.id, true ); // add highlight } // end if else alert( "There is no parent node" ); } // end function processParentNode Checks whether the current node’s parentNode is the ‘body’ of the HTML being processed If not, it adjust the previous and the current node accrodingly and updates their highlighing setCurrentNodeStyle function setCurrentNodeStyle( id, highlight ) { document.getElementById( id ).className = ( highlight ? "highlighted" : "" ); } // end function setCurrentNodeStyle XPath ! An Xpath is an expression to return a node result set to the calling method or application. ! A node is a complete element within an XML document. For instance, if you have an XML Document that looks like this: <customers> <customer id="1"> <companyName>DotNetJohn</companyName> </customer> <customer id="2"> <companyName>Microsoft</companyName> </customer> </customers> A node could be <companyName>DotNetJohn</companyName> or DotNetJohn or id="1" The calling method or application specifies an XPath expression, and XPath returns a single or group of nodes that satisifies the expression. Think of XPath as a query language: by specifying a statement, XPath will retrieve whatever data you request in a given XML document, which is very similar to a select clause in SQL. Let's take a look at a sample XPath statement. If we were to execute the following XPath query: /customers/firstName XPath would traverse down an XML document looking first for the <customers> node. Once found, it will search inside of the customers node for the <firstName> node. Once it reaches the firstName node, XPath will return all of the nodes back to the caller. XPath expressions Charac. Description Example / Represents an absolute path to the node(s) being selected. /customers/firstName will extract all nodes under the root node "customers" who have the element name firstName. // Searches for any node, regardless of where the nodes position is in the document. //firstName will extract all nodes with the element name firstName. * Wildcard – searches for all elements within a path. /customers/* will return all child elements of the parent "customers" node. [] Allows you to further refine your search on an element (some what like a "where" clause in SQL). /customers/firstName[1] will return the 1st instance of a firstName element. /customers [name='DotNetJohn']/firstName will search only customers who have a name of 'DotNetJohn' and return all the firstName elements that satisfy this request. | Allows you to search several paths at one time. /customers/firstName | /customers/lastName will return a combined result set of both firstName and lastName child elements of the customers element. @ Allows you to search on attributes within an element. /customers/firstName[@name='Tyler'] will return all firstName elements who contain an attribute “name” with a value of “Tyler” in it. ! abbiamo già visto negli esempi precedenti come selezionare un elemento, un attributo o un commento utilizzando semplici comandi XPath ! !vediamo un esempio un pò più articolato… listacd.xml <?xml version="1.0" encoding="UTF-8"?> <!-- Prologo XML --> <?xml-stylesheet type="text/xsl" href="listacd_es1.xslt"?> <!-- Istruzione che indica il documento XSLT da associare --> <listacd> <artista> <nome>Stanley Jordan</nome> <albums> <album> <titolo>Magic Touch</titolo> <anno>1985</anno> <etichetta>Blue Note</etichetta> </album> <album> … </album> </albums> </artista> <artista> <nome>Nick Drake</nome> <albums> <album> … </album> <album> … </album> <album>… </album> </albums> </artista> <artista> ...</artista> <artista> … </artista> </listacd> listacd.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http:// www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <xsl:apply-templates select="//artista"/> </ html> </xsl:template> <xsl:template match="//artista"> <strong> <xsl:value-of select="position()"/> <!-- Seleziona il numero progressivo del nodo --> ) <xsl:value-of select="name()"/> <!-- Seleziona il nome del nodo ovvero il nome del TAG ->: </strong> <xsl:value-of select="@nome"/> <br /> </xsl:template> </xsl:stylesheet> output 1) 2) 3) 4) artista artista artista artista : : : : Stanley Jordan Nick Drake Jeff Buckley Joe Satriani Using ‘match’ to access a node ! match contiene il percorso dei nodi che deve prendere in esame.! ! usiamo carattere / per indicare che un nodo è figlio di un altro nodo, oppure utilizzare il carattere * per indicare che è nipote. ! Modo rapido: albums//titolo indica di cercare il nodo <titolo> indifferentemente dalla sua profondità rispetto al nodo <albums>. Questo è un modo molto più flessibile di scrivere il codice XSLT che, nel caso vengano fatte delle modifiche alla struttura dell'albero XML, ci permette magari di evitare future modifiche nel codice del documento stesso. ! l'attributo select nell'elemento xsl:apply-templates ci permette di specificare in che ordine applicare i vari modelli ai vari nodi dell'XML.! ! ! Le parti di codice HTML verrano inserite nell'output senza essere interpretati dal processore non essendo elementi XSLT.!! apply-templates listacd2.xsl <?xml version="1.0" encoding="UTF-8"?>!!! <!-- Prologo XML --> <xsl:stylesheet version="1.0" xmlns:xsl="http:// www.w3.org/1999/XSL/Transform"> !!! <xsl:template match="/">!! <!-- Applica questo template al nodo radice indicato dal carattere / --> !!!!!! <html> !!!!!!!! <xsl:apply-templates>!!! <!-- Richiama e applica gli altri templates --> !!!!!!!! </xsl:apply-templates> !!!!!! </html> !!! </xsl:template> !!! <xsl:template match="artista">!!! <!-- Quando trova un nodo artista applica questa regola --> !!!!!!!! <xsl:value-of select="nome"> !!!!!!!! </xsl:value-of> !!!!!!!! <br></br> !!! </xsl:template> </xsl:stylesheet> L'elemento xsl:template definisce delle regole che vengono applicate al nodo specificato nell'attributo match del documento sorgente XML. L'utilizzo del carattere / indica al processore di applicare queste regole all'elemento radice dell'XML (nel nostro caso <listacd>). All'interno dell'elemento xsl:template per prima cosa mettiamo i TAG <html> e all'interno di questi utilizziamo l'elemento xsl:apply-templates per richiamare gli altri modelli che saranno applicati agli elementi figli. Abbiamo definito un altro modello che viene applicato agli elementi <artista> e come regole utilizziamo l'elemento xsl:value-of con l'attributo select per dire al processore di prendere il valore contenuto all'interno dell'elemento <nome>. Infine utilizziamo il <br> per andare a capo dopo ogni nome. Questo XSLT esegue le seguenti azioni sul file XML: prende l'elemento radice e ogni volta che trova un elemento <artista> calcola il valore contenuto dentro l'elemento figlio <nome> e lo indirizza in output sul browser. quando un Template non corrisponde a nessun elemento dell'XML non viene applicato, non crea quindi nessun errore DOM e SAX ! DOM è un’interfaccia programmatica (API) per la manipolazione della struttura e del contenuto di documenti XML ! Occorre invocare direttamente i metodi per accedere alle o modificare le componenti del documento ! SAX (Simple API for XML) consente soltanto di effettuare il parsing di documenti XML ! Il parser genera degli eventi => occorre (sovra) scrivere degli event handler (callback) per decidere cosa fare ! I parser DOM usano SAX per il parsing e la creazione dell’oggetto associato al documento DOM o SAX? ! Usate un parser DOM quando: ! Si ha bisogno di manipolarne la struttura del documento ! E’ fondamentale conoscerne la struttura ! Si ha bisogno di accedere alle informazioni più di una volta ! Usate un parser SAX se si intende soltanto estrarre pochi elementi da un documento XML ! E’ appropriato in caso di poca memoria o se i dati letti dal documento sono usati solo una volta Pro & Contro di DOM ! Pro ! Intero documento in memoria ! Completamente navigabile ed editabile nella struttura e nel contenuto ! Contro ! Intero documento in memoria DOM API in Java DOM API in Java Esempio: Agenda XML <?xml version="1.0" encoding="UTF-8"?> <!--This is a simple contact list--> <addressbook> <?myInstruction action silent?> ... <contact gender="F"> <FirstName>Sue</FirstName> <LastName>Green</LastName> </contact> ... <![CDATA[I can add <, >, and ?]]> </addressbook> DOM: struttura gerarchica ad albero ! DOM consente di rappresentare un documento XML mediante una struttura gerarchica ad albero: <contact> <FirstName>Sue</FirstName> <FamilyName>Smith</FamilyName> </contact> ! Contact è padre dell’elemento figlio FirstName (primo figlio) e di FamilyName (figlio successivo) ! FirstName è padre dell’elemento figlio Sue Package org.w3c.dom Package org.w3c.dom Interface Description Document Represents the XML document’s top-level node, which provides access to all the document’s nodes—including the root element. Node Represents an XML document node. NodeList Represents a read-only list of Node objects. Element Represents an element node. Derives from Node. Attr Represents an attribute node. Derives from Node. CharacterData Represents character data. Derives from Node. Text Represents a text node. Derives from CharacterData. Comment Represents a comment node. Derives from CharacterData. ProcessingInstruction Represents a comment node. Derives from CharacterData. CDATASection Represents a CDATA section. Derives from Text. Esempio: Agenda XML Metodi di Document Method Name Description createElement Creates an element node. createAttribute Creates an attribute node. createTextNode Creates a text node. createComment Creates a comment node. createProcessingInstruction Creates a processing instruction node createCDATASection Creates a CDATA section node. getDocumentElement Returns the document’s root element. getElementsByTagName Returns a node list of elements with matching tag name appendChild Appends a child node. getChildNodes Returns the child nodes. Metodi di Node Method Name Description appendChild Appends a child node. cloneNode Duplicates the node. getAttributes Returns the node’s attributes. getChildNodes Returns the node’s child nodes. getNodeName Returns the node’s name. getNodeType Returns the node’s type (e.g., element, attribute, text, etc). getNodeValue Returns the node’s value. getParentNode Returns the node’s parent. hasChildNodes Returns true if the node has child nodes. removeChild Removes a child node from the node. replaceChild Replaces a child node with another node. setNodeValue Sets the node’s value. insertBefore Appends a child node in front of a child node. Tipi di Nodi Node Type Description Node.ELEMENT_NODE Represents an element node. Node.ATTRIBUTE_NODE Represents an attribute node. Node.TEXT_NODE Represents a text node. Node.COMMENT_NODE Represents a comment node. Node.PROCESSING_INSTRUCTION_NODE Represents a processing instruction node. Node.CDATA_SECTION_NODE Represents a CDATA section node. Metodi di Element Method Name Description getAttribute Returns an attribute’s value. getTagName Returns an element’s name. removeAttribute Removes an element’s attribute. setAttribute Sets an attribute’s value. Esempio: navigazione di un documento XML <root> <!--Ciao--> <elem attr="Java">DOM</elem> <?istruzioni instr1 instr2?> <![CDATA[Posso usare <, >, e ?]]> </root> Esempio: navigazione di un documento XML private Document document; … processNode( document ); … public void processNode( Node currentNode ) { switch ( currentNode.getNodeType() ) { // process a Document node case Node.DOCUMENT_NODE: Document doc = ( Document ) currentNode; System.out.println("Document node: " + doc.getNodeName() + "\nRoot element: " +doc.getDocumentElement().getNodeName() ); processChildNodes( doc.getChildNodes() ); break; Esempio: navigazione di un documento XML // process an Element node case Node.ELEMENT_NODE: System.out.println( "\nElement node: " + currentNode.getNodeName() ); NamedNodeMap attributeNodes = currentNode.getAttributes(); for ( int i = 0; i < attributeNodes.getLength(); i++) { Attr attribute = ( Attr ) attributeNodes.item( i ); } System.out.println( "\tAttribute: " + attribute.getNodeName() + " ; Value = " + attribute.getNodeValue() ); processChildNodes( currentNode.getChildNodes() ); break; Esempio: navigazione di un documento XML // process a text node and a CDATA section case Node.CDATA_SECTION_NODE: case Node.TEXT_NODE: Text text = ( Text ) currentNode; } } if ( !text.getNodeValue().trim().equals( "" ) ) System.out.println( "\tText: " + text.getNodeValue() ); break; public void processChildNodes( NodeList children ) { if ( children.getLength() != 0 ) { for ( int i = 0; i < children.getLength(); i++) { processNode( children.item( i ) ); } } } Esempio: creare un documento XML // crea un documento con radice // <root> ... // </root> private Document document; ...// creo documento con DocumentBuilder.newDocument();... Element root = document.createElement("root"); document.appendChild(root); Esempio: creare un documento XML // aggiunge un commento al // documento XML // <root> // <!--Ciao--> // </root> Comment simpleComment = document.createComment("Ciao"); root.appendChild( simpleComment ); Esempio: creare un documento XML // Aggiunge un elemento al doc // <root> // <elem attr="Java">DOM</elem> // </root> Element elem = document.createElement("elem"); elem.appendChild( document.createTextNode("DOM")); Esempio: creare un documento XML // crea e setta l’attributo Attr attr = document.createAttribute("attr"); attr.setValue("Java"); elem.setAttributeNode(attr); // appende elem alla radice root.appendChild(elem); Esempio: creare un documento XML // aggiunge processing instruction ProcessingInstruction pi = document.createProcessingInstruction( "istruzioni", "instr1 instr2" ); root.appendChild(pi); // aggiunge sezione CDATA CDATASection cdata = document.createCDATASection( "Posso usare <, > e ?" ); root.appendChild(cdata); JAXP DOM Parser ! Import necessari per usare il parser DOM JAXP (contenute di default in Java " 1.4.x): import org.w3c.dom.*; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; JAXP DOM Parser try { Document document; // obtain the default parser DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // set desired properties for parsing factory.setValidating( true ); (); DocumentBuilder builder = factory.newDocumentBuilder // obtain document object from XML document document = builder.parse( new File( file ) ); } catch ( SAXParseException spe ) { System.err.println("Parse error: " + spe.getMessage() ); System.exit( 1 ); } catch ( SAXException se ) { se.printStackTrace(); } Serializzazione di un documento XML ! Problema: serializzare un documento DOM in uno stream di output (e.g., System.out) ! La serializzazione è una feature standardizzata di recente nel DOM, livello 3 ! In alternativa sono state realizzate diverse soluzioni dipendenti dalla particolare implementazione: ! Usare la classe XmlDocument in JAXP (Non è più supportata a partire da Java 5!!!) ! Usare il package org.apache.xml.serialize in Apache Xerces (DEPRECATO!) ! Nessuna di questa soluzione è portabile ! Non implementano le specifiche di load e save del DOM livello 3 Apache Xerces ! Includendo la libreria di xercesImpl.jar nel classpath della propria applicazione, si ottiene AUTOMATICAMENTE l’ovverriding del parser di default di Java ! In tal caso, anche usando le classi DocumentBuilderFactory e DocumentBuilder si ottiene in realtà un’istanza del parser di Apache ! Questo “stile” è consigliato per maggiore portabilità Gestione errori Gestione degli errori ! E’ possibile personalizzare la gestione delle eccezioni durante il parsing di un file ! Occorre implementare l’interfaccia org.xml.sax.ErrorHandler public class MyErrHandler implements ErrorHandler { public void fatalError(SAXParseException spe ) throws SAXException { … public void error( SAXParseException spe ) throws SAXParseException { … public void warning( SAXParseException spe ) throws SAXParseException { … Gestione degli errori // JAXP parser DocumentBuilder builder = factory.newDocumentBuilder(); builder.setErrorHandler( new MyErrHandler() ); // Xerces parser DOMParser parserDOM = new DOMParser(); parserDOM.setErrorHandler( new MyErrHandler()); Validazione con XSD <?xml version="1.0" encoding="UTF-8"?> <meeting xmlns="http://conferencing.di.uniba.it/meeting" xmlns:conference="http://conferencing.di.uniba.it/base" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation="http://conferencing.di.uniba.it/ meeting meeting.xsd"> <conference:name>jabber_meet</conference:name> <conference:schedule> 2005-01-01T10:00:00+01:00 </conference:schedule> … Abilitare namespace e validazione nel parser private final String W3C_XML_SCHEMA = "http:// www.w3.org/2001/XMLSchema"; private final String JAXP_SCHEMA_LANGUAGE = "http:// java.sun.com/xml/jaxp/properties/schemaLanguage"; private final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/ schemaSource"; private final String[] xsd = {“uno.xsd“, “due.xsd”}; Abilitare namespace e validazione nel parser DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { factory.setNamespaceAware(true); factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); factory.setValidating(true); // default DTD! factory.setAttribute(JAXP_SCHEMA_SOURCE, xsd); } catch (IllegalArgumentException x) { // Happens if parser doesnt support a feature … } Gestione dei Namespace ! org.w3c.dom.Node ! Informazioni sul namespace ! String getPrefix(); ! The namespace prefix of this node, or null if it is unspecified ! String getLocalName(); ! Returns the local part of the qualified name of this node ! String getNamespaceURI(); ! The namespace URI of this node, or null if it is unspecified Gestione dei Namespace: esempi ! Nodo corrente è <conference:name>jabber_meet</conference:name> ! currentNode.getPrefix(); ! Resituisce “conference” ! currentNode.getLocalName(); ! Restituisce “name” ! currentNode.getNamespaceURI(); ! Restituisce “http:// conferencing.di.uniba.it/base” Gestione dei Namespace ! Query methods ! Senza indicare NS NodeList getElementsByTagName(String name); ! Indicando il NS NodeList getElementsByTagNameNS(String nsURI, String localName); ! Es. document.getElementsByTagNameNS(“http:// conferencing.di.uniba.it/base”,“schedule”); Riferimenti ! Harvey M. Deitel and Paul J. Deitel, Internet & World Wide Web: How to Program, Ed. Pearson International Edition ! Carey, Blatnik, Guida a XML, Ed. McGraw-Hill ! http://www.w3.org/ ! www.deitel.com/books/iw3htp4 (per il codice di esempio degli esercizi) ! http://www.w3schools.com/xsl Riferimenti ! JAXP - http://java.sun.com/xml/jaxp/ ! JAXP DOM tutorial - http://java.sun.com/j2ee/1.4/docs/tutorial/doc/ index.html http://java.sun.com/j2ee/1.4/docs/tutorial/doc/ JAXPIntro5.html#wp66704 ! Xerces2 Java DOM - http://xml.apache.org/xerces2-j/dom.html ! http://download.oracle.com/javase/1.4.2/docs/ api/org/w3c/dom/package-summary.html