Difference between revisions of "XML Schema"
(→Attributes) |
(→Keys) |
||
Line 170: | Line 170: | ||
− | == | + | ==Keyref== |
− | Es ist möglich, | + | |
+ | Es ist möglich, Fremdschlüssel zu definieren. | ||
+ | |||
===schema=== | ===schema=== | ||
<source lang="xml"> | <source lang="xml"> | ||
Line 187: | Line 189: | ||
<xsd:element name="pc-list"> | <xsd:element name="pc-list"> | ||
+ | |||
<xsd:complexType> | <xsd:complexType> | ||
<xsd:sequence> | <xsd:sequence> | ||
<xsd:element name="computer" type="pc-Typ" maxOccurs="unbounded"/> | <xsd:element name="computer" type="pc-Typ" maxOccurs="unbounded"/> | ||
+ | |||
+ | <xsd:element name="alterrechner" minOccurs="0" maxOccurs="unbounded"> | ||
+ | <xsd:complexType> | ||
+ | <xsd:attribute name="id" type="xsd:integer"/> | ||
+ | </xsd:complexType> | ||
+ | |||
+ | </xsd:element> | ||
+ | |||
</xsd:sequence> | </xsd:sequence> | ||
</xsd:complexType> | </xsd:complexType> | ||
+ | |||
<xsd:key name="idKey"> | <xsd:key name="idKey"> | ||
<xsd:selector xpath="computer"/> | <xsd:selector xpath="computer"/> | ||
<xsd:field xpath="@id"/> | <xsd:field xpath="@id"/> | ||
</xsd:key> | </xsd:key> | ||
+ | |||
+ | <xsd:keyref name="idFremdKey" refer="idKey"> | ||
+ | <xsd:selector xpath="alterrechner"/> | ||
+ | <xsd:field xpath="@id"/> | ||
+ | </xsd:keyref> | ||
+ | |||
</xsd:element> | </xsd:element> | ||
− | |||
</xsd:schema> | </xsd:schema> | ||
Line 210: | Line 227: | ||
<prozessor>Interl 486</prozessor> | <prozessor>Interl 486</prozessor> | ||
</computer> | </computer> | ||
+ | |||
+ | <alterrechner id="88"/> | ||
</pc-list> | </pc-list> | ||
</source> | </source> | ||
− | Folgendes XML ist ungültig, da | + | Folgendes XML ist ungültig, da es computer mit id 688 nicht gibt: |
<source lang="xml"> | <source lang="xml"> | ||
<pc-list> | <pc-list> | ||
Line 221: | Line 240: | ||
<prozessor>Interl 486</prozessor> | <prozessor>Interl 486</prozessor> | ||
</computer> | </computer> | ||
− | + | ||
− | < | + | <alterrechner id="688"/> |
− | |||
− | |||
</pc-list> | </pc-list> |
Revision as of 15:02, 16 September 2009
XML Schema Samples
Contents
Tool
Hier ein kleines Tool um Schemas zu testen: start
Hello World
Schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="html">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="head"/>
<xsd:element name="body" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="head">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Valid xml
Beispiel1:
<html>
<head>
<title>atitle</title>
</head>
<body>mymody</body>
</html>
Beispiel 2:
<head>
<title>atitle</title>
</head>
Enumeration
schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="monatsname">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Jan"/>
<xsd:enumeration value="Feb"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:schema>
valid xml
<monatsname>Jan</monatsname>
Complex type
schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="employee" type="personinfo"/>
<xsd:complexType name="personinfo">
<xsd:sequence>
<xsd:element name="firstname" type="xsd:string"/>
<xsd:element name="lastname" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
valid xml
<employee>
<firstname>Claude</firstname>
<lastname>Glauser</lastname>
</employee>
Extending a tpye
schema
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="address" type="UKAddressType"/>
<xs:complexType name="AddressType">
<xs:sequence>
<xs:element name="Line1" type="xs:string"/>
<xs:element name="Line2" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="UKAddressType">
<xs:complexContent>
<xs:extension base="AddressType">
<xs:sequence>
<xs:element name="County" type="xs:string"/>
<xs:element name="Postcode" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
valid xml
Valides XML:
<address>
<Line1/>
<Line2/>
<County/>
<Postcode/>
</address>
Die Elemente von UKAddressType kommen am Schluss. Folgendes XML wäre ungültig:
<address>
<County/>
<Postcode/>
<Line1/>
<Line2/>
</address>
Attributes
Attribute können nur zu complex types hinzugefügt werden.
schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="html">
<xsd:complexType>
<xsd:attribute name="lang" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
valid xml
<html lang="English"/>
Keyref
Es ist möglich, Fremdschlüssel zu definieren.
schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="pc-Typ">
<xsd:sequence>
<xsd:element name="prozessor" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
<xsd:element name="pc-list">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="computer" type="pc-Typ" maxOccurs="unbounded"/>
<xsd:element name="alterrechner" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="idKey">
<xsd:selector xpath="computer"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:keyref name="idFremdKey" refer="idKey">
<xsd:selector xpath="alterrechner"/>
<xsd:field xpath="@id"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
valid xml
Folgendes ist ein valides XML:
<pc-list>
<computer id="88">
<prozessor>Interl 486</prozessor>
</computer>
<alterrechner id="88"/>
</pc-list>
Folgendes XML ist ungültig, da es computer mit id 688 nicht gibt:
<pc-list>
<computer id="88">
<prozessor>Interl 486</prozessor>
</computer>
<alterrechner id="688"/>
</pc-list>
Java Code zum validieren eines Schemas
@Override
protected Object doInBackground() {
try {
this.message = null;
java.io.StringReader schemaReader = new java.io.StringReader(this.schematext);
java.io.StringReader xmlReader = new java.io.StringReader(this.xmltext);
javax.xml.transform.stream.StreamSource schemaSource = new javax.xml.transform.stream.StreamSource(schemaReader);
javax.xml.transform.stream.StreamSource xmlSource = new javax.xml.transform.stream.StreamSource(xmlReader);
javax.xml.validation.SchemaFactory
factory = javax.xml.validation.SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
javax.xml.validation.Schema schema = factory.newSchema(schemaSource);
javax.xml.validation.Validator validator = schema.newValidator();
validator.validate(xmlSource); //Throws an exception on invalid xml.
}
catch(Exception e){
this.message = e.getMessage();
}
return null; // return your result
}