XML og JDOM Helge Furuseth furuseth@idi.ntnu.no
XML XML = Extensible Markup Language Basert på SGML Standard Generalized Markup Language HTML = Hypertext Markup Language Også basert på SGML Mange likheter
HTML
HTML-kode <html> <head> <title>jons HTML-dokument</title> </head> <body bgcolor="yellow"> <h1 align=center>jons HTML-overskrift</h1> <p>bla bla bla, <br> bla bla <P>Bla bla bla </body> </html>
XML-kode <html> <head> <title>jons XML-dokument</title> </head> <body bgcolor="yellow"> <h1 align="center">jons h1-element</h1> <p>bla bla bla, <br/> bla bla</p> <p>bla bla bla</p> </body> </html>
Forskjeller fra HTML XML har strengere syntaks XML har ingen semantikk XML er utvidbart (extensible)
Strengere syntaks Case-sensitiv <tag> forskjellig fra <TAG> Slutt-tagger påbudt <br> alene ulovlig <br></br> eller <br/> Attributtverdier må ha anførselstegn Galt: <h1 align=center> Riktig: <h1 align= center >
Ingen semantikk
Utvidbart Lag egne tagger og attributter <?xml version="1.0"?> <person id= helgemann" location="itvest-060"> <name>helge Furuseth</name> <description> <text> Helge er student ved IDI og und.ass i sif8040 </text> </description> </person>
Dokumentbeskrivelse Document Type Description (DTD) beskriver XML dokumentets oppbygging <!DOCTYPE person [ <!ELEMENT person (name, description)> <!ELEMENT name (#PCDATA)> <!ELEMENT description (text, imageurl?)> <!ELEMENT text (#PCDATA)> <!ELEMENT imageurl (#PCDATA)> ]> <!ATTLIST person id CDATA #REQUIRED> <!ATTLIST person location CDATA #IMPLIED>
Parsing XML parses slik at applikasjonen kan forstå det Sjekker for syntaks (vel-formethet) og kan validere dette mot en DTD Mest vanlig: DOM (Document Object Model) og SAX (Simple API for XML)
Navnerom XML som beskriver en tabell: <table> <row> <data>apples</data> <data>bananas</data> <row> </table> XML som beskriver et bord: <table> <name>african Coffee Table</name> <width>80</width> <length>120</length> </table>
Navnerom (2) <gui:table xmlns:gui= http://www.idi.ntnu.no/gui > <gui:row> <gui:data>apples</gui:data> <gui:data>bananas</gui:data> <gui:row> </gui:table> <furniture:table xmlns:furniture= http://www.furniture.no > <furniture:name> African Coffee Table </furniture:name> <furniture:width>80</furniture:width> <furniture:length>120</furniture:length> </furniture:table>
Default Namespaces and Scope <table xmlns= http://www.idi.ntnu.no/gui > <row> <data> <furniture:table xmlns:furniture= http://www.furniture.no > <furniture:name> African Coffee Table </furniture:name> <furniture:width>80</furniture:width> <furniture:length>120</furniture:length> </furniture:table> </data> <row> </table>
JDOM http://www.jdom.org
JDOM Java-klasser som representerer XMLdokumenter Java Document Object Model Alternativ til DOM (og SAX) org.jdom.* Viktige klasser: Element Attribute Document
Element Element(String name) Attributter: setattribute(string name, String value) String getattributevalue(string name) Attribute getattribute(string name) Barn: addcontent(element child / String text) Element getchild(string name) String gettext() List getchildren()
Attribute Attribute(String name, String value) Verdi-metoder: String getvalue() int getintvalue() boolean getbooleanvalue() osv. Element-metoder ofte tilstrekkelig
Document Document(Element rootelement) Element getrootelement()
Hente innhold <?xml version="1.0"?> <person id= helgemann" location="itvest-060"> <name>helge Furuseth</name> <description> <text> Helge er student ved IDI og und.ass i sif8040 </text> </description> </person> Element rootelement = mittxmldocument.getrootelement(); Element description = rootelement.getchild( description"); Element descriptiontext = description.getchild( text ); String text = descriptiontext.gettext();
Hent innhold direkte <?xml version="1.0"?> <person id= helgemann" location="itvest-060"> <name>helge Furuseth</name> <description> <text> Helge er student ved IDI og und.ass i sif8040 </text> </description> </person> String text = mittxmldocument.getrootelement().getchild( description").getchild( text ).gettext();
Legg til innhold Element imageurl = new Element( imageurl"); Text text = new Text ( http://www.stud.ntnu.no/~furuseth/meg.jpeg"); imageurl.addcontent (text); mittxmldocument.getrootelement().getchild( description").addcontent (imageurl); <?xml version="1.0"?> <person id= helgemann" location="itvest-060"> <name>helge Furuseth</name> <description> <text> Helge er student ved IDI og und.ass i sif8040 </text> <imageurl>http://www.stud.ntnu.no/~furuseth/meg.jpeg</imageurl> </description> </person>
XML-output org.jdom.output.xmloutputter XMLOutputter(String indent, boolean newlines) output(document, Writer/OutputStream) output(element, Writer/OutputStream)
XML-input org.jdom.input.saxbuilder SAXBuilder(String saxparserclassname) new SAXBuilder( org.apache.xerces.parsers.saxparser ) Document build(file/reader/inputstream)
Innputt/utputt eksempel import java.io.*; import org.jdom.*; import org.jdom.input.*; import org.jdom.output.*; public class PrettyPrinter { public static void main(string[] args) { // Anta at argument er filnavn String filename = args[0]; try { // Bygger dokument med SAX uten validering SAXBuilder builder = new SAXBuilder(); // Lager document Document doc = builder.build(new File(filename)); } } // Skriver ut dokument til standard utputt XMLOutputter fmt = new XMLOutputter(); fmt.output(doc, System.out); } catch(exceptione) { e.printstacktrace(); }
XML-output eksempel Document minxml = ; //Generer Document URL url = new URL ( protokoll://gribb06.idi.ntnu.no:5555 ); URLConnection connection = url.openconnection(); OutputStream out = connection.getoutputstream(); XMLOutputter outputter = new XMLOutputter (, false); Outputter.output (minxml, out);