XML Tutorial/XML Schema/Salami Slice
Содержание
- 1 An XML Schema Document Using Named Type Definitions
- 2 extend the complex type that we have defined, creating new types for Customer and Employee:
- 3 how XML Schema allows us to re-use names, and give them different content models.
- 4 Re-use in Text-only Element Content Models
- 5 Salami Slice design Define global element declarations that are later referenced.
- 6 Schema reuse
An XML Schema Document Using Named Type Definitions
<source lang="xml">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" targetNamespace="http://www.wbex.ru/namespaces/pub" xmlns="http://www.wbex.ru/namespaces/pub"> <xsd:simpleType name="isbnType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[0-9]{10}" /> </xsd:restriction> </xsd:simpleType> <xsd:complexType name="pubType"> <xsd:sequence> <xsd:element ref="book" /> </xsd:sequence> </xsd:complexType> <xsd:complexType name="bookType"> <xsd:sequence> <xsd:element ref="title" /> <xsd:element ref="author" /> <xsd:element ref="description" /> </xsd:sequence> </xsd:complexType> <xsd:element name="publications" type="pubType" /> <xsd:element name="book" type="bookType" maxOccurs="unbounded" /> <xsd:element name="title" type="xsd:string" /> <xsd:element name="author" type="xsd:string" /> <xsd:element name="description" type="xsd:string" />
</xsd:schema></source>
extend the complex type that we have defined, creating new types for Customer and Employee:
<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:complexType name = "PersonType"> <xs:sequence> <xs:element name = "Name" type = "xs:string" /> <xs:element name = "Address" type = "xs:string" /> <xs:element name = "Econtact" type = "xs:string" /> </xs:sequence> </xs:complexType> <xs:element name = "Customer"> <xs:complexType> <xs:complexContent> <xs:extension base = "PersonType"> <xs:sequence> <xs:element name = "AccountDetails" type = "xs:string" /> </xs:sequence> <xs:attribute name = "customerID" type = "xs:string" /> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> <xs:element name = "Employee"> <xs:complexType> <xs:complexContent> <xs:extension base = "PersonType"> <xs:sequence> <xs:element name = "JobRole" type = "xs:string" /> <xs:element name = "Department" type = "xs:string" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element>
</xs:schema></source>
how XML Schema allows us to re-use names, and give them different content models.
<source lang="xml">
<?xml version = "1.0" ?> <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"
targetNamespace = "http://www.wbex.ru/books" xmlns:book = "http://www.wbex.ru/books" elementFormDefault = "qualified"> <xs:element name = "Book"> <xs:complexType> <xs:sequence> <xs:element name="TitleInformation" type = "book:TitleInformationType" /> <xs:element name="Chapter" type = "book:ChapterType" minOccurs = "1" maxOccurs = "unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name = "TitleInformationType"> <xs:sequence> <xs:element name = "Title" type = "xs:string" /> <xs:element name = "Author" type = "xs:string" /> <xs:element name = "Publisher" type = "xs:string" /> </xs:sequence> </xs:complexType> <xs:complexType name = "ChapterType"> <xs:sequence> <xs:element name = "Title"> <xs:complexType> <xs:simpleContent> <xs:extension base = "xs:string"> <xs:attribute name = "indexMark" type = "xs:ID" use = "required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name = "chapterNumber" type = "xs:integer" /> </xs:complexType>
</xs:schema></source>
Re-use in Text-only Element Content Models
<source lang="xml">
File: Schema.xsd <?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 = "AccountReviewYear"> <xs:simpleType> <xs:restriction base = "xs:gYear"> <xs:pattern value="200[1-9]"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:simpleType name = "fixedLengthFieldType"> <xs:restriction base = "xs:string"> <xs:minLength value = "0" /> <xs:maxLength value = "256" /> </xs:restriction> </xs:simpleType> <xs:element name = "ClientName" type = "fixedLengthFieldType" /> <xs:element name = "BranchName" type = "fixedLengthFieldType" />
</xs:schema></source>
Salami Slice design Define global element declarations that are later referenced.
<source lang="xml">
<xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="description" type="xsd:string"/> <xsd:element name="Book">
<xsd:complexType> <xsd:sequence> <xsd:element ref="title"/> <xsd:element ref="author"/> <xsd:element ref="description"/> </xsd:sequence> </xsd:complexType>
</xsd:element></source>
Schema reuse
<source lang="xml">
File: Data.xml <?xml version = "1.0" ?> <Customer customerID = "242552">
<Name> <FirstName>A</FirstName> <Middle>G</Middle> <LastName>C</LastName> </Name> <Address> <Street1>10 Place</Street1> <Town>D</Town> <City>E</City> <State>F</State> <Country>Australia</Country> <Postcode>2021</Postcode> </Address>
</Customer> File: Data2.xml <?xml version = "1.0" ?> <Employee employeeID = "133">
<Name> <FirstName>A</FirstName> <Middle>G</Middle> <LastName>B</LastName> </Name> <Address> <Street1>10 Place</Street1> <Town>small</Town> <City>big</City> <State>NS</State> <Country>Australia</Country> <Postcode>2021</Postcode> </Address>
</Employee> File: Schema.xsd <?xml version = "1.0" ?> <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name = "Customer"> <xs:complexType> <xs:sequence> <xs:element ref = "Name" /> <xs:element ref = "Address" /> </xs:sequence> <xs:attribute name = "customerID" type = "integer" /> </xs:complexType> </xs:element> <xs:element name = "Employee"> <xs:complexType> <xs:sequence> <xs:element ref = "Name" /> <xs:element ref = "Address" /> </xs:sequence> <xs:attribute name = "employeeID" type = "integer" /> </xs:complexType> </xs:element> <xs:element name = "Name"> <xs:complexType> <xs:sequence> <xs:element name = "FirstName" type = "string" /> <xs:element name = "Middle" type = "string" /> <xs:element name = "LastName" type = "string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "Address"> <xs:complexType> <xs:sequence> <xs:element name = "Street1" type = "string" /> <xs:element name = "Town" type = "string" /> <xs:element name = "City" type = "string" /> <xs:element name = "State" type = "string" /> <xs:element name = "Country" type = "string" /> <xs:element name = "Postcode" type = "string" /> </xs:sequence> </xs:complexType> </xs:element>
</xs:schema></source>