`
oaklet
  • 浏览: 109049 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML Schema 简述

    博客分类:
  • java
阅读更多
简介
XML Schema 是 W3C 标准。
XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
详细内容请参考http://www.w3.org/XML/Schema

XML Schema 是符合 XML 语法的文档,是形式良好的 XML 文档,比如:
  • 它必须以 XML 声明开头
  • 它必须拥有唯一的根元素
  • 开始标签必须与结束标签相匹配
  • 元素对大小写敏感
  • 所有的元素都必须关闭
  • 所有的元素都必须正确地嵌套
  • 必须对特殊字符使用实体


一个简单的例子:
<?xml version="1.0" encoding="GBK"?>
<circle xmlns:an="http://www.an.net/shape" name="demoCircle">
  <center>
    <x>155</x>
    <y>231</y>
  </center>
  <radius>15.59</radius>
</circle>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:an="http://www.an.net/shape" 
targetNamespace="http://www.an.net/shape" elementFormDefault="qualified">
  <xs:element name="circle">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="center" type="an:PointType"/>
        <xs:element name="radius" type="xs:double"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PointType">
    <xs:sequence>
      <xs:element name="x" type="xs:nonPositiveInteger"/>
      <xs:element name="y" type="xs:nonPositiveInteger"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>


简易元素
简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
不过,“仅包含文本”这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。
定义简易元素的语法:
  <xs:element name="xxx" type="yyy"/>

此处 xxx 指元素的名称,yyy 指元素的数据类型。XML Schema 拥有很多内建的数据类型。
例如 radius 就是一个简易元素。
定义属性的语法是:
  <xs:attribute name="xxx" type="yyy"/>

在此处,xxx 指属性名称,yyy 则规定属性的数据类型。XML Schema 拥有很多内建的数据类型。
简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。所有的属性均作为简易类型来声明。

最常用的类型是:
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

复合元素
复合元素指包含其他元素及/或属性的 XML 元素。
有四种类型的复合元素:
  • 空元素
  • 包含其他元素的元素
  • 仅包含文本的元素
  • 包含元素和文本的元素

注释:上述元素均可包含属性!
例如 PointType 就是一个复合元素。

  复合空元素示例:
<product prodid="1345"/>

xsd定义1
<xs:element name="product">
  <xs:complexType>
    <xs:attribute name="prodid" type="xs:positiveInteger"/>
  </xs:complexType>
</xs:element>

xsd定义2
<xs:element name="product" type="prodtype"/>

<xs:complexType name="prodtype">
  <xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>

  复合类型仅包含元素:
<person>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>

xsd定义1
<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

xsd定义2
<xs:element name="person" type="persontype"/>

<xs:complexType name="persontype">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

  仅含文本的复合元素:
<shoesize country="france">35</shoesize>

xsd定义1
<xs:element name="shoesize">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:integer">
        <xs:attribute name="country" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

xsd定义2
<xs:element name="shoesize" type="shoetype"/>

<xs:complexType name="shoetype">
  <xs:simpleContent>
    <xs:extension base="xs:integer">
      <xs:attribute name="country" type="xs:string" />
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

对于仅包含文本的请使用 extension 或 restriction 元素来扩展或限制元素的基本简易类型:
<xs:extension base="basetype">
  ....
  ....
</xs:extension>
<xs:restriction base="basetype">
  ....
  ....
</xs:restriction>

  带有混合内容的复合类型:
<letter>
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>

xsd定义1
<xs:element name="letter">
  <xs:complexType mixed="true">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="orderid" type="xs:positiveInteger"/>
      <xs:element name="shipdate" type="xs:date"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

xsd定义2
<xs:element name="letter" type="lettertype"/>

<xs:complexType name="lettertype" mixed="true">
  <xs:sequence>
    <xs:element name="name" type="xs:string"/>
    <xs:element name="orderid" type="xs:positiveInteger"/>
    <xs:element name="shipdate" type="xs:date"/>
  </xs:sequence>
</xs:complexType>



XSD 复合类型指示器
通过指示器,我们可以控制在文档中使用元素的方式。

  Order 指示器
Order 指示器用于定义元素的顺序。
  • All
  • Choice
  • Sequence

<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:
<xs:element name="person">
  <xs:complexType>
    <xs:all>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):
<xs:element name="person">
  <xs:complexType>
    <xs:choice>
      <xs:element name="employee" type="employee"/>
      <xs:element name="member" type="member"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

<sequence> 规定子元素必须按照特定的顺序出现:
<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

  Occurrence 指示器
Occurrence 指示器用于定义某个元素出现的频率。对于所有的 "Order" 和 "Group" 指示器(any、all、choice、sequence、group name 以及 group reference),其中的 maxOccurs 以及 minOccurs 的默认值均为 1。
  • maxOccurs
  • minOccurs

<maxOccurs> 指示器可规定某个元素可出现的最大次数:
<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="full_name" type="xs:string"/>
      <xs:element name="child_name" type="xs:string" maxOccurs="10"/>
    </xs:sequence>
  </xs:complexType>

</xs:element>

<minOccurs> 指示器可规定某个元素能够出现的最小次数:
<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="full_name" type="xs:string"/>
      <xs:element name="child_name" type="xs:string"
      maxOccurs="10" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

如需使某个元素的出现次数不受限制,请使用 maxOccurs="unbounded" 这个声明。
  Group 指示器
Group 指示器用于定义相关的数批元素。
  • Group name
  • attributeGroup name

  元素组
元素组通过 group 声明进行定义:
<xs:group name="组名称">
  ...
</xs:group>
您必须在 group 声明内部定义一个 all、choice 或者 sequence 元素。下面这个例子定义了名为 "persongroup" 的 group,它定义了必须按照精确的顺序出现的一组元素:
<xs:group name="persongroup">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>

在您把 group 定义完毕以后,就可以在另一个定义中引用它了:
<xs:group name="persongroup">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>

<xs:element name="person" type="personinfo"/>

<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:group ref="persongroup"/>
    <xs:element name="country" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

  属性组

属性组通过 attributeGroup 声明来进行定义:

<xs:attributeGroup name="组名称">
  ...
</xs:attributeGroup>

下面这个例子定义了名为 "personattrgroup" 的一个属性组:
<xs:attributeGroup name="personattrgroup">
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>

在您已定义完毕属性组之后,就可以在另一个定义中引用它了,就像这样:
<xs:attributeGroup name="personattrgroup">
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>

<xs:element name="person">
  <xs:complexType>
    <xs:attributeGroup ref="personattrgroup"/>
  </xs:complexType>
</xs:element>
分享到:
评论

相关推荐

    (完整版)《JavaWeb程序开发入门》课后练习(含答案).docx

    第一页:XML 和 XML Schema * 编写格式良好的 XML 文档,包括足球队和篮球队的信息 * 在 XML Schema 文档中定义一个雇员的年龄为 18-58 周岁之间的元素声明 知识点: * XML 文档的基本结构和语法 * XML Schema 的...

    oracle xml开发手册(PDF)

    5. **ASP与XMLSchema**:验证XML文档是否符合指定的XML Schema。 第三章“ASP组件”可能涵盖ASP与XML相关的服务器组件: 1. **MSXML组件**:介绍微软提供的XML解析和处理组件,如MSXML2.ServerXMLHTTP和MSXML2.DOM...

    HTML和XML入门

    "XML简述"和"XML教程"会引导你理解XML的基本结构、命名规则、文档类型定义(DTD)或XML Schema用于验证数据的正确性,以及XPath、XSLT等工具来查询和转换XML数据。 XML文档通常包含元素、属性、注释、处理指令等...

    XML视频教程6.1

    3. DTD与XML Schema:可能会讲解如何通过DTD(Document Type Definition)或XML Schema来定义XML文档的结构和数据类型,以确保文档的合法性。 4. 属性和元素:区分元素和属性的用途,元素通常用于描述对象,而属性...

    Dom4j解析XML+使用简介

    3. **XML Schema验证**: Dom4j提供API来验证XML文档是否符合特定的XML Schema定义。 4. **DOM4J与JAXB集成**: 两者结合可以方便地进行XML到Java对象的映射,以及反之。 **五、Dom4j的优势** 1. **简洁API**: Dom4...

    XML应用开发(软件品牌)-1期 第1单元 单元项目实践-创建网上订单XML文档.doc

    此外,你还可以讨论如何验证XML文档的正确性,例如,通过XML Schema (XSD) 或者 Relax NG 来定义文档的结构和约束。 通过这个项目实践,你不仅会掌握XML的基本概念,还会熟悉XMLSPY的使用,为后续的XML应用开发奠定...

    xml在sql_server_2008中的应用

    #### 一、XML简述 XML (Extensible Markup Language),即可扩展标记语言,是一种用于存储和传输数据的标准格式。它与HTML不同,HTML主要用于网页展示,而XML则更多地被用于数据传输和存储。 ##### XML与HTML的区别...

    XML1.0标准(中文版)

    - **W3C XML工作组(非正式)**:简述了参与制定XML标准的组织和人员。 通过以上概述,我们可以看到XML 1.0标准为创建、解析和处理XML文档提供了一套全面的规定和指南,这不仅有助于确保XML文档的一致性和可读性,...

    xml检索技术研究—模型、索引、排序

    ##### XML文档简述 XML(可扩展标记语言)是一种灵活且强大的数据格式,用于存储和传输信息。自1998年由W3C(World Wide Web Consortium)发布以来,XML因其能够清晰地表示数据结构和内容,而在各种领域得到了广泛...

    SPRING MVC配置过程

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"&gt; &lt;!-- 配置...

    DB2索引分析器使用简述

    db2advis -d mydb -i ALL.sql -noxml -user myuser/mypass -schema myuser ``` - `-d` 指定数据库名称。 - `-i` 指定包含SQL语句的文件。 - `-noxml` 表示输出格式不使用XML。 - `-user` 指定登录数据库的用户名/...

    网站设计论文1

    同时,通过XML Schema(XS)可以定义和约束XML文档的数据结构,确保数据的一致性和准确性。 电子商务技术基础研究主要关注如何在不同商业系统和操作系统间建立标准的数据表示方法。在上述电子商务系统示意图中,...

    Apache Tomcat 8.5的安装配置 、JDK 1.8的安装

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0"&gt; ,manager-gui,manager-jmx,manager-script,manager-...

    win2008 服务器上传限制简述

    修改文件在 C:\Windows\System32\inetsrv\config\schema\目录下的 IIS_schema.xml文件 用notepad打开修改相关参数即可(修改的时候注意权限) 要修改的值是 代码如下: &lt;attribute name=”maxAllowedContentLength...

    spring,boot,模板.docx

    &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    简述springboot及springboot cloud环境搭建

    &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    5分钟熟悉Maven之中文版官方文档翻译

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt; &lt;modelVersion&gt;4.0.0 &lt;groupId&gt;...

    spring装配bean的3种方式总结

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"&gt; ``...

Global site tag (gtag.js) - Google Analytics