Documentverwerking
<XML/>
Deel 1
Dieter Fiems
27 maart 2009
1
XML?
Extensible Markup Language (XML) is a simple, very flexible text format derived from SGML (ISO 8879). Originally designed to meet the challenges of large-scale electronic publishing, XML is also playing an increasingly important role in the exchange of a wide variety of data on the Web and elsewhere.
[www.w3.org]
2
XML?
XML could not have happened without the World Wide Web. The Web has become a universal mechanism to deliver information to consumers and increasingly, to applications as well.
[Adler et Al., IBM Systems Journal 2006]
3
XML?
Vandaag ontpopt XML zich stilaan als hét universele formaat voor het elektronisch uitwisselen van informatie.
[De Tijd, 2002]
4
XML?
The original motivation for SGML, subsequently passed on to XML, was to ensure that the content or data residing in documents survived long after the application that processed it became obsolete or unusable; thus no processing or procedural information is embedded within the content; instead, content is encoded as clear text and available everywhere.
[Adler et Al., IBM Systems Journal 2006]
5
XML?
Open Document Format (ODF) wordt de standaard voor kantoordocumenten bij de Belgische federale overheid. Andere formaten - en met name die van Microsoft Office - zullen in de toekomst niet meer gebruikt mogen worden voor de uitwisseling van documenten.
[De Standaard, 2006]
6
XML?
[enterprise content management …] Een sleutelrol daarbij is weggelegd voor XML om data uit verschillende bronnen samen te kunnen voegen tot documenten in verschillende formaten, en die vervolgens naar de juiste bestemmeling (eventueel zelfs een website) te brengen.
[Datanews]
7
Vandaag
XML
SAX
DTD
8
Wat is XML?
• EXtensible Markup Language• Ontwikkeld door het World Wide Web Consortium
http://www.w3.org
• Introductie van structuur in tekstdocumenten door middel van “tags”
• Er is geen vaste set van “tags”
• Een schema (DTD, XML Schema, Relax NG, …) is een beschrijving van het type van een XML document. Een schema legt voorwaarden op aan de structuur en de inhoud van het document.
• Schema’s zijn uitbreidbaar.
9
Geschiedenis
GML (1969)Generalized Markup LanguageIntroductie van “generic coding” (scheiding van inhoud en stijl)
SGML (1986)Standard Generalized Markup LanguageISO standaardHet is een “zware” structuurbeschrijvingstaal met een beperkt succes.
HTML (1992)Een eenvoudige taal gebaseerd op SGML voor het opmaken van webpagina’sHTML bevat stijlcodes (in strijd met generic coding)
10
Geschiedenis
XML 1.0 (1998)
Het W3C vormt in 1996 een XML werkgroep met deze doelstellingen:
1. XML zal eenvoudig bruikbaar zijn over het internet.
2. XML zal een ruime keuze aan toepassingen ondersteunen.
3. XML zal compatibel zijn met SGML.
4. Het moet eenvoudig zijn programma’s te schrijven die XML documenten verwerken.
5. Het aantal optionele onderdelen in XML moeten tot een minimum beperkt worden, idealiter zijn er geen.
11
Geschiedenis
6. XML documenten moeten leesbaar zijn en voldoende duidelijk.
7. Het XML ontwerp dient snel voorbereid te worden.8. Het XML ontwerp zal formeel en bondig zijn.9. XML documenten kunnen eenvoudig aangemaakt
worden.10. Beknoptheid in XML opmaak is van minimaal belang. XML 1.1 (2004)XSL: XSLT 1.0 (1999), XPath 1.0 (1999), XSL-FO (2006)Namespaces in XML 1.0 en 1.1 (2006)XHTML (2000)XML Schema (2004)
12
XML woordenschatten
MATHML – Wiskundige formules
SVG – Scalable Vector Graphics
RSS – Really Simple Syndication
CML – Chemical Markup Language
SportsML – uitwisseling van sportdata
UBL – Universele zakentaal
enz …
13
Een voorbeeld<?xml version=“1.0” encoding=“UTF-8”?><!DOCTYPE transactie SYSTEM “transactie.dtd”><!– Dit is een voorbeeld van een transactie --><transactie>
<koper><persoon>
<voornaam>John</voornaam><naam>Doe</naam>
</persoon></koper><stuk>
<prijs eenheid=“euro”>19.99</prijs><cd>
<titel>Sgt. Pepper’s Lonely Hearts Club Band</titel><artist>The Beatles</artist>
</cd></stuk>
</transactie>
root elementroot element
child elementchild element
attribuutattribuut waardewaarde
teksttekst
begintagbegintag
eindtageindtag
14
xml declaratiexml declaratiedocument
typedocument
type
commentaarcommentaar
Well-formed vs. Valid Documenten
Well-formed:-Het document voldoet aan de syntax regels van XML-Alle “parsed entities” waarnaar gerefereerd wordt binnen het document voldoen ook aan die regels
Valid: -Het document is well-formed-Er is een schema geassocieerd aan het document en het document beantwoord aan dat schema.
15
xml declaratie
<?xml version=“1.0” encoding=“UTF-8”?>
Optioneel in XML 1.0 en verplicht in XML 1.1Bovenaan het documentGeeft aan welke XML versie gebruikt wordtGeeft aan welke karakter encodering gebruikt wordt
UTF-8UTF-16iso-8859-1
“Bijna” alle unicode karakters kunnen in een XML document gebruikt worden. Een aantal karakters hebben een bijzondere betekenis: “<“ en “&”.
16
Document type
OptioneelKan refereren naar externe Document Type Definition (DTD):
<!DOCTYPE RootElement SYSTEM “bestand.dtd”><!DOCTYPE RootElement
PUBLIC “-//OASIS//DTD DocBook XML//EN” “bestand.dtd”>Kan zelf DTD informatie bevatten:
<!DOCTYPE RootElement [...
]>Of beide:
<!DOCTYPE RootElement SYSTEM “bestand.dtd” [...
]>
17
Elementen <naam> … </naam>
Elementen structureren het document. Er is maar één top element (root element).
Tussen een starttag en een eindtag. Starttag kan attributen bevatten. Er zijn beperkingen op de karakters die gebruikt
mogen worden voor de tagnaam (onder meer een aantal leestekens). Er zijn extra voorwaarden voor het eerste teken van een tagnaam (onder meer geen cijfer, punt of koppelteken).
Tagnamen zijn case-sensitive.
18
Inhoud van een element
Element content
<persoon><naam>Doe</naam></persoon>
Parsed Character Data (PCDATA)
<naam>Doe</naam>
Mixed Content
<persoon>John <naam>Doe</naam></persoon>
No content
<naam/>
<naam></naam>
19
Attributen <naam attribuut=“…”/>
Namen van attributen voldoen aan zelfde vereisten als namen van elementen.
Een attribuut mag slechts één maal in een starttag voorkomen.
De waarde van het attribuut tussen enkelvoudige of dubbele aanhalingstekens.
De waarde mag geen < en & bevatten, wel “referenties” (zie verder).
20
Granulariteit en densiteit
Laag: enkel de hoogst nodige tagsLaag: enkel de hoogst nodige tags•Pro: eenvoudig en goedkoop aan te maken, automatische Pro: eenvoudig en goedkoop aan te maken, automatische omzetting van andere formaten mogelijkomzetting van andere formaten mogelijk•Contra: waarschijnlijk enkel bruikbaar voor één enkele toepassingContra: waarschijnlijk enkel bruikbaar voor één enkele toepassing
Bv.: Bv.: <naam>John Doe</naam><naam>John Doe</naam>
Hoog: alles wat een aparte betekenis heeft wordt Hoog: alles wat een aparte betekenis heeft wordt afzonderlijk gemerktafzonderlijk gemerkt•Contra: hoge initiële investering, manuele assistentie bij opstelling Contra: hoge initiële investering, manuele assistentie bij opstelling dikwijls nodigdikwijls nodig•Pro: verschillende aanwendingen van dezelfde gegevens mogelijkPro: verschillende aanwendingen van dezelfde gegevens mogelijk
Bv.: Bv.: <naam><voornaam>John</voornaam><naam><voornaam>John</voornaam> <achternaam>Doe</achternaam></naam> <achternaam>Doe</achternaam></naam>
21
PCDATA en CDATA
PCDATA (Parsed Character Data)
Tekst
Kan “referenties” bevatten
Geen < en &.
CDATA (Character Data)
<![CDATA[ … ]]>
mag wel < en & bevatten (maar geen “]]>”)
wordt niet door de parser verwerkt
geen referenties
22
Referenties
Karakterreferentiesvoorgedefineerd:
& < > ' "adhv unicode nummer:
© © (= ©)
(Parsed) entiteitsreferentiesIn de DTD kunnen ook andere entiteiten gedefinieerd worden. Een entiteit kan een stuk XML code bevatten.
&entiteitsnaam;
23
Commentaar
• Begint met “<--” en eindigt met “-->>”. • “--” kan niet voorkomen in de commentaar tekst• kan niet eindigen met “--->>“• “<“ en “&” mogen wel voorkomen• Wordt door XML parsers niets steeds doorgegeven
aan de toepassing
24
Processing Instructies
<?PItarget instructie?>
De “instructie” wordt doorgegeven aan de toepassing “PItarget”.
PItarget mag dezelfde tekens als een elementnaam bevatten.
Pitarget mag het woord “xml” niet bevatten.
De instructie mag alle tekens bevatten.
De instructie mag het woord “?>” niet bevatten
25
SAX
Simple API for XMLGenereert events bij het doorlopen van een XML bestandEvents bij:
XML elementen (begin en einde)tekst blokkenPI instructiesCommentaar…
Zelf te programmeren event handlers Doorloopt het bestand één maal
Jaxp: java API for XML processingBijvoorbeeld: xerxes (http://xerxes.apache.org/xerces2-j )
26
Jaxp (SAX)
try { // creeer het SAX parserobject SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser();
// creeer de event handler SAXDemo eventHandler = new SAXDemo(); // parse het bestand parser.parse(bestandsnaam, eventHandler);} catch (Exception e) { e.printStackTrace();}
27
Jaxp (SAX)
public class SAXDemo extends DefaultHandler {
public void startElement(String uri, String localName,String qName, Attributes atts) throws SAXException {
System.out.print("startElement(\"" + qName + "\", (");for (int i = 0; i < atts.getLength(); i++) {
System.out.print("(\"" + atts.getQName(i) + "\", \"" + atts.getValue(i) + "\")");if (i != atts.getLength() – 1) System.out.print(", ");
}System.out.println(“));");
}
28
uri namespaceuri namespace lijst van attributenlijst van attributen
volledige naamvolledige naam
lokale naamlokale naam
Jaxp (SAX)
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("endElement(\"" + qName + "\");"); } public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println("characters(\"" + new String(ch, start, length) +"\");"); } public void beginDocument() throws SAXException {
System.out.println("endDocument();\n"); } public void endDocument() throws SAXException {
System.out.println("endDocument();\n"); }}
29
DTD
DTD betekent “Document Type Definition”DTD betekent “Document Type Definition”
Het is een in “XML” geschreven beschrijving van de Het is een in “XML” geschreven beschrijving van de toegelaten structuur van een “type” documenten, bvb.toegelaten structuur van een “type” documenten, bvb.
Een reeks tijdschriftenEen reeks tijdschriften
Een reeks technische handleidingenEen reeks technische handleidingen
Een collectie referentieboekenEen collectie referentieboeken
Geeft de hiërarchie en de “granulariteit” (detailniveau) Geeft de hiërarchie en de “granulariteit” (detailniveau) van het document opvan het document op
Is niet verplicht, maar laat toe dat de structuur van een Is niet verplicht, maar laat toe dat de structuur van een specifiek document nauwkeurig gecontroleerd wordt, en specifiek document nauwkeurig gecontroleerd wordt, en behoort tot het “type”behoort tot het “type”
30
DTD
• De DTD definieert de "structuurboom" van een De DTD definieert de "structuurboom" van een documenttype of documentklassedocumenttype of documentklasse
• Een document dat hoort bij een type of klasse kan Een document dat hoort bij een type of klasse kan ook voorgesteld worden als een boom; deze boom is ook voorgesteld worden als een boom; deze boom is verwant met de structuurboom van de document-verwant met de structuurboom van de document-klasse (DTD) waartoe het document hoort, maar is klasse (DTD) waartoe het document hoort, maar is niet identiekniet identiek
• De DTD boom bevat, in elk knooppunt, één De DTD boom bevat, in elk knooppunt, één elementdefinitieelementdefinitie
• De documentboom bevat, in elk knooppunt, een De documentboom bevat, in elk knooppunt, een vertakking voor elk effectief aanwezig element van vertakking voor elk effectief aanwezig element van het documenthet document
DTD
DTD BoomDTD Boom
BoekBoek Hoofd+Hoofd+ Par+Par+
Samen?Samen?
AA betekent juist éénmaal Abetekent juist éénmaal AA?A? betekent geen of één Abetekent geen of één AA+A+ betekent één of meerdere A’sbetekent één of meerdere A’sA*A* betekent geen, één of meerdere A’sbetekent geen, één of meerdere A’s
DTD
Document BoomDocument Boom
BoekBoek HoofdHoofd ParPar
SamenSamen
ParPar
ParPar
ParPar
ParPar
HoofdHoofd
HoofdHoofd
<!ELEMENT>
Een element declaratie geeft aan hoe de verschillende elementen met elkaar verbonden zijn
Verschillende mogelijkheden
Geen child elementen, geen tekstEnkel child elementenEnkel tekstZowel tekst als child elementen
Geen beperkingen
34
<!ELEMENT>
Element content
sequence groep
<!ELEMENT Elementnaam (A,B,C) >
choice groep
<!ELEMENT Elementnaam (A|B|C)>
<!ELEMENT Elementnaam (A,(B|C))>
haakjes zijn nodig als operatoren worden gemengd35
AA BB CC
AA
BB
CC
<!ELEMENT>
Hoeveelheidcontrole (“Quantity Control” )Hoeveelheidcontrole (“Quantity Control” )
AA betekent juist éénmaal Abetekent juist éénmaal A
A?A? betekent geen of één Abetekent geen of één A
A+A+ betekent één of meerdere A’sbetekent één of meerdere A’s
A*A* betekent geen, één of meerdere A’sbetekent geen, één of meerdere A’s
36
<!ELEMENT>
Enkel "deterministic content models" toegelaten
De parser moet op elk moment kunnen afleiden welke regel gevolgd wordt zonder vooruit te kijken
Voorbeelden van fouten
<!ELEMENT A ((B,C)|(B,D))>
<!ELEMENT A
((A,B,C)|(B,A,C)|(C,A,B)|(A,C,B)|(B,C,A)|(C,B,A))>
<!ELEMENT (A+,A)>
<!ELEMENT (A?,A)>
37
<!ELEMENT>
Empty element
<!ELEMENT Elementnaam EMPTY>
Geen beperkingen
<!ELEMENT Elementnaam ANY>
Tekstelement
<!ELEMENT Elementnaam (#PCDATA) >
38
<!ELEMENT>
Mixed content
<!ELEMENT Elementnaam (#PCDATA|A|B)* >
Opgelet:
#PCDATA moet eerst staan
Enkel in een repeteerbare choice groep
Geen duplicaten in de lijst van mogelijke child elementen
De volgorde van de elementen kan dus niet worden opgegeven
39
Referenties
Extensible Markup Language (XML) 1.0http://www.w3.org/TR/2008/REC-xml-20081126/
Extensible Markup Language (XML) 1.1http://www.w3.org/TR/2006/REC-xml11-20060816/
Simple API for java
http://www.saxproject.org/
40
Volgende week
DTD (vervolg)
XPath
XSLT
Opgave project
41