Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23...

31
Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november

Transcript of Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23...

Page 1: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

Leukere documenten dankzij DTD en schema

Diederik Gerth van Wijk

XML Holland 2005

Papendal, 23 november

Page 2: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 2

Leukere documenten dankzij DTD en schema

Wat maakt een document leuk?

Wat zijn schema’s?

Wie gebruikt schema’s?

Wat voor soorten schema’s zijn er?

Hoe maak je een schema?

Moet je zelf wel een schema maken?

Hoe beheer je schema’s?

The DTD to end all DTDs

Page 3: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 3

Wat maakt een document leuk?

Een leuk document is— leuk om te schrijven

— leuk om te lezen

“leuk” = “goedkoop”, “gemakkelijk”, “correct”, “consequent”, “voorspelbaar”, “informatief”

Schrijven / Lezen:—Een database die moet uitwisselen met een andere database

—Een programma dat een verslag maakt / een mens die de fouten leest, een programma dat statistieken bijwerkt

—Een auteur die in Word® een document tikt / een mens die PDF leest

—Een auteur die in XMetal een XML-document tikt / een mens die een site leest

—Een conversie- of transformatieprogramma (leest en schrijft)

XML-documenten zijn er om automatisch verwerkt te worden

Markup zonder processing is waardeloos

Page 4: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 4

Een voorbeeld

ZinHet is verbazend hoe moeilijk het is een voorbeeld te vinden van

eentijdschrift waarvan de artikelen alleen uit alinea’s bestaan, zonder paragrafen dus.

Vandaar dat ik nu een verzonnen voorbeeld moet tikken, dat u dan ook niet op www.kluwer.nl vindt.

ArtikelTitel

Alineanadruk

href

Page 5: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 5

Voorbeeld (2)

<artikel><titel>Zin</titel><alinea>Het is verbazend hoe moeilijk het is een voorbeeld te vinden van een tijdschrift waarvan de artikelen alleen uit alinea’s bestaan, zonder paragrafen dus.</alinea><alinea>Vandaar dat ik nu een <nadruk>verzonnen</nadruk> voorbeeld moet tikken, dat u dan ook niet op <href uri=”http://www.kluwer.nl”>www.kluwer.nl</href> vindt.</alinea></artikel>

Page 6: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 6

Wat zijn schema’s?

Een schema beschrijft waar documenten van een bepaald type aan moeten voldoen

Hulpmiddel om leuke documenten van nare te scheiden (valideren, parseren, redigeren)

Voegt informatie over het document toe die niet in het document staat of zelfs kan staan

Een goed schema heeft een formeel deel, voor machinale validatie

Een goed schema heeft een informeel deel, voor mensen!

De verzameling valide documenten wordt bepaald door wat verwerkt kan worden

De verzameling valide documenten volgens het informele deel is een piepkleine deelverzameling van de verzameling valide documenten volgens het formele deel!

Page 7: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 7

Wie gebruikt schema’s?

De redacteur die een auteur moet instrueren

De beheerder die een XML-editor moet inrichten

Die XML-editor

De programmeur die een conversiescript van RTF naar XML schrijft

De zetter die een PDF moet maken van XML

De webmaster die een site moet vullen

De parser die een PSVI op moet leveren voor XPath 2.0 / XSLT 2.0

Page 8: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 8

Een PSVI???????

Post Schema Validation Infoset

Vertelt van attributen en eenvoudige elementen wat hun datatype is<x>3e2</x> &lt; <y>4</y>

Vertelt van attributen en elementen van welk type (class) ze zijn

En XSLT 2.0 en XPath 2.0 kunnen daar dan wat mee

Page 9: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 9

Van tikken of database via XML naar PDF, web, database

Page 10: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 10

Wat staat er in een schema?

Een lijst van benoemde elementen en attributen

Datatypen en andere aanwijzingen over de semantiek

Verplicht, een of meer keer

Binnen welke elementen

In welke volgorde

Extra restricties (bijv. elke rij even veel kolommen)

Omschrijving van gedacht gebruik:—“De <titel> van kort samen waar zijn moeder-element over gaat, op

een manier die ook buiten zijn context, bijvoorbeeld in een inhoudsopgave of een hitlist begrijpelijk is.”

—“Omdat een titel hergebruikt moet kunnen worden in een contekst waar tabellen en voetnoten niet op de normale wijze verwerkt kunnen worden, worden deze ontraden in een titel.”

—“Een titel is herkenbaar door korps, lettertype en/of zwaarte”

Page 11: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 11

Wat voor soorten schema’s zijn er?

