1 / 34

XML

XML. Extensible Markup Language. Program. XML – hvordan ser et XML dokument ut? Programmatisk behandling av XML SAX – Simple API for XML DOM – Document Object Model JDOM – Java DOM Transformasjonsbasert XML behandling XSLT. Hvorfor. Integrasjon Interne systemer i bedrifter

aleda
Download Presentation

XML

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML Extensible Markup Language

  2. Program • XML – hvordan ser et XML dokument ut? • Programmatisk behandling av XML • SAX – Simple API for XML • DOM – Document Object Model • JDOM – Java DOM • Transformasjonsbasert XML behandling • XSLT

  3. Hvorfor • Integrasjon • Interne systemer i bedrifter • Hele næringskjeder/nettverk • Konsolidering av informasjonkilder • Innhold vs presentasjon – dekobling • Datalagring

  4. Hva • Tekst-basert • Bestanddeler • Elementer – start-tag og slutt-tag • Attributter – tilhører elementer • Tekst – inneholdt i et element • Kommentarer, direktiver, CDATA • XML-standarden (W3C) • Definere velformede dokumenter

  5. XML Definition (prolog) Processor Instruction Opening tag Root element Nested element Textual content Closing tag Attribute Namespace definition Empty element can be collapsed Namespace usage Eksempel <?xml version=”1.0”?> <?xml-stylesheet href=”stylesheet.xsl"?> <documentroot> <first-subelement> Text-contents (no contain special characters) </first-subelement> <second-subelement attributename=”attributevalue”> <subsubelement>Some more text</subsubelement> </second-subelement> <empty-element attr=”value”/> <namespace-element xmlns:xlink=”http://www.w3.org/1999/xlink”> <refering-element xlink:href=”http://www.systek.no/”/> </namespace-element> </documentroot>

  6. First <li> not closed Incorrectly nested elements Empty element must be explicitly closed All attribute values must be ”quoted” Begrensninger i forhold til HTML <ol> <li>List item text <li>Second list item text </ol> Some normal text <b>some bold text <i>some bold-italic</b> some italic</a> <body> <img src=”mypicture.gif”> </body> <a href=http://www.systek.no>Systek</a>

  7. Document Type Definitions • Definerer lovlige dokumenter for en dokument-type (”XML-språk”) • Kan definere – for element-noder: • Tillatte underelementer, inkludert rekkefølge • Tekst tillatt? (ellers blir whitespace ignorert) • Tillatte og påkrevde attributter • For attributter • Tillatte verdier • Id-semantikk (unike per dokument)

  8. DTD Eksempel (oppskrifthefte) <?xml encoding="UTF-8"?> <!ELEMENT recipes (recipe)+> <!ELEMENT recipe (indexing*, ingredients, directions, link*)> <!ATTLIST recipe id ID #IMPLIED> <!ATTLIST recipe title ID #REQUIRED> <!ATTLIST recipe transcripted CDATA #IMPLIED> <!ELEMENT indexing EMPTY> <!ATTLIST indexing value CDATA #REQUIRED> <!ELEMENT ingredients (ingredient+)> <!ATTLIST ingredients servings CDATA #IMPLIED> <!ELEMENT ingredient (#PCDATA)> <!ATTLIST ingredient amount CDATA #IMPLIED> …

  9. Alfabetsuppe: XML standarder • DTD – Document Type Definition • XSLT – Extensible Style Language Tranformations • XLink/XPointer/XPath • DOM – Document Object Model • SAX – Simple API for XML • SOAP – Simple Object Access Protocol • Java-spesifikk: JAXP, JAXM, JAXB, TrAX, JDOM

  10. Eksempler på XML-språk • XSLT er selv et XML språk • XHTML 1.0 • VoiceXML • SOAP • SVG • SMIL • MathML • WML

  11. Organisasjoner • XML FokusIBM, Microsoft, Sun, og Oracle • Java XML parsere: Oracle, OASIS og ASF ++ • Xml.Apache.Org: Bygger på kildekode donert fra Sun (Project X/Crimson) og IBM (XML4J) • Xerces: XML Parser (DOM & SAX) • Xalan: XSL Processor (XSLT & XPath) • Cocoon: Servlet-based XSL processor (uses Xalan) • SOAP • Batik (SVG processor)

  12. Hvordan • Event-basert (f. eks. for å bygge en struktur) • SAX • Tre-basert (f.eks. for å manipulere et dokument) • DOM og JDOM • Transformasjon-basert (f.eks. for å vise i HTML eller PDF) • XSLT

  13. Demo: Konstruere et JTree fra et XML dokument

  14. SAX - Fremgangsmåte • Definér en dokument hånterer (DocumentHandler) • Assosiert håntereren med en parser • Angi dokument • Parseren vil kalle DocumentHandler’s metoder

  15. Rull opp ermene! public interface DocumentHandler { void startElement(String name, AttributeList atts) void endElement(String name) void characters(char ch[], int start, int length) void startDocument() void endDocument() void ignorableWhitespace(char ch[], int start, int length) void processingInstruction(String target, String data) void setDocumentLocator (Locator locator); }

  16. Eksempel: Konstruerer en JTree public void startElement (String nsURI, String localName, String qName, Attributes attrs) { StringBuffer nodeText = new StringBuffer("<" + localName); for ( int i=0; i<attrs.getLength(); i++ ) nodeText.append(" " + attrs.getLocalName(i) + "='" + attrs.getValue(i) + "'"); nodeText.append(">"); DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeText.toString()); this.currentNode.add(newNode); this.currentNode = newNode; this.currentText = new StringBuffer(); } public void characters (char ch[], int start, int length) { this.currentText.append(ch, start, length); } public void endElement(String nsURI, String localName, String qName){ String contents = this.currentText.toString().trim(); if ( contents.length() != 0 ) this.currentNode.add(new DefaultMutableTreeNode(contents)); this.currentNode = (DefaultMutableTreeNode)currentNode.getParent(); }

  17. Start parsingen SaxTreeViewer(String docName) { TreeInsertingDocHandler myDocHandler = new TreeInsertingDocHandler(); String parserClass = "org.apache.xerces.parsers.SAXParser"; try { XMLReader parser = XMLReaderFactory.createXMLReader(parserClass); parser.setContentHandler(myDocHandler); parser.parse(docName); } catch (SAXException se) { se.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } getContentPane().add(new JTree(myDocHandler.currentNode.getFirstChild())); }

  18. SAX – forklaring • Høy performance • Har ingen intern tre-struktur • Vi lager istedet vår egen (javax.swing.tree.DefaultTreeModel) • Går gjennom dokumentet én gang • Lineært: Fra begynnelse til slutt

  19. DOM • W3C standard • DOM Level 2 på over 400 sider • Definerer et dokument som et tre • Sentrale klasser: • Node + subklasser (Attr, Character, Element...) • NamedNodeList (for Attributes) • NodeList (for subtrær)

  20. Fra Xerces’ DOM javadoc interface org.w3c.dom.NamedNodeMap interface org.w3c.dom.Node interface org.w3c.dom.Attr interface org.w3c.dom.CharacterData interface org.w3c.dom.Comment interface org.w3c.dom.Text interface org.w3c.dom.CDATASection interface org.w3c.dom.Document interface org.w3c.dom.DocumentFragment interface org.w3c.dom.DocumentType interface org.w3c.dom.Element interface org.w3c.dom.Entity interface org.w3c.dom.EntityReference interface org.w3c.dom.Notation interface org.w3c.dom.ProcessingInstruction interface org.w3c.dom.NodeList

  21. Operasjoner insertBefore replaceChild removeChild appendChild cloneNode Org.w3c.dom.Node Aksessorer: • NodeName • NodeValue (rw) • ParentNode • ChildNodes • First, Last Child • Previous, Next Sibling • Attributes • OwnerDocument

  22. DOMTreeModel v. 1 • Bruker Adaptor patternet • Gir innblikk i både DOM og JTree • Se vedlagt kode JTree TreeModel org.w3c.dom.Document DOMTreeModel

  23. DOMTreeModel v. 2 • Har XPath støtte • Apache Xalan • Skriv inn en XPath • Trykk return • Matchende noder velges

  24. DOMTreeModel v. 3 • Demonstrerer endringer i et DOM tre • Koden er ikke spesielt pen, men ligger vedlagt alikevel • Operasjoner: • Legge til Element-node • Legge til Tekst-node • Endre eller sette attributt • Remove node • Lagre

  25. JDOM • JDOM er utviklet av Brett McLaughlin, forfatter av ”Java and XML” • Gir en mer Java-vennlig DOM enn DOM • Bruker overloading • Bruker eksisterende Java-klasser, som List • Mangler mye av det mer avanserte relatert til DOM, f.eks. XPath • Kildekode for JDomTreeViewer ligger vedlagt

  26. XPath • En del av familien med referanser i XML • Brukes til å velge ut deler av et dokument-tre f.eks. under Transformasjoner (XSLT) • Minner om filstruktur • . er ”denne node” • .. er • / skiller noder på forskjellig nivåer • / angir dokument-rot • // finner noder på ALLE undernivåer • * er alle element-noder • text() finner tekst-noder

  27. XPath eksempler • person • ./person (samme som forrige) • ./person/* • ./person/*/text() • ./person//*/text() • //text()

  28. XPath • Begrensninger/filter angis i [] • //person[./name/family/text() = "Worker"] • //person[name/family/text()='Worker']/email/text() • Default – nodenummer • //person[1]/name/* • Attributter angis med @ • //person[@id='two.worker']/name/*/text() • Dersom DTD angir id attributter, kan disse brukes: • id(//person/link/@manager)/name/*

  29. XPath – the full story • Formene vi har sett er forenklinger • Full XPath bruker akser – syntaks: aksenavn::nodetest • <navn> == child::<name> • . == self::node() • .. == parent::node() • @<navn> == attribute::<navn> • //<navn> == descendant::<navn>

  30. XPath akser eksempler • ./person == self::*/child::person • //link[@manager = "Big.Boss"]/.. == descendant::link[attribute::manager = "Big.Boss"]/parent::

  31. XSLT • Transformerer fra et XML språk til et annet • Bruker templates for å behandle segmenter • Bruker XPath for å velge ut segmenter • Vi skal lage tre XSL stylesheets som alle skal oversette et XML språk (recipeML) til XHTML 1.0

  32. Eksempel <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:param name="navn"/> <xsl:param name="navn" select="expression"/> <xsl:template match="XPath pattern" [name="name" priority="number" mode="mode"]> <xsl:param name="navn"/> <xsl:param name="navn"/> Tekst, <tag>XML tekst</tag>, <xsl:value-of select="XPath expression"/><xsl:value-of select="$parameter"/> <xsl:apply-templates select="Xpath" mode = qname> <xsl:sort select="string-expression" order=...> <xsl:with-param name="navn" select="expression"/> </xsl:apply-templates> </xsl:template> </xsl:stylesheet>

  33. Workshop – Delicatessen from the Kitchen of Mrs. Brodwall • For oppgaven er det definert et oppskriftshefte • 10 Gode Oppskrifter • Oppskriftene bruker et DTD • Vi skal lage tre stylesheets • List alle kategorier • List alle oppskrifter i en kategori • Vi én oppskift

  34. Organisasjon • Hver gruppe har ett område på STEP serveren • Se http://jonatan:port/groupX/ for instruksjoner og tips • .../groupX/recipes/stylesheet?param=value... • Eksempel .../recipe/recipes/list?type=Chinese • Bruker list.xsl med parameter type satt til Chinese • Stylesheet’ene ligger rett under groupX-sharet på jonatan • types.xsl, list.xsl, og show.xsl er definert • Dere kan godt definere egne stylesheets

More Related