XML Language Family Detailed Examples • Most information contained in these slide comes from: h ttp://www.w3.org, http://www.zvon.org/ • These slides are intended to be used as a tutorial on XML and related technologies • Slide author: Jürgen Mangler ([email protected]) • This section contains examples on: XML Schema
XML Language Family Detailed Examples. Most information contained in these slide comes from: h ttp://www.w3.org, http://www.zvon.org/ These slides are intended to be used as a tutorial on XML and related technologies Slide author: Jürgen Mangler ([email protected]) - PowerPoint PPT Presentation
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
XML Language FamilyDetailed Examples
• Most information contained in these slide comes from: h ttp://www.w3.org, http://www.zvon.org/
• These slides are intended to be used as a tutorial on XML and related technologies
If we use the attribute "schemaLocation", we tell the document that the schema belongs to an element from some particular namespace. In the schema definition, you have to use the "targetNamespace" attribute, which defines the element's namespace.
If we want the root element to be named "AAA", from null namespace, containing text and an element "BBB", we will need to set the attribute "mixed" to "true" - to allow mixed content.
We want the root element to be named "AAA", from null namespace, containing a mixture of any number (even zero), of "BBB" and "CCC" elements. We need to use the 'trick' below - we use a "sequence" element with "minOccurs" attribute set to 0 and "maxOccurs" set to "unbounded". The attribute "minOccurs" of the "element" elements has to be 0 too.
We want the root element to be named "AAA", from null namespace, containing a mixture of any number (even zero) of "BBB" and "CCC" elements. You need to use the trick below - use "sequence" element with "minOccurs" attribute set to 0 and "maxOccurs" set to "unbounded", and the attribute "minOccurs" of the "element" elements must be set to 0 too.
Restricting simpleType is relatively easy. Here we will require the value of the element "root" to be integer and less than 25. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="root"> <xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:maxExclusive value="25"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema>
<root> 25</root>
Valid?
Use <xsd:minInclusive value="0"/> to force element > 0. You can also combine min/max in <xsd:restriction>!
If we want the element "root" to be either a string "N/A" or a string "#REF!", we will use <xsd:enumeration>
Below we define a group of common attributes, which will be reused. The root element is named "root", it must contain the "aaa" element, and this element must have attributes "x" and "y".
Below we define a group of common attributes, which will be reused. The root element is named "root", it must contain the "aaa" and "bbb" elements, and these elements must have attributes "x" and "y". <root> <aaa x="1" y="2"/> </root>
Valid document from the previous Schema!
We want the "root" element to have an attribute "xyz", which contains a list of three integers. We will define a general list (element "list") of integers and then restrict it (element "restriction") to have a length (element "length") of exactly three items.
Use the same method for lists in the content of elem.
We want the "root" element to have an attribute "xyz", which contains a list of three integers. We will define a general list (element "list") of integers and then restrict it (element "restriction") to have a length (element "length") of exactly three items.
The element "A" has to contain a string which is exactly three characters long. We will define our custom type for the string named "myString" and will require the element "A" to be of that type. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="A" type="myString"/> <xsd:simpleType name="myString"> <xsd:restriction base="xsd:string"> <xsd:length value="3"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>
<buchstaben> abc</buchstaben>
The element "A" must contain an email address. We will define our custom type, which will at least approximately check the validity of the address. We will use the "pattern" element, to restrict the string using regular expressions. <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <xsd:element name="email" type="myString"/> <xsd:simpleType name="myString"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[^@]+@[^.]+\..+"/> </xsd:restriction> </xsd:simpleType></xsd:schema>
Regular Expressions - the meaning of: [^@]+@[^.]+\..+
[abc] … Characters Class (character can be a, b or c)[^abc] … Negative Character Class (everything except a,b,c)* … Match 0 or more times + … Match 1 or more times ? … Match 1 or 0 times {n} … Match exactly n times {n,} … Match at least n times {n,m} … Match at least n but not more than m times. … match any character\w … Match a "word" character (alphanumeric plus "_") \W … Match a non-word character \d … Match a digit character \D … Match a non-digit character \. … Escape a character with a special Meaning (., +, *, ?, …)
[^@]+ … match any character that is not a @ 1 or more times@ … match exactly a @[^.]+ … match any character that is not a . 1 or more times\. … match exactly a ..+ … match any character 1 or more times
One of the big problems of XML ist the type ID. An attribute of type ID must be unique for the whole file.
XML Schema solves this problem: ID's can be vaild for a certain child axis only.
The "keyref" lets you specify, that an attribute/element refers to some node (which must be defined as "key" or "unique"). The "key" element requires the elements "a" under the "root" element to contain the existing and unique value of an "id" attribute. Replace <xsd:unique> with:<xsd:key name="myId"> <xsd:selector xpath="./a"/> <xsd:field xpath="@id"/> </xsd:key> <xsd:keyref name="myIdref" refer="myId"> <xsd:selector xpath="./b"/> <xsd:field xpath="@ref"/> </xsd:keyref>
Document on next page …
Add to <xsd:sequence> in myList: <xsd:element name="b" minOccurs="0" maxOccurs="1"> <xsd:complexType> <xsd:attribute name="ref" type="xsd:NCName" use="required"/> </xsd:complexType> </xsd:element>
The "keyref" lets you specify, that an attribute/element refers to some node (which must be defined as "key" or "unique"). The "key" element requires the elements "a" under the "root" element to contain the existing and unique value of an "id" attribute.