SGML DTD: <!ELEMENT artikel o o (titel, alinea+)> XML DTD: <!ELEMENT artikel (titel, alinea+)> XML Schema: <xs:element name="artikel">

<xs:complexType>

<xs:sequence>

<xs:element ref="titel"/>

<xs:element maxOccurs="unbounded" ref="alinea"/>

</xs:sequence>

</xs:complexType>

</xs:element>

Relax NG: element artikel { titel, alinea+ }

Schematron

Examplotron

XSLT

CSS

FOSI

Page 12: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 12

DTD’s

Standaard in SGML en XML “meegebakken”

SGML kent meer (maar irrelevante) datatypen en opties dan XML

In SGML kan de volgorde van verplichte elementen willekeurig zijn, in XML-DTD’s niet (andere schematalen wel)

Document kan zelf de DTD aanpassen via parameter-entiteiten

DTD kan algemene (en in SGML ook systeem-)entiteiten specificeren

DTD kan verstekwaarden van attributen bepalen

Eigen notatie, die van documenten afwijkt

Uit document-wereld: —mixed content belangrijk—data in elementen bestemd voor mensen—data in attributen bestemd voor machines (metadata)

Page 13: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 13

Voorbeeld DTD

<!-- artikel1.dtd, dtd voor artikelen --><!-- root-element: artikel --><!-- typische aanroep:<!DOCTYPE artikel PUBLIC '-//MijnBV//DTD artikel v1//NL‘ 'artikel1.dtd'>--><!-- (c) copyright 2005 Diederik Gerth van Wijk --><!-- versie 1.0, 2005-11-22 -->

<!-- verwijzingen mogen geen verwijzingen bevatten, wel nadruk etc --><!ENTITY % lopendetekstzondervw "#PCDATA | nadruk"><!ENTITY % verwijzingen "| href"><!ENTITY % lopendetekst "%lopendetekstzondervw; %verwijzingen;"><!ENTITY % bloktekst "%lopendetekst;"><!ENTITY % URItype "CDATA">

<!ELEMENT artikel (titel, alinea+)>

<!ELEMENT titel (%lopendetekst;)*>

<!ELEMENT alinea (%bloktekst;)*>

<!ELEMENT nadruk (%lopendetekst;)*>

<!ELEMENT href (%lopendetekstzondervw;)*><!ATTLIST href uri %URItype; #REQUIRED>

Page 14: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 14

W3C XML Schema

Vanuit datawereld

Nadruk op eenvoudige attributen en elementen, niet op mixed content

Veel ingebouwde datatypes (deel 2)

Mogelijkheid voor ontwikkelen nieuwe datatypes

Objectgeöriënteerd

Elementen en attributen kunnen van bepaald type zijn

XPath 2.0 en XSLT 2.0 kunnen op dat type werken

Types zitten alleen in het schema, niet in het document

Aanval op well formed documenten die stand alone verwerkbaar zijn

Page 15: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 15

Voorbeeld W3C XML Schema (1)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema“ elementFormDefault="qualified">

<xs:group name="lopendetekstzondervw"> <xs:sequence> <xs:element minOccurs="0" ref="nadruk"/> </xs:sequence> </xs:group> <xs:element name="verwijzingen" abstract="true"> <xs:complexType mixed="true"> <xs:group minOccurs="0" maxOccurs="unbounded" ref="lopendetekstzondervw"/> <xs:attribute name="uri" use="required" type="URItype"/> </xs:complexType> </xs:element> <xs:group name="lopendetekst"> <xs:choice> <xs:group ref="lopendetekstzondervw"/> <xs:element ref="verwijzingen"/> </xs:choice> </xs:group> <xs:group name="bloktekst"> <xs:sequence> <xs:group ref="lopendetekst"/> </xs:sequence> </xs:group> <xs:simpleType name="URItype"><xs:restriction base="xs:string"/></xs:simpleType>

Page 16: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 16

Voorbeeld W3C XML Schema (2)

<xs:element name="artikel"> <xs:complexType> <xs:sequence> <xs:element ref="titel"/> <xs:element maxOccurs="unbounded" ref="alinea"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="titel"> <xs:complexType mixed="true"> <xs:group minOccurs="0" maxOccurs="unbounded" ref="lopendetekst"/> </xs:complexType> </xs:element> <xs:element name="alinea"> <xs:complexType mixed="true"> <xs:group minOccurs="0" maxOccurs="unbounded" ref="bloktekst"/> </xs:complexType> </xs:element> <xs:element name="nadruk"> <xs:complexType mixed="true"> <xs:group minOccurs="0" maxOccurs="unbounded" ref="lopendetekst"/> </xs:complexType> </xs:element> <xs:element name="href" substitutionGroup="verwijzingen"/></xs:schema>

