XML Schema文档
发布时间:2020-12-16 08:18:33 所属栏目:百科 来源:网络整理
导读:XSD基础 XML Schema是以XML语言为基础,与DTD一样是负责定义和描述XML文档结构和内容模式。 DTD缺陷: DTD是基于正则表达式的,描述能力有限 它没有数据类型的支持,在大多数应用环境下能力不足 约束能力不足,无法对XML实例文档做出更细致的语义描述 DTD的
XSD基础XML Schema是以XML语言为基础,与DTD一样是负责定义和描述XML文档结构和内容模式。 DTD缺陷:
XSD正是对这些DTD缺陷而进行设计的,它的最重要的能力之一就是对数据类型的支持,例如int、float、boolean和date等
XML Schema的两种模式
1. Microsoft XMLSchema
Microsoft XMLSchema模式的Schema文件和其他的XML文件相似,后缀名为.xml,语法如下:
<Schema name="schema-name" xmlns="namespace"> 元素声明部分或属性声明部分 </Schema>2.W3C XML Schema
W3C XML Schema模式的文档元素及属性等全部内容大多数以xsd:开头,也有的以xs:开头,文档后缀名为.xsd,并且根元素必须为xsd:schema,语法如下:
<xsd:schema xmlns:xsd="namespace"> 元素声明部分或属性声明部分 </xsd:schema> XSD基本结构
一个完整的XSD文档可以由元素、注释、命名空间以及其他节点组成。
例如:
(1)首先创建XSD文件,命名为Node.xsd
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/name" xmlns="http://www.example.com/name" elementFormDefault="qualified"> <xsd:element name="note"> <xsd:complexType> <xsd:sequence> <xsd:element name="to" type="xsd:string" /> <xsd:element name="from" type="xsd:string" /> <xsd:element name="heading" type="xsd:string" /> <xsd:element name="body" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>(2)创建实例文档,命名为work.xml <?xml version="1.0" encoding="UTF-8"?> <note xmlns="http://www.example.com/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/name Node.xml"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Do not forget me this weekend!</body> </note> 根元素 schema可以通过三种形式中任一来声明一个schema<xs xmlns="http://www.w3.org/2001/XMLSchema"> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> targetNamespace属性XSD的主要目的是声明模式,这些模式由targetNamespace属性里指定的一个命名空间来表示,并不是所有的XML Schema模式都有一个targetNamespace属性。许多XSD定义的模式可以在另一个XSD中使用,或者把模式应用于不需要使用命名空间的文档里。使用方式如下:<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/name" xmlns:target="http://www.example.com/name"> 指定元素限定方式的属性
Schema元素中利用elementFormDefault属性和attributeFormDefault属性指定元素的限定方式,因此可以修改元素的默认值。利用这两个属性,可以控制实例文档里元素和属性的默认限定值。在默认情况下,这两个属性的默认属性值是unqualified,它表示非限定的。
创建元素:element
语法如下:
<element name="" type="" ref="" form="" minOccurs="" maxOccurs="" default="" fixed=""> </element>
声明simpleType元素
创建element元素之后需要添加内容,XSD中定义了一些描述元素内容和属性的数据类型,也可以自定义类型。声明简单类型元素时需要通过simpleType来实现,语法如下:
<simpleType name="" id=""> <annotation | restriction | list | union >... </simpleType> 限定类型 restriction
在一个restriction声明中,必须使用base属性定义约束类型。这个属性的值是对全局simpleType定义或者对XSD内置数据类型的引用。例如:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="note"> <xsd:simpleType name="MyInteger"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="10000"/> <xsd:maxInclusive value="99999"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema> 列表类型 list
使用list元素进行声明时,可以使用itemType属性定义列表项的类型,这个属性的值是一个全局的simpleType定义或者XSD类型的引用,这个引用是一个命名空间限定的值,因此它需要前缀。另外,在list元素声明时,还可以建立一个局部的simpleType定义说明itemType的内容。
例如:创建一个名称是MyContactList的全局simpleType类型,表示手机通讯录中可以使用的内容
<xsd:simpleType name="MyContactList"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="username"/> <xsd:enumeration value="qq"/> <xsd:enumeration value="email"/> <xsd:enumeration value="address"/> </xsd:restriction> </xsd:simpleType>上述代码只允许使用一个枚举类型的单个值,如果想要使用多个值,可以创建一个新的类型,然后通过list声明定义一个列表: <xsd:simpleType name="MyContactListType"> <xsd:list itemType="MyContactList"></xsd:list> </xsd:simpleType> 声明complexType元素
与simpleType元素定义相反的是complexType元素,它用于定义复杂类型,通常也会被称作复合类型。
sequence元素
sequence元素要求组中的元素以指定顺序出现在包含元素中。语法如下:
<sequence id="" maxOccurs="" minOccurs="">
choice元素
choice元素仅仅允许包含在该声明中的元素之一出现在包含的元素中。例如:
<xsd:element name="person"> <xsd:complexType> <xsd:choice> <xsd:element name="employee" type="employee"/> <xsd:element name="member" type="member"/> </xsd:choice> </xsd:complexType> </xsd:element> 声明属性元素:attribute
语法如下:
<attribute name="" default="" fixed="" form="" id="" ref="" type="" use=""> (annotation?,(simpleType?)) </attribute>
<xsd:attribute name="code"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="[A-Z][A-Z]"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute>还可以在复杂类型中一个已有的属性中声明一个属性。 <xsd:complexType name="someComplexType"> <xsd:attribute ref="code"/> </xsd:complexType> 将XML Schema文档引入XML中
如果在XSD中定义了命名空间,那么XML文件中需要使用一下代码关联这个XSD文档:
<note xmlns="http://www.example.com/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/name Node.xml"> </note>
如果XSD文档中没有定义目标命名空间,只是使用了标准命名空间,则:
<note xmlns="http://www.example.com/name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.example.com/name Node.xml"> </note> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |