XML en XSLT
XML & XSLT voor DMO Datamodellering 2008
1/24
Een XML datamodel
Datamodelleren →
Logisch-fysieke model voor XML-platform = XML schema, b.v.:
conceptueel model → logisch / fysiek model: platform afhankelijk
1. DTD 2. W3C schema
Schema een ruim begrip! (zie Møller, p. 96)
2/28
DMO 2008
1
XML en XSLT
Van ERD naar XML schema
Entitytype (in de regel) → XML element Attributen → attributen van een XML element of ook elementen Vergelijk nu constructies in:
XML DTD XML Schema
Herhaling stof UWT alleen in hoofdpunten! 3/28
Elementen in DTD
Elementen in een DTD
(zie Møller, p. 98 e.v.)
b.v. content model
)
EMPTY ANY #PCDATA , | ? * + bijzonder: mixed content model (#PCDATA |e1|e2|…|en)*
4/28
DMO 2008
2
XML en XSLT
XML entities
Built-in entities:
"Computer Science "
Internal parsed entities
< > & ' "
b.v.
The department of &cs;
Parameter entities
zie volgende slides 5/28
Gebruik entities ]>
" &cs; "
6/28
DMO 2008
3
XML en XSLT
Parameter entity
Parameter entity is een macro in een DTD: (zie Møller, p. 107)
Voorbeeld:
7/28
Attributen in DTD
Attributen in een DTD
(zie Møller, p. 101 e.v.)
vb.: attribuut-definitie: types, b.v.: CDATA, NAMETOKEN, ID, IDREF attribute modifiers: #REQUIRED, #IMPLIED, #FIXED
enumeration, b.v.:
8/28
DMO 2008
4
XML en XSLT
DTD versus DDL van SQL
DTD:
SQL:
gebrekkige attribuut-definitie nauwelijks domein constraints gebrekkige referentiële integriteit (ID-IDREF werkt alleen binnen een document) scala aan datatypes domein constraints goede referentiële integriteit
Wil je méér in XML → W3C schema 9/28
XML schema
Logisch/fysiek datamodel met veel meer mogelijkheden dan een DTD:
geschreven in XML altijd extern meer datatypes namespace aware nauwkeurige definitie van structuur (volgorde, maar ook aantal child elements) 10/28
DMO 2008
5
XML en XSLT
Elementen in XML schema
Simple type
)
alleen tekst (geen attributen)
<xs:element name="lastname" type="xs:string"/>
Complex type
)
bevat andere elementen en/of attributen, b.v.:
<xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:elementname="firstname” type="xs:string"/> <xs:element name="lastname" type="xs:string"/> 11/28
Attributen in XML schema
Gedeclareerd als simple types
<xs:attribute name="xxx" type="yyy"/>
Voorbeeld: <xs:attribute name="lang" type="xs:string" use="required"/>
Uitgebreide lijst van primitive simple
types
(zie Møller, p. 120):
string, boolean, decimal, dateTime, etc.
12/28
DMO 2008
6
XML en XSLT
Element met attribuut
B.v. een US-adres:
<xsd:complexType name="USAddress" > <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:decimal"/> <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
13/28
Content model DTD vs. Schema DTD
XML schema
,
<sequence>
|
ANY
+ *
maxOccurs/minOccurs
mixed content
mixed=“true”
parameter entity
, ref-attribute
NULL
nillable=“true” 14/28
DMO 2008
7
XML en XSLT
Mixed content
Voornaam, achternaam (in willekeurige volgorde) plus tekst:
<xs:complexType name="persname" mixed="true"> <xs:all> <xs:element name="firstName" type="xs:token"/> <xs:element name="familyName" type="xs:token"/>
15/28
Domeindefinitie XML schema (1)
Restricties op content door een primitive simple type in te perken via facets: <xs:element name="car"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Golf"/> <xs:enumeration value="BMW"/>
16/28
DMO 2008
8
XML en XSLT
Domeindefinitie XML schema (2)
Restricties op content door een primitive simpel type in te perken via een pattern facet: <xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="[A-Z][A-Z][A-Z]"/>
17/28
Data retrieval in XML
XSLT met Xpath Xquery (b.v. in XML database) In al deze gevallen: navigeren (↔ setoperaties in SQL) Vereist kennis van
de opslagstructuur de werking van een een XSLT processor de XML inputtekst 18/28
DMO 2008
9
XML en XSLT
XML document tree root node <sandwich xmlns="http://www.food.org/ns"> jelly peanut-butter bread
root element
19/28
Nodes in de XSLT-boom
Root node (= document node)
Element
correspondeert met een attribuut van een element in een XML document heeft een element als parent, maar wordt niet als een gewoon child behandeld in XSLT
Text
correspondeert met element in XML document
Attribute
een onzichtbaar punt boven het root element
de tekstuele inhoud van het document
Comment Processing instruction Namespace 20/28
DMO 2008
10
XML en XSLT
Van boom tot boom Style sheet
Stylesheet tree Result Tree
Source tree
Source document
Result Document Transformatie proces
21/28
Template rules
De transformatie is op te vatten als een reis door de input-boom, waarbij stapsgewijs de output-boom wordt opgebouwd XSLT-instructies sturen dit proces = toepassen van: template rules
specificeren de transformaties expliciet in de XSLT-file of built-in in de XSLT-processor bestaan twee delen:
een actie een pattern (het match-attribute) → op welk deel van de input-boom de actie moet worden toegepast
Voorbeeld: <xsl:template name="Booklist" match="booklist"> 22/28
DMO 2008
11
XML en XSLT
Default situatie
Schrijven we geen uitvoerige template rules, dan toch output. Voorbeeld: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform "version="1.0"> <xsl:template name="Basic"> <xsl:apply-templates/>
dit doorloopt de hele input tree (depth first) en geeft alle text weer 23/28
Sturing template-gebruik
<xsl:apply-templates/> <xsl:apply-templates select=""/> <xsl:for-each select=""/> in combinatie met: <xsl:call-template name=""/> of: <xsl:call-template name=""> <xsl:with-param name=""> value
24/28
DMO 2008
12
XML en XSLT
Wanneer welke stijl? Globale vuistregel:
wanneer het voorkomen van elementen betrekkelijk onvoorspelbaar is
b.v. bold, italic, afbeeldigen in tekst etc.
wanneer er een regelmatige, bekende datastructuur is
b.v. een databaserecord-structuur of vaste volgorde van hoofdstukken, secties, etc.
25/28
Parameters - 1
XSLT-templates kunnen parameters hebben: <xsl:template name="calcArea" <xsl:param name="width"/> <xsl:param name="height"/> <xsl:value-of select="$width * $height"/>
Gebruik:
<xsl:call-template name="calcArea"> <xsl:with-param name="width">5 <xsl:with-param name="height" select="7"/>
26/28
DMO 2008
13
XML en XSLT
Parameters - 2
Parameters kunnen ook globaal zijn voor het hele XSLT-programma. Dan is <xsl:param> een top-level element. Zij zijn vergelijkbaar met een XSLTvariabelen. Default waarde via select-attribuut of via template content. Voorbeelden:
<xsl:param name="naam" select="expression"/> <xsl:param name="naam">value 27/28
Oefening: maak DTD <docent doc-id="P1"> Jan van den Broek <expertise>logica <docent doc-id="P6"> Piet Jansen <expertise>logica <docent doc-id="P12"> Koos de Boer <expertise>engels
DMO 2008
<cursus cur-id="C1" doc-id="P1"> Databases 1 <cursus cur-id="C2" doc-id="P1"> Logica 2 <cursus cur-id="C3" doc-id="P6"> Nederlands 2
28/28
14