Page 17: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 17

Relax NG

Relax + Trex = Relax NG

Op reguliere expressies (patronen) gebaseerd

Zelfde, zo niet meer zeggingskracht als XML Schema

Types heten nu “patronen”

Twee notaties:—Voluit—Compact

Gebruikt Datatypen van W3C XML Schema (deel 2)

Page 18: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 18

Voorbeeld Relax NG XML-notatie (1)

<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary=""> <define name="lopendetekstzondervw"><choice><text/><ref

name="nadruk"/></choice></define> <define name="verwijzingen"><ref name="href"/></define> <define name="lopendetekst"> <choice><ref name="lopendetekstzondervw"/><ref name="verwijzingen"/></choice> </define> <define name="bloktekst"><ref name="lopendetekst"/></define> <define name="URItype"><data type="string"/></define> <define name="artikel"> <element name="artikel"> <ref name="titel"/> <oneOrMore> <ref name="alinea"/> </oneOrMore> </element> </define> <define name="titel"> <element name="titel"><zeroOrMore><ref

name="lopendetekst"/></zeroOrMore></element> </define> <define name="alinea"> <element name="alinea"><zeroOrMore><ref name="bloktekst"/></zeroOrMore></element> </define>

Page 19: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 19

Voorbeeld Relax NG XML-notatie (2)

<define name="nadruk"> <element name="nadruk"> <zeroOrMore><ref name="lopendetekst"/></zeroOrMore> </element> </define>

<define name="href"> <element name="href">

<ref name="attlist.href"/> <zeroOrMore> <ref name="lopendetekstzondervw"/> </zeroOrMore> </element> </define> <define name="attlist.href" combine="interleave"> <attribute name="uri"> <ref name="URItype"/> </attribute> </define>

<start> <choice> <ref name="artikel"/> </choice> </start></grammar>

Page 20: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 20

Voorbeeld Relax NG Compacte notatie

# artikel1.rnc, Relax NG schema voor artikelen# (c) copyright 2005 Diederik Gerth van Wijk# versie 1.0, 2005-11-22# verwijzingen mogen geen verwijzingen bevatten, wel nadruk etc

lopendetekstzondervw = text | nadrukverwijzingen = hreflopendetekst = lopendetekstzondervw | verwijzingenbloktekst = lopendetekstURItype = string

artikel = element artikel { titel, alinea+ }

titel = element titel { lopendetekst* }

alinea = element alinea { bloktekst* }

nadruk = element nadruk {lopendetekst* }

href = element href { attlist.href, lopendetekstzondervw* }attlist.href &= attribute uri { URItype }

start = artikel

Page 21: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 21

Hoe maak je een schema?

Documentanalyse is data-analyse: 1-op-n, n-op-n relaties

Praat met gebruikers

Stel de granulariteit vast: de kleinste dingen die een effect moeten hebben

Vind uit hoe die genoemd worden, of iedereen ze zo noemt

Verplicht wat nodig is

Maar niet wat onmogelijk is

Verbied alleen wat fataal is

Bedenk dat voor elke stap in het proces een ander schema handiger kan zijn: speel met content models, pas content model algebra toe

Documenteer

Markeer alleen wat verwerkt kan worden!

Page 22: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 22

Hoe maak je een schema (2)

Maak voorbeelddocumenten

Maak stijlbladen om die te kunnen verwerken

Genereer aan de hand van de voorbeelden een schema en pas dat aan

Wees niet te strak, want dan moet je te vaak verruimen

Generaliseer: of je nu veel of heel veel te ruim bent is niet relevant

Wees consequent: —als a in x optioneel is, waarom niet in y ook?—als a in x voor b komt en in y erna, is dat dan echt de bedoeling?

De volgordeparadox:—Als de volgorde niet belangrijk is, kan hij beter vast zijn—Als de volgorde belangrijk is, moet hij vrij zijn—Als de volgorde echt belangrijk is: moet er dan niet een doosje rond?

Page 23: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 23

Hoe maak je een schema (3)

Je codeert om te verwerken

Maar documenten worden hergebruikt, en bij elk gebruik kan een andere verwerking nodig zijn

Dus je codeert geen verwerkingsinstructies, maar inhoud:

Vorm is een functie van inhoud en stijlblad

Maar het is een illusie dat je codeert wat “is”

Je codeert geen volzinnen, tenzij je een taalkundige applicatie wilt maken; je codeert alinea’s, omdat het enige dat je wilt een nieuwe regel is

