Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.

Post on 18-Jun-2015

216 views 0 download

Transcript of Documentverwerking Deel 3 Dieter Fiems 24 april 2009 1.

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