XML Schema通常称为 XML架构定义(XSD).它用于描述和验证XML数据的结构和内容. XML模式定义元素,属性和数据类型. Schema元素支持Namespaces.它类似于描述数据库中数据的数据库模式.
您需要在XML文档中声明一个模式,如下所示 :
以下示例显示如何使用schema :
<?xml version = "1.0" encoding = "UTF-8"?> <xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema"> <xs:element name = "contact"> <xs:complexType> <xs:sequence> <xs:element name = "name" type = "xs:string" /> <xs:element name = "company" type = "xs:string" /> <xs:element name = "phone" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
XML Schemas背后的基本思想是它们描述了XML文档可以采用的合法格式.
正如我们在 XML - Elements 章节中看到的那样,元素是XML的构建块文献.元素可以在XSD中定义如下 :
<xs:element name = "x" type = "y"/>
您可以通过以下方式定义XML架构元素 :
简单类型元素仅在文本的上下文中使用.一些预定义的简单类型是:xs:integer,xs:boolean,xs:string,xs:date.例如 :
<xs:element name = "phone_number" type = "xs:int" />
复杂类型是其他元素定义的容器.这允许您指定元素可以包含哪些子元素,并在XML文档中提供一些结构.例如 :
<xs:element name = "Address"> <xs:complexType> <xs:sequence> <xs:element name = "name" type = "xs:string" /> <xs:element name = "company" type = "xs:string" /> <xs:element name = "phone" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element>
在上面的例子中, Address 元素由子元素组成.这是其他< xs:element> 定义的容器,允许在XML文档中构建简单的元素层次结构.
使用全局类型,您可以在文档中定义单个类型,所有其他引用都可以使用该类型.例如,假设您想要为公司的不同地址概括人和公司.在这种情况下,您可以定义一般类型如下 :
<xs:element name = "AddressType"> <xs:complexType> <xs:sequence> <xs:element name = "name" type = "xs:string" /> <xs:element name = "company" type = "xs:string" /> </xs:sequence> </xs:complexType> </xs:element>
现在让我们在我们的示例中使用此类型,如下所示 :
<xs:element name = "Address1"> <xs:complexType> <xs:sequence> <xs:element name = "address" type = "AddressType" /> <xs:element name = "phone1" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "Address2"> <xs:complexType> <xs:sequence> <xs:element name = "address" type = "AddressType" /> <xs:element name = "phone2" type = "xs:int" /> </xs:sequence> </xs:complexType> </xs:element>而不是必须两次定义名称和公司(一次用于 Address1 ,一次用于 Address2 ),我们现在有一个单一的定义.这使得维护更简单,即,如果您决定将"邮政编码"元素添加到地址,则需要在一个地方添加它们.
XSD中的属性在元素中提供额外信息.属性具有 name 和 type 属性,如下所示 :
< xs: attribute name ="x"type ="y"/>