“U dacht”, schreef hij smalend, “dat een volzin altijd in een XML-boom te vangen was?”.

Page 24: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 24

Hoe maak je een schema (4)

Tel als een kind: 0, 1, veel:(titel, auteur*, alinea+)(titel, (auteur, (auteur, auteur?)?)?, alinea, alinea+)

Herhaalbare of optionele sequentie is slecht teken:(titel, ((alinea+) | (auteur+, ((alinea+, paragraaf*) | paragraaf+))))(term, definitie)+maak twee elementen, of geef die groep een naam!

Vermijd dat een kind meer dan eens genoemd wordt

Page 25: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 25

Moet je zelf wel een schema maken?

Voor uitwisseling van data: alleen als je een consortium bent

Voor opslag van documenten: niet als die 13 in een dozijn zijn

Maar als ze een USP vormen, met jouw extra slimme dingen: ja

Maar:—Baseer je op bestaande schema’s: XHTML, DocBook, TEI, ISO 12083,

AAP, CALS, Ditta—Laat weg wat voor jou irrelevant is—Vertaal eventueel 1-op-1 naar Nederlands—Al was het maar de documentatie—Voeg toe wat voor jou nodig is—Pas de convertors, editor, transformaties naar HTML en PDF aan

Page 26: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 26

Hoe beheer je schema’s?

Markeer wat je kunt verwerken

Beschrijf van elk element wat de betekenis is, welke klasse het is, of het typisch verplicht is, en herhaalbaar, wat het typische gedrag is, zijn content

Beschrijf van elke klasse of zijn leden in een volgorde staan, of vrije volgorde hebben, wat de typische content is

Bepaal of je in- en uitschakelbare opties wilt, en welke

Zet je schakelaars

Genereer aan de hand daarvan je schema’s, CSS, FOSI’s, xslt-scripts

Als de verzameling valide documenten volgens het nieuwe schema een deelverzameling van de oude is, is dat een verstrakking

Verstrakkingen: naar voor bestaande content, soms voor applicaties

Verruimingen: oude content mogelijk inconsistent, applicaties aanpassen

Page 27: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 27

Bottom Up Constraint Language (vapourware!)

Page 28: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 28

The DTD to end all DTDs

<!DOCTYPE ding [

<!ELEMENT ding (#PCDATA | ding)*>

<!ATTLIST ding

aard (element | attribuut | pi | commentaar | entiteit | CDsectie) element

naam CDATA #IMPLIED>

]>

<ding naam=“artikel”><ding naam=“titel”>Zin</ding><ding naam=“alinea”>Het is verbazend hoe moeilijk het is een voorbeeld te vinden van een tijdschrift waarvan de artikelen alleen uit alinea’s bestaan, zonder paragrafen dus.</ding><ding naam=“alinea”>Vandaar dat ik nu een <ding naam=“nadruk”>verzonnen</ding> voorbeeld moet tikken, dat u dan ook niet op <ding naam=“href”><ding naam=“uri” aard=“attribuut”>http://www.kluwer.nl</ding>www.kluwer.nl</ding>vindt.</ding>

</ding>

Page 29: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 29

Was dat een grapje?

Nee: naar en van die DTD is elk XML-document zonder verlies van informatie volautomatisch te verwerken

Toch voel je aan je water dat het niet lekker werkt

Want het gebruikt XML niet op de manier waarop het bedoeld is:—Voor mensen leesbare tekst als data in inhoudelijk benoemde

elementen—Metadata in attributen

Maar is een rode auto een <rode-auto> of een <auto kleur=“rood”> ?

Of een <auto type=“brandweer”>? Of <brandweerauto klasse=“auto”>?

Stijlbladen en editors zijn makkelijker op elementen dan op attributen in te richten

Page 30: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 30

Praktijkvoorbeelden

Tabellen

Voetnoten

Opsommingen

Naam

Page 31: Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november.

2005 - CountryDiederik Gerth van Wijk 31

Vragen?

Stel ze nu....

.... of mail [email protected]

En lees ook:—www.w3.org (XML DTD, XML Schema)—www.dsdl.org (Relax NG, Schematron, SGML DTD)—www.oasis-open.org (Relax NG, CALS tables, DocBook, DITA)—Eric van der Vlist, Relax NG, O’Reilly—Eric van der Vlist, XML Schema, O’Reilly—Norman Walsh & Leonard Muellner, DocBook, O’Reilly—Maler & El Andaloussi, Developing SGML DTD’s, Prentice Hall—David Megginson, Structuring XML Documents, Prentice Hall