下面都是根据这个XML文件来写Schema:
<?xml version="1.0" encoding="ISO-8859-1"?>
<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>
方式一:常规方法:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
方式二:先定义所有的元素和属性,然后用ref属性引用它们:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>
<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
方式三:定义种类或类型,这使我们能重新用元素定义。通过给简单类型和复合类型元素命名,接着在元素的种类属性类型里指明它们的方法:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>
<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>
<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>
<xs:element name="shiporder" type="shipordertype"/>
</xs:schema>
Element 元素 | Explanation 解释 |
Specifies that the child elements can appear in any order. Each child element can occur 0 or 1 time 指明了子元素可以以任意顺序出现,每个子元素出现0到1次 | |
Specifies the top-level element for schema comments 为schema注释指定了最高阶层的元素 | |
Enables the author to extend the XML document with elements not specified by the schema 让编者能够用没有被schema指定的元素来扩展XML文件 | |
Enables the author to extend the XML document with attributes not specified by the schema 让编者能够用没有被schema指定的属性来扩展XML文件 | |
Specifies information to be used by the application (must go inside annotation) 指定了将被应用程序所用到的信息(必须在annotation里) | |
Defines an attribute 定义属性 | |
Defines an attribute group to be used in complex type definitions 定义了用于复合种类定义的属性组 | |
Allows only one of the elements contained in the <choice> declaration to be present within the containing element 只允许<choice>声明里的元素里的一个元素出现在所含的元素中。 | |
Defines extensions or restrictions on a complex type that contains mixed content or elements only 在包含混合内容和元素的复合类型(complex type)上定义扩展或限制 | |
Defines a complex type element 定义了复合类型元素(complex type element) | |
Defines text comments in a schema (must go inside annotation) 定义了schema里的文本注释(必须在annotation里) | |
Defines an element 定义元素 | |
Extends an existing simpleType or complexType element 扩展一个现存的简单类型或复合类型元素 | |
Specifies an XPath expression that specifies the value used to define an identity constraint 指明一个XPath表达式,以指明用于定义身份约束的值 | |
Defines a group of elements to be used in complex type definitions 定义了将用于复合类型说明的一组元素 | |
Adds multiple schemas with different target namespace to a document 用不同的目标名称空间把多项schema添加到一份文件 | |
Adds multiple schemas with the same target namespace to a document 用同一目标名称空间把多项schema添加到文件 | |
Specifies an attribute or element value as a key (unique, non-nullable, and always present) within the containing element in an instance document 在实例文档包含的元素里指明某属性或元素值,使它们成为“钥匙”(特殊的,非零的,经常是存在的) | |
Specifies that an attribute or element value correspond to those of the specified key or unique element 定义用于回应已指明关键或特殊元素的属性或元素值 | |
Defines a simple type element as a list of values 一张值的列表的形式定义一个简单类型元素 | |
Describes the format of non-XML data within an XML document 描述在XML文档里的非XML形式数据的格式 | |
Redefines simple and complex types, groups, and attribute groups from an external schema 从外部的schema中重新定义简单和复合类型,群,以及属性群 | |
Defines restrictions on a simpleType, simpleContent, or a complexContent 在简单类型,简单文本或复合文本上定义约束 | |
Defines the root element of a schema 定义schema的根元素 | |
Specifies an XPath expression that selects a set of elements for an identity constraint 指明一段可为身份约束选择一组节点的XPath表达 | |
Specifies that the child elements must appear in a sequence. Each child element can occur from 0 to any number of times 指明了子元素必须以一定顺序出现。每个子元素可以出现任意次 | |
Contains extensions or restrictions on a text-only complex type or on a simple type as content and contains no elements 包含着作为只有文本的复合类型或简单类型的文本的扩展和约束,不包含元素 | |
Defines a simple type and specifies the constraints and information about the values of attributes or text-only elements 定义了简单类型,指定了关于属性值或只有文本的元素的信息 | |
Defines a simple type as a collection (union) of values from specified simple data types 从已指定的简单数据类型里定义简单种类,作为值的集合 | |
Defines that an element or an attribute value must be unique within the scope 定义了在所属范围内一个元素或属性值必须是独特(没有重复的)
|