Leukere documenten dankzij DTD en schema Diederik Gerth van Wijk XML Holland 2005 Papendal, 23 november
CountryDiederik Gerth van Wijk2 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
CountryDiederik Gerth van Wijk3 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
CountryDiederik Gerth van Wijk4 Een voorbeeld Zin 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. Vandaar dat ik nu een verzonnen voorbeeld moet tikken, dat u dan ook niet op vindt. Artikel Titel Alinea nadruk href
CountryDiederik Gerth van Wijk5 Voorbeeld (2) Zin 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. Vandaar dat ik nu een verzonnen voorbeeld moet tikken, dat u dan ook niet op vindt.
CountryDiederik Gerth van Wijk6 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!
CountryDiederik Gerth van Wijk7 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
CountryDiederik Gerth van Wijk8 Een PSVI??????? Post Schema Validation Infoset Vertelt van attributen en eenvoudige elementen wat hun datatype is 3e2 < 4 Vertelt van attributen en elementen van welk type (class) ze zijn En XSLT 2.0 en XPath 2.0 kunnen daar dan wat mee
CountryDiederik Gerth van Wijk9 Van tikken of database via XML naar PDF, web, database
CountryDiederik Gerth van Wijk10 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 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”
CountryDiederik Gerth van Wijk11 Wat voor soorten schema’s zijn er? SGML DTD: XML DTD: XML Schema: Relax NG: element artikel { titel, alinea+ } Schematron Examplotron XSLT CSS FOSI
CountryDiederik Gerth van Wijk12 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)
CountryDiederik Gerth van Wijk13 Voorbeeld DTD <!-- typische aanroep: -->
CountryDiederik Gerth van Wijk14 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
CountryDiederik Gerth van Wijk15 Voorbeeld W3C XML Schema (1)
CountryDiederik Gerth van Wijk16 Voorbeeld W3C XML Schema (2)
CountryDiederik Gerth van Wijk17 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)
CountryDiederik Gerth van Wijk18 Voorbeeld Relax NG XML-notatie (1)
CountryDiederik Gerth van Wijk19 Voorbeeld Relax NG XML-notatie (2)
CountryDiederik Gerth van Wijk20 Voorbeeld Relax NG Compacte notatie # artikel1.rnc, Relax NG schema voor artikelen # (c) copyright 2005 Diederik Gerth van Wijk # versie 1.0, # verwijzingen mogen geen verwijzingen bevatten, wel nadruk etc lopendetekstzondervw = text | nadruk verwijzingen = href lopendetekst = lopendetekstzondervw | verwijzingen bloktekst = lopendetekst URItype = 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
CountryDiederik Gerth van Wijk21 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!
CountryDiederik Gerth van Wijk22 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?
CountryDiederik Gerth van Wijk23 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?”.
CountryDiederik Gerth van Wijk24 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
CountryDiederik Gerth van Wijk25 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
CountryDiederik Gerth van Wijk26 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
CountryDiederik Gerth van Wijk27 Bottom Up Constraint Language (vapourware!)
CountryDiederik Gerth van Wijk28 The DTD to end all DTDs <!DOCTYPE ding [ <!ATTLISTding aard (element | attribuut | pi | commentaar | entiteit | CDsectie) element naam CDATA #IMPLIED> ]> Zin 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. Vandaar dat ik nu een verzonnen voorbeeld moet tikken, dat u dan ook niet op vindt.
CountryDiederik Gerth van Wijk29 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 of een ? Of een ? Of ? Stijlbladen en editors zijn makkelijker op elementen dan op attributen in te richten
CountryDiederik Gerth van Wijk30 Praktijkvoorbeelden Tabellen Voetnoten Opsommingen Naam
CountryDiederik Gerth van Wijk31 Vragen? Stel ze nu of mail En lees ook: — (XML DTD, XML Schema) — (Relax NG, Schematron, SGML DTD) — (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