`

XML schema简介

 
阅读更多

XML schema简介

 

schema是DTD的替代物,比DTD功能更强大,用来约束,定义xml的元素.

 

DTD和Schema都是对XML文档的一种约束,为什么不就选其中之一,而又有Schema呢。

因为DTD安全度太低了,也就是说它的约束定义能力不足,无法对XML实例文档做出更细致的语义限制。

其实细心的人会发现,在DTD中,只有一个数据类型,就是PCDATA(用在元素中)和CDATA(用在属性中),

在里面写日期也行,数字还行,字符更是没问题。而Schema正是针对这些DTD的缺点而设计的,

Schema是完全使用XML作为描述手段,具有很强的描述能力,扩展能力和处理维护能力等。

 

schema文件以.xsd为后缀名,符合xml文件格式,根标签为<schema>,一般使用命名空间.

 

比如,有一个xml文件

customer.xml

------------

<customer>
  <name>teiki</name>
  <address>No.237, Road Waitan, Shanghai</address>
</customer>

 可以使用下面的customer.xsd文件约束,

 

schema标签名字使用了xsd的命名空间,

xsd命名空间定义为 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

customer.xsd

-------------

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="customer">
     <xsd:complexType>
       <xsd:sequence>
          <xsd:element name="name" type="xsd:string"/>
          <xsd:element name="address" type="xsd:string" />
       </xsd:sequence>
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

 说明:

实例文档customer.xml中,<customer>元素含有两个子元素,在Schema中凡是有两个以上的子元素,就认为是复杂类型的,

所以我们在Schema文档中采用ComplexType来定义该元素。表示有多个XML子元素。

sequence表示子元素依次出现的顺序。

如果有多层子元素怎么办呢,同样的道理,有几层写几层,一直往下嵌就OK了,

这里我要说的是另一种方法,结构看上去会清晰一些。

 

address.xml

---------------

<customer>
  <name>Teiki</name>
  <address>
    <!-- address追加一个地址子元素 -->
    <prefecture>Zhejiang</prefecture>
    <city>Hangzhou</city>
    <street>Xilu Road, No.121, 7F</street>
  </address>
</customer>

 下面就是采用ref元素来编写的这个Schema文档:

address2.xsd

----------------------

<?xm l version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="customer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <!-- 使用ref引用下面定义的address -->
        <xsd:element ref="address"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="address">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="prefecture" type="xsd:string"/>
        <xsd:element name="city" type="xsd:string" />
        <xsd:element name="street" type="xsd:string" />
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

 如果按正常的写法,应该把13-21行的内容替换到每8行去,

但这里使用ref元素可以直接将其指向另一个模块,使文档更加具有可读性。

 

如果元素中包含属性怎么办呢?一样简单,只要在定义完子元素的后面再着定义属性就行了。

定义属性用“attribute”,还是举个例子吧

 

 

customer2.xml

---------------

<customer id="001718">
  <name>Teiki</name>
  <address>No.237, Road Waitan, Shanghai</address>
</customer>

 这个例子和上面的一个例子差不多,只是在元素customer中设了一个属性id。

 

customer2.xsd

------------------

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="customer">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element name="address" type="xsd:string" />
      </xsd:sequence>
      <!-- 增加属性定义 -->
      <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

 说明:

需要注意的一点是,属性和元素不是一家的,所以要把它放在sequence外面写,

但它们都在customer的孩子,所以要写在complexType的里面。

 

下面再看一个例子:

temp.xsd

----------------------

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="order">
    <xsd:complexType>
      <xsd:sequence>
        <!--maxOccurs代表:相同元素最多出现的次数,与此相反的是minOccurs代表:出现的最少次数。-->
        <xsd:element ref="orderItem" maxOccurs="10"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="orderItem">
    <xsd:complexType>
      <xsd:sequence>
        <!-- choice代表:可选的元素,也就是在这里面写的元素只能选其中之一,不能全写。 -->
        <xsd:choice>
          <xsd:element name="id" type="idType"/>
          <xsd:element name="name" type="xsd:string"/>
        </xsd:choice>
        <xsd:element name="quantity" type="quantityType"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  
  <!-- simpleType代表自定义数据类型,也就是name里的并不是真正的数据类型,而是根据自己的意愿定制的。 -->
  <xsd:simpleType name="idType">
    <!-- restriction代表对某一数据类型做约束,也就是只能取其中范围之内符合要求的 -->
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="7-5058-3496-7"/>
      <xsd:enumeration value="7-5005-6450-3"/>
      <xsd:enumeration value="7-3020-6069-7"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="quantityType">
    <xsd:restriction base="xsd:integer">
      <xsd:minInclusive value="1"/>
      <xsd:maxInclusive value="10"/>
    </xsd:restriction>
  </xsd:simpleType>

</xsd:schema>

 上面的例子中,maxOccurs代表:相同元素最多出现的次数,与此相反的是minOccurs代表:出现的最少次数。

默认情况下两个都为“1”,如果把minOccurs设为“0”,表示该元素可有可无。

choice代表:可选的元素,也就是在这里面写的元素只能选其中之一,不能全写。

simpleType代表自定义数据类型,也就是name里的并不是真正的数据类型,而是根据自己的意愿定制的。

restriction代表对某一数据类型做约束,也就是只能取其中范围之内符合要求的,

比如第25-29行中,里面又有个元素enumeration代表枚举,

也就是只能在枚举的那几个中选一个,而下在的36-36行,

里面又有一对元素minInclusive和maxInclusive代表类型的取值范围,

也就是只能取大于等于minInclusive并且小于等于maxInclusive的数。

 

把这个Schema用在XML中是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="D:/ProgramCode/Year2/XML/practice/temp.xsd">
  <orderItem>
    <id>7-5005-6450-3</id>
    <quantity>3</quantity>
  </orderItem>
  
  <orderItem>
    <name>xyb</name>
    <quantity>3</quantity>
  </orderItem>
  
  <!-- 注意下面这个是错的,因为超出了规定的范围 quantityType取值为1-10 -->
  <orderItem>
    <id>7-5005-6450-3</id>
    <quantity>13</quantity>
  </orderItem>
  <!? 从上面的注释到此,是错误的 -->
</order>

 说明:

红色的部分是导入Schema的命令,绿色的是Schema文件的路径,如果用XMLSPY写时,会自动加上。

 

对属性的设置,基本上和元素的差不多。比如:

<xsd:element name="orderItem">
  <xsd:complexType>
    <xsd:sequence></xsd:sequence>
    <xsd:attribute name="id" type="idType" use="required"/>
    <xsd:attribute name="quantity" type="xsd:integer" default="1"/>
  </xsd:complexType>
  
  <xsd:simpleType name="idType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="/d{1}-/d{4}-/d{4}-/d{1}"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:element>

 这里我们讲id属性类型作为一种自定义数据类型idType。它的格式就是上面用到的也就是类似于“7-5005-6450-3”样的。

而且,用attribute元素的use属性来定义是否是必须的属性。

required是必须值,optional是可选值,prohibited是无属性值。default属性是默认值。

 

参考:  http://www-128.ibm.com/developerworks/cn/xml/xml-schema/index.html

分享到:
评论

相关推荐

    根据xml schema生成xml

    &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt; &lt;/xs:schema&gt; ``` 这个例子定义了一个`person`元素,包含`firstName`和`lastName`两个子元素,都是字符串类型。 2. **验证XML文档**:...

    XmlSchema-1.4.6.jar

    `XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP(简单对象访问协议)的Web服务交互时,这个库扮演了至关重要的角色。...

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    Introduction to XML Schema

    ### XML Schema简介 XML Schema是一种基于XML的替代DTD(Document Type Definition)的技术,它用于定义XML文档的结构。XML Schema语言通常也被称作XML Schema Definition (XSD)。 #### 应具备的基础知识 在深入...

    XML文件XML Schema.docXML Schema.doc

    "XML Schema知识点" XML Schema是XML语言为基础的,它用于可替代DTD。它用于描述XML文档的结构。XML Schema语言也被称为XML Schema Definition(XSD)。XML Schema的作用是定义一份XML文档的合法组件群,就像DTD的...

    理解XML Schema XML Schema进阶

    XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...

    XML与XMLSchema

    【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...

    xmlschema-core-2.0.3的jar

    `xmlschema-core-2.0.3.jar` 是一个Java库,专门用于解析和操作XML Schema文档,它支持XML Schema 1.1标准。 在Spring Web服务中,XML Schema Core库扮演着关键角色。Spring Web Service框架是基于合同优先...

    Schema教程 xml

    1. XML Schema简介 XML Schema的主要目标是定义XML文档的合法结构,包括元素、属性、子元素的关系、顺序、数量、空值规则、数据类型、默认值和固定值。与DTD相比,XML Schema具有以下优点: - 可扩展性:XML Schema...

    XML Schema教程

    ### XML Schema 教程知识点详解 #### 一、XML Schema 概述 - **XML Schema 定义**:XML Schema 是一种基于 XML 的语言,用于描述 XML 文档的结构。它定义了 XML 文档中可以出现的元素、属性及其结构,并且指定了...

    XmlSchema-1.4.7.jar

    XmlSchema-1.4.7.jar 是一个Java库,它实现了W3C的XML Schema标准,用于处理XML Schema文档。这个版本(1.4.7)可能是该库的一个稳定版本,提供给用户免费使用。XML Schema是XML的一种规范,定义了如何验证XML文档的...

    XML_Schema 教程 详细版

    #### 一、XML Schema 简介 XML Schema是一种用于描述XML文档结构的语言,被视为DTD(Document Type Definition)的替代品,具有更丰富的特性和更高的灵活性。XML Schema(也常称为XSD,即XML Schema Definition)...

    西工大服务计算实验2-1_XML Schema

    XML Schema,全称为XML Schema Definition,是用于定义XML文档结构和数据类型的规范,它是W3C(World Wide Web Consortium)制定的一种标准。在本实验"西工大服务计算实验2-1_XML Schema"中,你的任务是编写一个程序...

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

    XMLSchema.chm

    这个“XMLSchema.chm”文件很可能是一个帮助文档,旨在为学习XML Schema的用户提供详细的指导和参考资料。下面我们将深入探讨XML Schema的相关知识点。 1. **XML Schema的作用**:XML Schema的主要功能是规范XML...

    XmlSchema-1.4.7 jar包

    好不容易找到的XmlSchema-1.4.7 jar包,需要的同学速度下载吧。不黑心,只要1分~~~

    xmlschema实验及答案.doc

    XML Schema实验及答案 XML Schema是基于XML的_schema语言,是一种用于定义XML文档结构的语言。它是W3C制定的一个标准,用于描述XML文档的结构、约束和关系。XML Schema提供了一个强大的工具,用于定义和验证XML文档...

    XML Schema简明教程-W3C.rar

    XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 描述 XML 文档的结构。 XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 在此教程中,你将学习如何在应用程序中读取和创建 XML ...

Global site tag (gtag.js) - Google Analytics