`

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 Schema 简介 XML Schema 是一种基于 XML 的 DTD 替代者,它可以描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。为了学习 XML Schema,需要具备的基础知识包括 HTML、XHTML...

    根据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

    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框架是基于合同优先...

    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实用教程_XML_Schema结构

    #### 一、XML Schema简介 **XML Schema** 是一种标准化的语言,用于定义XML文档的结构和内容。它被视为继DTD(Document Type Definition)之后的第二代XML描述标准。与DTD相比,XML Schema提供了更强大的功能和更...

    XML与XMLSchema

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

    xmlschema-core-2.1.0-API文档-中文版.zip

    赠送jar包:xmlschema-core-2.1.0.jar; 赠送原API文档:xmlschema-core-2.1.0-javadoc.jar; 赠送源代码:xmlschema-core-2.1.0-sources.jar; 赠送Maven依赖信息文件:xmlschema-core-2.1.0.pom; 包含翻译后的API...

    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-1.4.7 jar包

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

    XMLSchema.chm

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

    xmlschema实验及答案.doc

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

Global site tag (gtag.js) - Google Analytics