Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.
-
Upload
klaas-abbink -
Category
Documents
-
view
217 -
download
0
Transcript of Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.
![Page 1: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/1.jpg)
Documentverwerking
<XML/>
Deel 3
Dieter Fiems
24 april 2009
1
![Page 2: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/2.jpg)
Vandaag
XSLT (vervolg)
XML Schema
2
![Page 3: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/3.jpg)
Beperkingen van DTDs
• DTDs kennen maar een beperkt aantal data-types (text,ID,IDREF,IDREFS,ENTITY,ENTITIES,...)
• Aparte syntax, geen XML<!ELEMENT elementnaam (#PCDATA) >
• Moeilijk uitbreidbaar
• Geen ondersteuning voor namespaces
• Deterministisch content-modelBijvoorbeeld: 3 kindelementen in willekeurige volgorde?
• Er kan geen structuur opgelegd worden bij mixed content<!ELEMENT mixedElement (#PCDATA,C1,C2)* >
3
![Page 4: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/4.jpg)
Schemata
Een schema is een document dat de toelaatbare inhoud van andere documenten beschrijft.•Document Type Definition•XML Schema
• w3c standaard• zie verder
•RELAX NG• REgular LAnguage for XML Next Generation• OASIS (Organization for the Advancement of
Structured Information Standards) standaard• ISO/IEC 19757• Heeft zowel XML syntax als niet-XML syntax
4
![Page 5: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/5.jpg)
XML Schema "Hello World"
<?xml version="1.0" encoding="UTF-8">
<greeting>
Hello World!
</greeting>
<?xml version="1.0" encoding="UTF-8">
<xsd:schema xmlns:"http://www.w3.org/2001/XMLSchema">
<xsd:element name="greeting" type="xsd:string" />
</xsd:schema>
5
![Page 6: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/6.jpg)
Associatie van document en schema
<?xml version="1.0" encoding="UTF-8">
<greeting
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="greeting.xsd">
Hello World!
</greeting>
<?xml version="1.0" encoding="UTF-8">
<-- bestandsnaam: greeting.dtd -->>
<xsd:schema xmlns:"http://www.w3.org/2001/XMLSchema">
<xsd:element name="greeting" type="xsd:string" />
</xsd:schema>
6
namespace van noNamespaceSchemaLocation
attribuut
namespace van noNamespaceSchemaLocation
attribuut
verwijzing naar het schemaverwijzing naar het schema
![Page 7: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/7.jpg)
Een uitgebreider voorbeeld
7
Voorbeeld:
po.xml (http://www.w3.org/TR/xmlschema-0/#po.xml)po.xsd (http://www.w3.org/TR/xmlschema-0/#po.xsd)
Schema bestaat uit:
element declaraties
type definities: simple en complex
annotaties
Orde heeft geen belang
Er is geen root element (in tegenstelling tot DTD)
![Page 8: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/8.jpg)
Elementdeclaratie
<element abstract = boolean: false block = (#all | List of (extension | restriction | substitution)) default = string final = (#all | List of (extension | restriction)) fixed = string form = (qualified | unqualified) id = ID maxOccurs = (nonNegativeInteger| unbounded) : 1 minOccurs = nonNegativeInteger : 1 name = NCName nillable= boolean: false ref = QName substitutionGroup= QName type = QName >
Content: (annotation?, ((simpleType| complexType)?, (unique | key | keyref)*)) </element>
8
![Page 9: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/9.jpg)
Attribuutdeclaratie
<attribute
default = string
fixed = string
form = (qualified | unqualified)
id = ID
name = NCName
ref = QName
type = QName
use = (optional | prohibited | required) : optional >
Content: (annotation?, (simpleType?))
</attribute>
9
![Page 10: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/10.jpg)
Declaraties ...
name de naam van het gedeclareerde element.
type het type van het element.
minOccursmaxOccurs
minimaal/maximaal aantal keren dat het element moet voorkomen; maxOccurs kan ook "unbounded" zijn.
fixeddefault
geeft het element/attribuut een vaste (fixed) of een default (default) waarde;de element/attribuutdeclaratie bevat slechts één van beiden.
SimpleTypeComplexType
het type van het element kan ook binnen de element/attribuutdeclaratie gedefinieerd worden.
ref Een referentie naar een globaal gedefineerd element/attribuut (elementdefinitie is kindelement van schema). Dit is nuttig als eenzelfde element/attribuut in verschillende type definities voorkomt.
use geeft aan of een attribuut al dan nietmag/moet voorkomen.
10
![Page 11: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/11.jpg)
Simple versus complex types
Complex
Alle elementen met kindelementen en/of attributen zijn complex
Complexe type definities leggen de structuur van documenten vast
Simple
Noch attributen, noch kind-elementen
Enkel content
Er kunnen beperkingen aan de content worden opgelegd met behulp van facets
11
![Page 12: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/12.jpg)
Complex types
<xsd:complexType name="myType" mixed="false"> <xsd:sequence> <xsd:element name="first" type="xsd:string"/> <xsd:element name="second">
<xsd:simpleContent><xsd:extension base="xsd:string"> <xsd:attribute name="someAttribute" type="xsd:string" /></xsd:extension>
</xsd:simpleContent></xsd:element>
<xsd:choice><xsd:element name="thirdA" type="xsd:string" /><xsd:element name="thirdB" type="xsd:integer" />
</xsd:choice> </xsd:sequence> <xsd:attribute name="anotherAttribute" type="xsd:date"/>
</xsd:complexType>12
![Page 13: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/13.jpg)
Complex Types
<complexType
abstract = boolean : false
block = (#all | List of (extension | restriction))
final = (#all | List of (extension | restriction))
id = ID
mixed = boolean : false
name = NCName >
Content: (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?))))
</complexType>
13
![Page 14: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/14.jpg)
Complex Types
name De naam van het complexe type
simpleContent Het type bevat geen kindelementen. Er kunnen wel restricties op de data en attributen worden gedefinieerd door middel van restricties/extenties van types zonder kindelementen. Voor restricties: zie SimpleTypes
complexContent Het type is geen simple Content. Kan vaak weggelaten worden.
choice Slecht één element van een choice groep wordt geselecteerd.
sequence De elementen van moeten in de opgegeven volgorde voorkomen.
all De elementen kunnen in gelijk welke volgorde voorkomen. Een all groep is kindelement van complexType en kan niet met sequence en choice gecombineerd worden.
mixed er kan karakter data aanwezig zijn tussen de elementen
14
![Page 15: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/15.jpg)
Empty / Any
Empty element met één attribuut
<xsd:element name="emptyElement">
<xsd:complexType>
<xsd:attribute name="currency" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
Element zonder restricties op kindelementen
<xsd:element name="geenRestricties" type="xsd:anyType" />
15
![Page 16: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/16.jpg)
Uitbreiding van complex typesCreatie van een nieuw type door elementen toe te voegen aan bestaande types
<complexType name="adres">
<sequence>
<element name="str" type="string"/>
<element name="stad" type="string"/>
</sequence>
</complexType>
<complexType name="USAdres">
<complexContent>
<extension base="adres">
<sequence><element name="state" type="string"/></sequence>
</extension>
</complexContent>
</complexType>16
![Page 17: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/17.jpg)
Build-in types
StringsENTITIES, ENTITY, ID, IDREF, IDREFS, language, Name, NCName, NMTOKEN, NMTOKENS, normalizedString, QName, string, token
Datumsdate, dateTime, duration, gDay, gMonth, gMonthDay, gYear, gYearMonth, time
Getallenbase64Binary, byte, decimal, double, float, hexBinary, int, integer, long, negativeInteger, nonPositiveInteger, positiveInteger, short, unsignedLong, unsignedInt, unsignedShort, unsignedByte
AndereanyURI, boolean, NOTATION, ...
17
![Page 18: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/18.jpg)
Simple Types
<xsd:simpleType name="myInteger">
<xsd:restriction base="integer">
<xsd:minInclusivevalue="2"/>
<xsd:maxInclusivevalue="18"/>
</xsd:restriction>
</xsd:simpleType>
<simpleType
final = (#all | List of (list | union | restriction))
id = ID
name = NCName >
Content: (annotation?, (restriction | list | union))
</simpleType>
18
facetsfacets
![Page 19: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/19.jpg)
Simple Types
<xsd:simpleType name="listOfMyInteger">
<xsd:list itemType="myInteger"/>
</xsd:simpleType>
<element name="myElement" type="listOfMyInteger" />
<myElement>2 18 9 15 17</myElement>
<xsd:simpleType name="myUnion">
<xsd:union memberTypes="xsd:string listOfMyInteger" />
</xsd:simpleType>
<element name="myElementToo" type="myUnion" />
<myElementToo>2 15 9 17 18</myElementToo>
<myElementToo>Hello World!</myElementToo>
19
![Page 20: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/20.jpg)
Facets
20
facet omschrijving
enumeration definieert een lijst van mogelijke waarden
fractionDigits aantal decimalen na de komma
length legt het aantal karakters/list items vast
maxExclusive maxInclusive minExclusive minIncluse
legt boven- en ondergrenzen vast van numerieke waarden
maxLength minLength
legt een bovengrens/ondergrens voor het aantal karakters vast
pattern de data moet aan een reguliere expressie voldoen
totalDigits legt het totaal aantal decimalen vast
whiteSpace Geeft weer hoe white space wordt behandeld (preserve, replace, collapse)
![Page 21: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/21.jpg)
Voorbeelden<xsd:elementname="weekdag">
<xsd:simpleType> <xsd:restriction base="xsd:string">
<xsd:enumeration value="maandag"/><xsd:enumeration value="dinsdag"/> <xsd:enumeration value="woensdag"/>
</xsd:restriction> </xsd:simpleType>
</xsd:element>
<xsd:elementname="witteRuimte"> <xsd:simpleType>
<xsd:restrictionbase="xsd:string"> <xsd:whiteSpace value="collapse"/></xsd:restriction>
</xsd:simpleType> </xsd:element>
21
![Page 22: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/22.jpg)
Voorbeelden
<xsd:elementname="keuzeLetter"> <xsd:simpleType>
<xsd:restriction base="xsd:string"> <xsd:pattern value="[abcd]"/>
</xsd:restriction> </xsd:simpleType>
</xsd:element>
<xsd:elementname="initialen"> <xsd:simpleType>
<xsd:restrictionbase="xsd:string"> <xsd:pattern value="[A-Z]{1,3}"/>
</xsd:restriction> </xsd:simpleType>
</xsd:element>
22
![Page 23: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/23.jpg)
Reguliere expressies
• een karakter: bijvoorbeeld a of c • speciale karakters:
\n (nieuwe lijn) \? (vraagteken) \s (white space karakter) ...• een keuze groep, a of b: (a|b) • Een karakterklasse: [abc],[0-9],[a-z]• Een karakter buiten de klasse: [^abc],[^0-9]• Quantifiers:
? één of geen* een willekeurig aantal+ minstens één{n} exact n{n,} ten minste n{n,m} tussen de n en m
23
![Page 24: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/24.jpg)
Namespaces
Verschillende woordenschatten in zelfde document
Onderscheid door middel van namespaces
Namespace gedefinieerd voor alle kind-elementen van een element
<pre1:element xmlns="URI 1"
xmlns:pre1="URI 2"
xmlns:pre2 ="URI 3" >
<pre1:elementnaam>...</pre1:elementnaam>
<pre2:elementnaam attr="...">...</pre2:elementnaam>
<elementnaam pre1:attr="..."> ... </elementnaam>
</pre1:element>24
default nsdefault ns
heeft ns ""heeft ns ""
![Page 25: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/25.jpg)
Namespaces en XML Schema
Target namespace
<schema targetNamespace="http://www.example.com/IPO"
xmlns="http://www.w3.org/2001/XMLSchema"xmlns:ipo="http://www.example.com/IPO"elementFormDefault="qualified"attributeFormDefault="unqualified" > ...
Eerste regel: alle elementen in het schema worden in deze namespace gedefinieerd
Tweede regel: default namespace is de schema namespace
Derde regel: gebruik ipo prefix om naar de targetnamespace te verwijzen
Vierde en vijfde regel: globale attribuut- en elementdefinities behoren steeds tot de namespace, lokale ook indien "qualified".
25
![Page 26: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/26.jpg)
Namespaces en XML Schema
Associatie met schema
<ipo:purchaseOrder
xmlns:ipo="http://www.example.com/IPO"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/IPO ipo.xsd">
....
</ipo:purchaseOrder>
26
![Page 27: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/27.jpg)
Namespaces en XML Schema
Meerdere schema's•specifeer de namespaces in het XML document•associeer het schema van het root element•importeer de andere schema's in het schema van het root element
27
![Page 28: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/28.jpg)
Voorbeeld
<!-- bestand song.xml --> <SONG xmlns=”http://ns.cafeconleche.org/song”
xmlns:xlink=”http://www.w3.org/1999/xlink” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation = “http://ns.cafeconleche.org/song song.xsd
http://www.w3.org/1999/xlink xlink.xsd” >
<TITLE>Hot Cop</TITLE> <PHOTO xlink:type=”simple” xlink:href=”hotcop.jpg”
xlink:show=”embed” xlink:actuate=”onLoad” ALT=”Victor Willis in Cop Outfit” />
<COMPOSER>Jacques Morali</COMPOSER> <YEAR>1978</YEAR> <ARTIST>Village People</ARTIST>
</SONG>
28
![Page 29: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/29.jpg)
Voorbeeld
<!-- bestand xlink.xsd --><xsd:schema
xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns=”http://www.w3.org/1999/xlink” targetNamespace=”http://www.w3.org/1999/xlink” attributeFormDefault=”unqualified” >
<xsd:attribute name=”type” type=”xsd:string” fixed=”simple”/> <xsd:attribute name=”href” type=”xsd:anyURI”/> <xsd:attribute name=”actuate” type=”xsd:string” fixed=”onLoad”/> <xsd:attribute name=”show” type=”xsd:string” fixed=”embed”/>
</xsd:schema>
29
![Page 30: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/30.jpg)
Voorbeeld<!-- bestand song.xsd --><xsd:schema
xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns=”http://ns.cafeconleche.org/song” xmlns:xlink=”http://www.w3.org/1999/xlink” targetNamespace=”http://ns.cafeconleche.org/song” elementFormDefault=”qualified” attributeFormDefault=”unqualified” >
<xsd:import namespace=”http://www.w3.org/1999/xlink” schemaLocation=”xlink.xsd”/> <xsd:element name=”SONG” type=”SongType”/> <xsd:complexType name=”PhotoType”>
<xsd:attribute name=”ALT” type=”xsd:string” use=”required” /> <xsd:attribute ref=”xlink:type”/> <xsd:attribute ref=”xlink:href” use=”required”/> <xsd:attribute ref=”xlink:actuate”/> <xsd:attribute ref=”xlink:show”/>
</xsd:complexType> <xsd:complexType name=”SongType”> ... </xsd:complexType> </xsd:schema>
30
![Page 31: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.](https://reader036.fdocument.pub/reader036/viewer/2022062418/5551a0f14979591f3c8bbe84/html5/thumbnails/31.jpg)
Referenties
XML Schema
http://www.w3.org/TR/xmlschema-0/
31