xml之Schema架构
1、什么是Schema架构
2、Schema文档结构
3、Schema元素类型
1》element元素
1 <!--简单数据;类型--> 2 <xs:element name="dog" type="xs:string"></xs:element> 3 <xs:element name="cat" type="xs:string"></xs:element> 4 5 <!--复杂数据类型--> 6 <xs:element name="pets"> 7 <xs:complexType> 8 <xs:choice minOccurs="0" maxOccurs="unbounded"> 9 <xs:element ref="dog" ></xs:element> 10 <xs:element ref="cat"></xs:element> 11 </xs:choice> 12 </xs:complexType> 13 </xs:element>
2》group元素
属性:name、ref
1 <!--group元素--> 2 <xs:element name="ele1" type="xs:string"></xs:element> 3 <xs:element name="ele2" type="xs:string"></xs:element> 4 <xs:attribute name="myAttrituate1" type="xs:decimal"></xs:attribute> 5 <!--group含有 name 和 ref 两个属性--> 6 <!--位于 根节点schema下面的 group 没有 ref 元素--> 7 <xs:group name="myGroup1"> 8 <xs:sequence> 9 <xs:element ref="ele1"></xs:element> 10 <xs:element name="ele3" type="xs:string"></xs:element> 11 </xs:sequence> 12 </xs:group> 13 14 15 <xs:complexType name="comp1"> 16 <xs:group ref="myGroup1"></xs:group> 17 <xs:attribute ref="attr2"></xs:attribute> 18 </xs:complexType>
3》attribute元素(为元素声明属性)
属性:name、type、ref
1 <xs:attribute name="myAttrituate1" type="xs:decimal"></xs:attribute> 2 3 <!--attribute元素:含有属性:name/ref/type--> 4 <xs:attribute name="attr2" type="xs:string"></xs:attribute>
4》attributeGroup元素
作用:将一组属性声明在一起,一边被复杂类型重复使用
属性:name、ref
1 <!--attributeGroup元素,含有属性 name / ref--> 2 <xs:attributeGroup name="myattributeGroup"> 3 <xs:attribute name="attribute1" type="xs:string"></xs:attribute> 4 <xs:attribute name="attribute2" type="xs:string"></xs:attribute> 5 </xs:attributeGroup> 6 7 <!--下面这个 attributeGroup 就是 指向 上面的 那个 attributeGroup--> 8 <xs:attributeGroup name="myattributeRefGroup"> 9 <xs:attributeGroup ref="myattributeGroup"></xs:attributeGroup> 10 </xs:attributeGroup>
5》simpleType元素
作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息
属性:name
内容:应用已经存在的简单类型,三种方式
restrict→限定一个范围
list→从列表中选择
union→包含一个值的集合
1 <!--simpleType元素(决定 元素和属性值的 约束和相关信息)含有属性 name,,含有三种形式的 内容--> 2 <!--第一种内容 : restriction(限制,简单类型是 在什么)--> 3 <xs:simpleType name="restrictionSimpleType"> 4 <!--限制 内容在 一定范围内;;注意 base 是不能 缺失的(内容 继承自 什么)--> 5 <xs:restriction base="xs:integer"> 6 <xs:minInclusive value="0"></xs:minInclusive> 7 <xs:maxInclusive value="100"></xs:maxInclusive> 8 </xs:restriction> 9 </xs:simpleType> 10 11 12 <!--第二种 内容的 形式 list(列表,,只允许用户 在指定的 列表中间 选择一个值)--> 13 <xs:simpleType name="listSimpleType"> 14 <xs:list itemType="xs:date"></xs:list> <!--约束 简单类型的 内容只允许 是 日期中的 一个日期--> 15 </xs:simpleType> 16 17 18 <!--第三种 内容的 形式 union(合并,,就是 一个 简单类型 包含 一个 简单类型的集合) --> 19 20 <!--下面的 这个 例子 非常经典,,一定要记住--> 21 <xs:simpleType name="roadBikeSize"> 22 <xs:restriction base="xs:positiveInteger"><!--公路自行车的 尺寸--> 23 <xs:enumeration value="20"></xs:enumeration> 24 <xs:enumeration value="40"></xs:enumeration> 25 <xs:enumeration value="60"></xs:enumeration> 26 </xs:restriction> 27 </xs:simpleType> 28 29 <xs:simpleType name="mountainbikesize"><!--山地车的 尺寸--> 30 <xs:restriction base="xs:string"> 31 <xs:enumeration value="small"></xs:enumeration> 32 <xs:enumeration value="middle"></xs:enumeration> 33 <xs:enumeration value="big"></xs:enumeration> 34 </xs:restriction> 35 </xs:simpleType> 36 37 <xs:attribute name="sizeOfBike"> 38 <xs:simpleType> 39 <xs:union> 40 <xs:simpleType> 41 <xs:restriction base="roadBikeSize"></xs:restriction> 42 </xs:simpleType> 43 <xs:simpleType> 44 <xs:restriction base="mountainbikesize"></xs:restriction> 45 </xs:simpleType> 46 </xs:union> 47 </xs:simpleType> 48 </xs:attribute> 49 50 51 <xs:element name="bike"> 52 <xs:complexType><!--因为 元素 含有属性 ,所以要使用 复杂类型--> 53 <xs:attribute ref="sizeOfBike"></xs:attribute> 54 </xs:complexType> 55 </xs:element>
6》complexType元素
作用:定义一个复合类型,它决定了一组元素和属性值的约束和相关信息
属性:name
1 <xs:complexType name="sizeOfShoes"> 2 <xs:simpleContent> 3 <xs:extension base="xs:decimal"> 4 <xs:attribute name="sizing" type="xs:string"></xs:attribute> 5 </xs:extension> 6 </xs:simpleContent> 7 </xs:complexType> 8 9 <xs:element name="shoes" type="sizeOfShoes"></xs:element>
(*)complexType与simpleType区别:
1、simpleType类型的元素中不能包含元素或者属性。
2、当需要声明一个元素的子元素和/或属性时,用complexType;
3、当需要基于内置的基本数据类型定义一个新的数据类型时,用simpleType。
7》simpleContent元素
作用:应用于complexType,对它的内容进行限制和扩展
1 <xs:element name="shoes2"> 2 <xs:complexType> 3 <xs:simpleContent > 4 <xs:extension base="xs:decimal"><!--这里的 base 继承 是限制 simpleContent 的--> 5 <xs:attribute name="sizing"> 6 <xs:simpleType> 7 <xs:restriction base="xs:string"><!--这里的 base是 限制 simpleType(也就是限制 attribute)--> 8 <xs:enumeration value="big"></xs:enumeration> 9 <xs:enumeration value="middle"></xs:enumeration> 10 <xs:enumeration value="small"></xs:enumeration> 11 </xs:restriction> 12 </xs:simpleType> 13 </xs:attribute> 14 </xs:extension> 15 </xs:simpleContent> 16 </xs:complexType> 17 </xs:element>
8》choice元素
作用:允许唯一的一个元素从一个组中被选择
属性:maxOccurs、minOccurs
1 <xs:element name="pets2"> 2 <xs:complexType> 3 <xs:choice minOccurs="1" maxOccurs="2"> <!--设置 能够选择的 项数(最少选择一项,最多选择2项)--> 4 <xs:element name="dog"> 5 <xs:simpleType> 6 <xs:restriction base="xs:string"> 7 <xs:enumeration value="哈巴"></xs:enumeration> 8 <xs:enumeration value="藏獒"></xs:enumeration> 9 </xs:restriction> 10 </xs:simpleType> 11 </xs:element> 12 <xs:element name="cat"> 13 <xs:simpleType> 14 <xs:restriction base="xs:string"> 15 <xs:enumeration value="波斯猫"></xs:enumeration> 16 <xs:enumeration value="tom"></xs:enumeration> 17 </xs:restriction> 18 </xs:simpleType> 19 </xs:element> 20 </xs:choice> 21 </xs:complexType> 22 </xs:element>
9》unique元素
作用:定义一个元素或属性值,它必须在特定的范围内
1 <xs:complexType name="CustomerOrderType"> 2 <xs:sequence> 3 <xs:element name="item" minOccurs="0" maxOccurs="unbounded"> 4 <xs:complexType> 5 <xs:attribute name="itemID" type="xs:string"></xs:attribute> 6 </xs:complexType> 7 </xs:element> 8 </xs:sequence> 9 <xs:attribute name="CustomerId" type="xs:string"></xs:attribute> 10 </xs:complexType> 11 12 <xs:element name="ordersByCustomer"> 13 <xs:complexType><!--下面含有子元素--> 14 <xs:sequence> 15 <xs:element name="customerOrderType" type="CustomerOrderType" minOccurs="0" maxOccurs="unbounded"></xs:element> 16 </xs:sequence> 17 </xs:complexType> 18 <xs:unique name="oneCustomerOrdersforEachCustomerID"> 19 <xs:selector xpath="mstns:customerOrderType"></xs:selector> 20 <xs:field xpath="@CustomerId"></xs:field> 21 </xs:unique> 22 </xs:element>
10》sequence元素
作用:按照顺序出现某些元素
1 <xs:complexType name="pets"> 2 <xs:sequence> 3 <xs:element name="dog"></xs:element> 4 <xs:element name="cat"></xs:element> 5 </xs:sequence> 6 </xs:complexType>
4、完整示例代码
1 <xs:element name="purchaseOrder" type="PurchaseOrderType"></xs:element> 2 <xs:element name="comment" type="xs:string"></xs:element> 3 <xs:complexType name="PurchaseOrderType"> 4 <!--下面是子元素:依次出现下面子元素--> 5 <xs:sequence> 6 <xs:element name="shipTo" type="USAAddress"></xs:element> 7 <xs:element name="billTo" type="USAAddress"></xs:element> 8 <xs:element name="items" type="Items"></xs:element> 9 </xs:sequence> 10 <xs:attribute name="orderDate" type="xs:date"></xs:attribute> 11 </xs:complexType> 12 13 <xs:complexType name="USAAddress"> 14 <xs:sequence> 15 <xs:element name="name"></xs:element> 16 <xs:element name="street"></xs:element> 17 <xs:element name="city"></xs:element> 18 <xs:element name="state"></xs:element> 19 </xs:sequence> 20 <xs:attribute name="country" type="xs:string" fixed="US"></xs:attribute><!--fixed="US"表示 如果没有 声明此属性,那么默认 就是 US--> 21 </xs:complexType> 22 23 <xs:complexType name="Items"> 24 <xs:sequence> 25 <xs:element name="productName" type="xs:string"></xs:element> 26 <xs:element name="quantity"> 27 <xs:simpleType> 28 <xs:restriction base="xs:positiveInteger"> 29 <xs:maxExclusive value="100"></xs:maxExclusive> 30 </xs:restriction> 31 </xs:simpleType> 32 </xs:element> 33 </xs:sequence> 34 </xs:complexType> 35 </xs:schema>