Download - Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.

Transcript
Page 1: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.

Documentverwerking

<XML/>

Deel 3

Dieter Fiems

24 april 2009

1

Page 2: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.

Vandaag

XSLT (vervolg)

XML Schema

2

Page 3: Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Referenties

XML Schema

http://www.w3.org/TR/xmlschema-0/

31