XML Tutorial/XML Schema/Sequence
Содержание
- 1 Fixed Order: All Elements Required
- 2 Fixed Order Optional Elements
- 3 Require Both Elements or None
- 4 Requiring Elements in a Mixed Model
- 5 Requiring Elements to Appear in Sequence
- 6 Requiring Repeating Sequences of Elements
- 7 <sequence> Declarations
- 8 The minOccurs and maxOccurs attributes can be used with compositors
- 9 The sequence compositor allows you to require a sequence for child elements in a content model
Fixed Order: All Elements Required
<source lang="xml">
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified">
<xs:element name = "Count">
<xs:complexType> <xs:sequence> <xs:element name = "One" type = "xs:string" /> <xs:element name = "Two" type = "xs:string" /> <xs:element name = "Three" type = "xs:string" /> </xs:sequence> </xs:complexType>
</xs:element> </xs:schema> So the following example would be a conforming structure: <Count>
<One></One> <Two></Two> <Three></Three>
</Count> But this would not: <Count>
<Two></Two> <One></One>
</Count></source>
Fixed Order Optional Elements
<source lang="xml">
<?xml version="1.0" ?> <schema xmlns="http://www.w3.org/2001/10/XMLSchema" targetNamespace="http://www.wbex.runs/" xmlns:end="http://www.wbex.ru/">
<element name = "Add"> <complexType> <sequence> <element name = "Namespace" minOccurs = "0" maxOccurs = "1" /> <element name = "FilePath" /> </sequence> </complexType> </element>
</schema> So, both of the following would be valid instances: <Add>
<Namespace>http://www.wbex.ru/books</Namespace> <FilePath>http://www.wbex.ru/books/books.xsd</FilePath>
</Add> <Add>
<FilePath>http://www.wbex.ru/books/books.xsd</FilePath>
</Add></source>
Require Both Elements or None
<source lang="xml">
File: Schema.xsd <?xml version = "1.0" ?> <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name="Book"> <xs:complexType> <xs:sequence minOccurs = "0" maxOccurs = "1"> <xs:element name="Title" type="xs:string" /> <xs:element name="Author" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element>
</xs:schema> So the following two examples would be allowed: <Book></Book> <Book>
<Title>XML</Title> <Author>author</Author>
</Book> But the third is invalid because it only contains one of the child elements: <Book>
<Title>Professional XML Schema</Title>
</Book></source>
Requiring Elements in a Mixed Model
<source lang="xml">
File: Data.xml
A <partA>B</partA>C<partB accepted = "true">D</partB>
File: Schema.xsd <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name = "data"> <xs:complexType mixed = "true"> <xs:sequence> <xs:element name = "partA" type = "xs:string" /> <xs:element name = "partB" type = "partBType" /> </xs:sequence> <xs:attribute name = "paperID" type = "xs:integer" /> </xs:complexType> </xs:element> <xs:complexType name = "partBType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name = "accepted" type = "xs:boolean" /> </xs:extension> </xs:simpleContent> </xs:complexType>
</xs:schema></source>
Requiring Elements to Appear in Sequence
<source lang="xml">
A sequence determines the order in which its contained elements may appear in an XML document. A sequence can also contain other sequences, choices or references to named groups. A sequence may be contained in a complex type definition in other sequences, or in a set of choices or in named group definitions. It"s legitimate for a sequence to contain only one element.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xsd:complexType name="animalType"> <xsd:sequence> <xsd:element name="name" type="xsd:string" minOccurs="2" /> <xsd:element name="subspecies" type="xsd:string" /> </xsd:sequence> </xsd:complexType>
</xsd:schema></source>
Requiring Repeating Sequences of Elements
<source lang="xml">
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xs:element name = "data" > <xs:complexType> <xs:sequence minOccurs = "3" maxOccurs = "3"> <xs:element name = "One" type = "xs:string" /> <xs:element name = "Two" type = "xs:string" /> <xs:element name = "Three" type = "xs:string" /> </xs:sequence> </xs:complexType> </xs:element>
</xs:schema> So, the following is the only allowable conforming instance document:
<One>First came</One> <Two>Second came</Two> <Three>Third came</Three> <One>First came</One> <Two>Second came</Two> <Three>Third came</Three> <One>First came</One> <Two>Second came</Two> <Three>Third came</Three>
</source>
<sequence> Declarations
<source lang="xml">
<sequence minOccurs="non negative number"
maxOccurs="non negative number or unbounded">
A sample sequence might appear as follows: <sequence>
<element name="first" type="string" minOccurs="1" maxOccurs="unbounded"/> <element name="middle" type="string" minOccurs="0" maxOccurs="1"/> <element name="last" type="string"/>
</sequence> By utilizing a <sequence> to specify your content model, you indicate that the elements must appear
within your instance document in the sequence, or order, specified.
For example, the following would be legal: <first>first</first> <middle>middle</middle> <last>last</last> The following, however, would be illegal: <last>last</last> <middle>middle</middle> <first>first</first></source>
The minOccurs and maxOccurs attributes can be used with compositors
<source lang="xml">
<xsd:complexType name="nameType">
<xsd:sequence maxOccurs="unbounded"> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="middleName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> </xsd:sequence>
</xsd:complexType> By adding the maxOccurs attribute, you allow for the following structure to occur in the document instance: <firstName>A</firstName> <middleName>B</middleName> <lastName>C</lastName> <firstName>D</firstName> <middleName>E</middleName> <lastName>F</lastName> <firstName>G</firstName> <middleName>H</middleName> <lastName>I</lastName></source>
The sequence compositor allows you to require a sequence for child elements in a content model
<source lang="xml">
<name>
<firstName>A</firstName> <middleName>B</middleName> <lastName>C</lastName>
</name> To require that the child elements occur in that order, we would have to use the sequence compositor: <xsd:element name="name">
<xsd:complexType> <xsd:sequence> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="middleName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> </xsd:sequence> </xsd:complexType>
</xsd:element></source>