Upload
klaas-abbink
View
218
Download
0
Embed Size (px)
Citation preview
Documentverwerking
<XML/>
Deel 3
Dieter Fiems
24 april 2009
1
Vandaag
XSLT (vervolg)
XML Schema
2
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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)
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
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
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
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 ""
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
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
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
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
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
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
Referenties
XML Schema
http://www.w3.org/TR/xmlschema-0/
31