Ü Ü bung 2 bung 2
Ü Ü bung 2 bung 2
Fragen zur Vorlesung?Fragen zur Vorlesung?
In Depth: EntitiesIn Depth: Entities
MusterlMusterlöösung des Üsung des Übungblattes 1bungblattes 1
MusterlMusterlöösung des Üsung des Übungsblattes 2bungsblattes 2
Weitere Musterfragen Weitere Musterfragen
XML Tools: using Eclipse with DTDsXML Tools: using Eclipse with DTDs
XML Extra: other schema languagesXML Extra: other schema languages
In Depth: Entities
In Depth: Entities
Entities Entities
Built
Built--in Entitiesin Entities
e.g. & or >
predefined
Character Entities Character Entities
e.g. ó or ó
predefined
Entities Entities
General Entities General Entities
<!ENTITY empty-x-y "<x></x><y></y>">
Entity name is a valid XML name
Entity value can be anything as long as it is well formed
Entity values can contain other entities!
Entity reference in XML document: &empty-x-y;
Can be used in DTD where they will eventually be
included in the XML document, e.g. attribute default value
External Parsed Entities
• Entity values can be external to the entity declaration
<!ENTITY footer SYSTEM „/mypages/footer.xml“>
• As element CDATA but not allowed in attributes
• Validating parsers must retrieve external entities
• The resulting document (after insertion of an external entity) must be well formed, the entity value itself must not be well formed
• There are also external unparsed entities, for non-XML
Entities
Parameter Entities Parameter Entities
<!ENTITY % shared „childelement1 childelement2">
Element and attribute declarations may re-use structure
Parameter entities allow this shared structure to be placed in one location
Entity reference in DTD: %shared;
<!ELEMENT parentelement %shared;>
Internal and External DTD Subset
• <!DOCTYPE BookStore SYSTEM „book.dtd“ [
<!ELEMENT BookStore (Book|BookStore)*>
]>
• Between […] is the internal DTD subset
• After the SYSTEM keyword is the external DTD subset
• DTD subsets can not override each others‘ element and attribute declarations
Overriding Entities
• Parameter entities are more useful with external DTDs
• They can be redefined by the internal DTD subset
• If case of a conflict, the internal DTD subset has precedence
• External parameter entities are also useful to split large DTDs into smaller external subsets
• To include them at validation time, declare an external parameter entity and then use the entity reference
<!ENTITY % names SYSTEM „names.dtd“>
%names;
Entities in DTDs and XML Schema
• Shocking but true: there is something in DTDs that can not be done in XML Schema…
declaring entities!
Musterl
Musterl ö ö sung des sung des
Ü Ü bungsblattes 1 bungsblattes 1
Wie kann Wohlgeformtheit bzgl. XML 1.0 und 1.1 erreicht Wie kann Wohlgeformtheit bzgl. XML 1.0 und 1.1 erreicht
werden?
werden?
streng genommen gar nicht!
Grund: XML-Deklaration
entweder nicht vorhanden Î nicht wohlgeformt bzgl.
XML 1.1
oder vorhanden, dann
- entweder version="1.0" Î nicht wohlgeformt bzgl.
XML 1.1
- oder version="1.1" Î nicht wohlgeformt bzgl. XML
Wohlgeformtheit bzgl. XML 1.0/1.1
Was kann erreicht werden?
Was kann erreicht werden?
Sowohl XML
Sowohl XML--1.01.0--Parser als auch XMLParser als auch XML--1.11.1--Parser kParser köönnen nnen das Dokument verarbeiten.
das Dokument verarbeiten.
Und wie?
Und wie?
keine XML-Deklaration oder eine mit version="1.0"
XML-1.0-Parser ;
XML-1.1-Parser:
- XML 1.1 verlangt von Parsern, dass beide Versionen erkannt werden:
- wenn keine XML-Deklaration oder explizit Version 1.0: Wohlgeformtheit gemäß XML 1.0 ;
- in allen anderen Fällen: Wohlgeformtheit gemäß XML
Musterlösung
Musterlösung mit Standardnamensraum
Musterlösung
Musterlösung
Musterlösung
Musterlösung (Teil 2)
Musterl
Musterl ö ö sung des sung des
Ü Ü bungsblattes 2 bungsblattes 2
ipoDefaultNS.xml: purchaseOrder
Deklaration von purchaseOrder Deklaration von purchaseOrder
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT purchaseOrder (shipTo, billTo, Items)>
<!ATTLIST purchaseOrder
xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
xmlns CDATA #FIXED "http://www.altova.com/IPO"
xmlns:ipo CDATA #FIXED "http://www.altova.com/IPO"
orderDate CDATA #REQUIRED >
Probleme:
funktioniert nur mit Präfixen xsi und ipo
funktioniert nur mit Standard-Namensraum:
ipoDefaultNS.xml: shipTo
Deklaration von shipTo Deklaration von shipTo
<!ELEMENT shipTo (name, street, city, (postcode | (state, zip)))>
<!ATTLIST shipTo
export-code CDATA #IMPLIED
xsi:type (ipo:EU-Address | ipo:US-Address) #REQUIRED
>
Probleme:
kein Zusammenhang zwischen Struktur von shipTo und xsi:type
ipoDefaultNS.xml: billTo
Deklaration von billTo Deklaration von billTo
<!ELEMENT billTo (name, street, city, (postcode | (state, zip)))>
<!ATTLIST billTo
xsi:type (ipo:EU-Address | ipo:US-Address) #REQUIRED
>
Problem:
kein Zusammenhang zwischen Struktur von billTo und xsi:type
ipoDefaultNS.xml: Items und item
Deklarationen von Items und item Deklarationen von Items und item
<!ELEMENT Items (item+)>
<!ELEMENT item (productName, quantity, price, comment?, shipDate)>
<!ATTLIST item partNum CDATA #REQUIRED>
<!ATTLIST item partNum IDID #REQUIRED>
oder besser
Die restlichen Deklarationen Die restlichen Deklarationen
<!ELEMENT name (#PCDATA)>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT postcode (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT zip (#PCDATA)>
<!ELEMENT productName (#PCDATA)>
<!ELEMENT quantity (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT shipDate (#PCDATA)>
Deklaration von shipTo und billTo Deklaration von shipTo und billTo
<!ELEMENT shipTo (name, street, city, (postcode | (state, zip)))>(name, street, city, (postcode | (state, zip)))
<!ATTLIST shipTo
export-code CDATA #IMPLIED
xsi:type (ipo:EU-Address | ipo:US-Address) #REQUIRED
>
<!ELEMENT billTo (name, street, city, (postcode | (state, zip)))>(name, street, city, (postcode | (state, zip)))
<!ATTLIST billTo
xsi:type (ipo:EU-Address | ipo:US-Address) #REQUIRED
>
an zwei Stellen identische Strukturen
Verbesserte Version Verbesserte Version
<!ENTITY % Address "(name, street, city,(postcode|(state, zip)))">
<!ELEMENT shipTo %Address;>
<!ELEMENT billTo %Address;>
Ö wird Parameter Entity genannt
Musterfragen
Musterfragen
DTDs vs. XMLSchema DTDs vs. XMLSchema
To which of the following DTD declarations is the "self"
attribute above equivalent?
1. <!ATTLIST ethnos self (#PCDATA) #REQUIRED>
2. <!ATTLIST ethnos self PCDATA #REQUIRED>
3. <!ATTLIST ethnos self CDATA #FIXED>
4. <!ATTLIST ethnos self PCDATA #IMPLIED>
5. <!ATTLIST ethnos self CDATA #REQUIRED>
<xs:element name="ethnos">
<xs:complexType>
<xs:attribute name="self" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
Was k
Was k ö ö nnte g nnte g ü ü ltig sein? ltig sein?
A. <?xml version="1.0"?>
<!DOCTYPE galaxy SYSTEM "cosmos.dtd">
<galaxy>M85</galaxy>
B. <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE galaxy [ <!ELEMENT galaxy (#PCDATA)> ]>
<galaxy>M85</galaxy>
C. <?xml version="1.0"?>
<!DOCTYPE SYSTEM "http://www.example.com/cosmos.dtd">
Was k
Was k ö ö nnte g nnte g ü ü ltig sein? ltig sein?
D. <?xml version="1.0">
<!DOCTYPE galaxy SYSTEM
"http://www.example.com/cosmos.dtd">
<galaxy>M85</galaxy>
E. <?xml version="1.0"?>
<!DOCTYPE PUBLIC "http://www.example.com/cosmos.dtd">
<galaxy>M85</galaxy>
Entity Declarations Entity Declarations
What value will the expression &species; yield in an instance document based on this DTD?
1. erectus 2. habilis 3. sapiens 4. (empty)
<!ENTITY species "erectus">
<!ENTITY species "habilis">
<!ENTITY species "sapiens">
<!ENTITY species "">
Attribut
Attribut - - Deklarationen Deklarationen
According to this definition:
1. The name of the y element must match the name of an unparsed entity defined in the DTD.
2. The value of the y element must match the name of an unparsed entity defined in the DTD.
3. The name of the y attribute must match the name of an unparsed entity defined in the DTD.
4. The value of the y attribute must match the name of an unparsed entity defined in the DTD.
5. None of the above.
<!ATTLIST x y ENTITY #REQUIRED>
Element
Element - - Deklarationen Deklarationen
Which XML would be successfully validated?
A. <train />
B. <train>
<engine> That Could </engine>
</train>
<!ELEMENT train (engine?, wagon*)>
<!ELEMENT engine (#PCDATA)>
<!ELEMENT wagon (#PCDATA)>
Element
Element - - Deklarationen Deklarationen
Which XML would be successfully validated?
C. <train>
<engine> That Could
<wagon> Caboose </wagon>
</engine>
</train>
<!ELEMENT train (engine?, wagon*)>
<!ELEMENT engine (#PCDATA)>
<!ELEMENT wagon (#PCDATA)>
Element
Element - - Deklarationen Deklarationen
Which XML would be successfully validated?
D. <train>
<engine> No. 7 </engine>
<wagon> Pullman </wagon>
<wagon> Diner </wagon>
</train>
<!ELEMENT train (engine?, wagon*)>
<!ELEMENT engine (#PCDATA)>
<!ELEMENT wagon (#PCDATA)>
Element
Element - - Deklarationen Deklarationen
Which XML would be successfully validated?
E. <train>
<engine> No. 8 </engine>
<engine> No. 9 </engine>
<wagon> Wagon-Lits </wagon>
</train>
<!ELEMENT train (engine?, wagon*)>
<!ELEMENT engine (#PCDATA)>
<!ELEMENT wagon (#PCDATA)>
Was w
Was w ä ä re g re g ü ü ltig? ltig?
A. <audio_presentation modality="au|wav">&data;</audio_presentation>
B. <audio_presentation modality="wav">&data;</audio_presentation>
C. <audio_presentation>&data;</audio_presentation>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE audio_presentation [
<!ENTITY data "c:.wav">
<!ELEMENT audio_presentation (#PCDATA)>
<!NOTATION au PUBLIC "au 1.0" "http:\\www.example.com.exe">
<!NOTATION wav PUBLIC "wav 1.0" "http:\\www.example.com.exe">
<!ATTLIST audio_presentation modality NOTATION (au|wav) #REQUIRED>
]>
XML Tools
XML Tools
XML Extra: other
XML Extra: other
schema languages
schema languages
What is Relax NG?
RELAX NG is a schema language for XML. The key features of RELAX NG are that it:
• is simple
• is easy to learn
• has both an XML syntax and a compact non-XML syntax
• does not change the information set of an XML document
• supports XML namespaces
• treats attributes uniformly with elements so far as possible
• has unrestricted support for unordered content
• has unrestricted support for mixed content
• has a solid theoretical basis
Relax NG Relax NG
<element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
<zeroOrMore>
<element name="card">
<element name="name">
<text/>
</element>
<element name="email">
<text/>
</element>
<optional>
<element name="note">
<text/>
</element>
</optional>
</element>
</zeroOrMore>
<!ELEMENT addressBook (card*)>
<!ELEMENT card (name, email, note?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT note (#PCDATA)>
entspricht folg. DTD
Relax NG Relax NG
kein W3C-, sondern OASIS-Standard
integriert Datentypen von XML-Schema:
<element name="number">
<data type="integer"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"/>
</element>
Konverter Relax NG Î XML-Schema:
http://thaiopensource.com/relaxng/trang.html
mehr Informationen: