使用 XML Schema 定义元素的基本知识
   
内容:
在 XML Schema 中使用名称空间
定义元素
表示元素的复杂约束
更上层楼
参考资料
作者简介
对本文的评价
订阅:
developerWorks 时事通讯

XML Schema 比 DTD 更强大。为了说明 XML Schema 机制的强大功能,下面三个程序清单简要比较了表示元素的不同方式。 清单 1给出了一个 XML 文档片段, 清单 2用 DTD 语法声明了这两个元素, 清单 3则是相应的 XML Schema 语法形式。要注意, 清单 3中所用的是相同的 XML 语法。通过模式,验证解析器可以检查元素 InvoiceNo 是否是正整数,元素 ProductID 的首字符是否为 A 到 Z 之间的字母,后面为六个阿拉伯数字。相反,引用 DTD 的验证解析器只能检查这些元素是否用字符串表示。

清单 1:XML 文档片段

 <InvoiceNo>123456789</InvoiceNo> <ProductID>J123456</ProductID>

清单 2:描述清单 1 中元素的 DTD 片段

 <!ELEMENT InvoiceNo (#PCDATA)> <!ELEMENT ProductID (#PCDATA)>

清单 3:描述清单 1 中元素的 XML Schema

 <element name='InvoiceNo' type='positive-integer'/> <element name='ProductID' type='ProductCode'/> <simpleType name='ProductCode' base='string'> <pattern value='[A-Z]{1}d{6}'/> </simpleType>

在 XML Schema 中使用名称空间
在这个协作的世界中,一个人可能处理来自多个其他团体的文档,而不同的团体可能希望以不同的方式表示他们的数据元素。此外,他们还可能在一个文档中引用不同团体创建的同名元素。如何区分相同名字的不同定义呢?XML Schema 使用名称空间区分这些定义。

DTD 的局限性
尽管作为描述结构化信息的一种机制,DTD 成功地为 SGML 和 HTML 开发人员服务了 20 年,但与 XML Schema 相比,它存在着严重的局限性。

DTD 要求元素由以下三种成分组成:

  • 文本字符串
  • 文本字符串与其他子元素的混合
  • 一组子元素

DTD 不使用 XML 语法,对类型和名称空间仅提供有限的支持。

一个给定的 XML Schema 定义了一组新名字,如元素名、类型名、属性名、属性组名,这些名字的定义和声明都写在模式中。 清单 3定义的名字包括 InvoiceNoProductIDProductCode

我们说模式中定义的名字属于它的 目标名称空间。名称空间本身有一个固定但没有限制的名字,必须符合 URL 语法。比如,对于 清单 3中模式片段,您可以把名称空间的名字设为: http://www.SampleStore.com/Account

名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL http://www.SampleStore.com/Account 根本没有指向任何文件,只是一个分配的名字。

模式中的定义和声明可能引用属于其他名称空间的名字。在本文中,我们称这些名称空间为 源名称空间。每个模式都有一个目标名称空间,但可能有多个源名称空间。名称空间的名字可能相当长,但在 XML 文档中通过 xmlns 声明可使用简写形式。为了说明这些概念,我们可以向前述 清单 4中的示例模式中添加更多的内容。

清单 4:目标名称空间和源名称空间

 <!--XML Schema fragment in file schema1.xsd-->
 <xsd:schema targetNamespace='http://www.SampleStore.com/Account' xmlns:xsd='http://www.w3.org/1999/XMLSchema' xmlns:ACC= 'http://www.SampleStore.com/Account'> <xsd:element name='InvoiceNo' type='xsd:positive-integer'/> <xsd:element name='ProductID' type='ACC:ProductCode'/> <xsd:simpleType name='ProductCode' base='xsd:string'> <xsd:pattern value='[A-Z]{1}d{6}'/> </xsd:simpleType>

在 清单 4的 XML Schema 中, targetNamespace 的名字是 http://www.SampleStore.com/Account ,其中包含的名字有 InvoiceNoProductIDProductCodeschemaelementsimpleTypepatternstringpositive-integer 这些名字属于源名称空间 http://www.w3.org/1999/XMLSchema ,通过 xmlns 声明缩写为 xsd 。别名 xsd 没有任何特殊的地方,我们可以选择任何其他的名字。在本文后面的部分为了方便和简化起见,我们使用 xsd 代表名称空间 http://www.w3.org/1999/XMLSchema ,在一些代码片段中省略了限定符 xsd 。在这个例子中, targetNamespace 偶尔也作为一个源名称空间,因为要使用名字 ProductCode 定义其他的名字。

图 1:清单 4 中的名称空间

清单 4中的模式片段不需要指定源模式文件的位置。对于整个“模式的模式”, http://www.w3.org/1999/XMLSchema ,不需要指定位置,因为它的位置是人所共知的。对于源名称空间 http://www.SampleStore.com/Account ,也不需要指定位置,因为它恰好是该文件中定义的目标名称空间。为了更好地理解如何指定模式的位置和使用默认名称空间,看一看 清单 5中扩展的例子。

清单 5:多个源名称空间,导入一个名称空间

 <!--XML Schema fragment in file schema1.xsd--> <schema targetNamespace='http://www.SampleStore.com/Account' xmlns='http://www.w3.org/1999/XMLSchema'                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

清单 5中多了一个名称空间引用: http://www.PartnerStore.com/PartsCatalog 。这个名称空间不同于 targetNamespace 和标准名称空间。因此必须使用 import 声明元素引入,该元素的 schemaLocation 属性指明包含模式的文件位置。默认的名称空间是 http://www.w3.org/1999/XMLSchema ,它的 xmlns 声明没有名字。每个非限定的名字如 schemaelement ,都属于默认名称空间 http://www.w3.org/1999/XMLSchema 。如果模式从一个名称空间中引用了多个名字,将其指定为默认名字空间更方便。

一个 XML 实例文档可能引用多个名称空间的元素名,这些名称空间定义在不同模式中。为了引用和简化名称空间的名字,同样要使用 xmlns 声明。我们使用 XML Schema 实例名称空间的 schemaLocation 属性指定文件的位置。要注意,该属性不同于上一个例子中 xsd 名称空间的同名属性 schemaLocation

清单 6:使用来自多个模式的多个名称空间的名字

 <?xml version="1.0"?> <ACC:rootElement xmlns:ACC='http://www.SampleStore.com/Account' xmlns:PART='http://www.PartnerStore.com/PartsCatalog' xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance' xsi:schemaLocation='http://www.PartnerStore.com/PartsCatalog http://www.ProductStandards.org/repository/alpha.xsd http://www.SampleStore.com/Account http://www.SampleStore.com/repository/schema1.xsd'> <ACC:InvoiceNo>123456789</ACC:InvoiceNo>

图 2:清单 5 和清单 6 的名称空间

转载于:https://www.cnblogs.com/shengel/archive/2008/10/18/1314275.html

使用 XML Schema 定义元素的基本知识--1相关推荐

  1. 使用 XML Schema 定义元素的基本知识

    新的 XML Schema 系统即将成为 W3C 推荐标准,目的是为了克服 DTD 的局限性(请参阅侧栏, DTD 的局限性 ),为 XML 文档提供丰富的语法结构.本文展示了模式的灵活性,说明如何使 ...

  2. XML Schema用法

    你现在应该知道XML只说明数据的结构而并不关心数据是如何具体描述的.数据是否正确.XML文档的强制性结构化需求是通过DTD(文档类型说明)来实现的.那就是本系列文章中先前讲述的主题.在本文里,我们概要 ...

  3. XML——XML Schema

    [0]README 0.0)本文文字描述转自 core java volume 2 , 旨在理解 XML--XML Schema 的基础知识 :(本文不涉及源代码, 很遗憾,以后会补充) [1]XML ...

  4. XSD(XML Schema Definition)学习笔记

    今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...

  5. XML Schema帮你建模

    XML Schema是2001年5月正式发布的W3C(万维网联盟)的推荐标准,经过数年的大规模讨论和开发如今终于奠定下来,成为全球公认的XML环境下首选的数据建模工具.      由于XML是SGML ...

  6. 使用W3C XML Schema

    为什么80%的码农都做不了架构师?>>>    W3C XML Schema 定义语言是描述和约束XML文档内容的XML语言,W3C推荐使用W3C XML Schema. 本文介绍了 ...

  7. XML Schema学习

    最近埋头苦读WMFC定义的接口1标准文档,其中对XML格式的定义都使用了XML Schema,由于XML Schema在很多方面都有很大的作用,大有取代DTD的趋势,所以在此写了一些学习笔记,有疏漏的 ...

  8. XML Schema介绍之namespace

    http://www.cnblogs.com/gzhnan/articles/1108442.html http://blog.csdn.net/zhch152/article/details/819 ...

  9. XML Schema全接触 (这里主要介绍W3C的Schema标准语法)

    来源:http://bbs.w3china.org/dispbbs.asp?BoardID=23&ID=27215&ReplyID=22178&skin=1 XML Schem ...

最新文章

  1. lt;二gt;读lt;lt;大话设计模式gt;gt;之策略模式
  2. docker自动化部署
  3. Python日志记录:在配置文件中指定日志格式化程序的转换器属性
  4. java JFrame 设置背景颜色无效的理解
  5. cat查看tomcat日志 linux_linux怎么使用cat命令查看文件? linux中cat命令的使用方法
  6. linux 命令-- touch
  7. LeetCode 834. 树中距离之和(树上DP)*
  8. Java变异出现错误:No enclosing instance of type XXX is accessible
  9. ASP.NET面试题 (转)
  10. MySQL高级知识(十三)——表锁
  11. 查看unix和linux的HBA卡的WWN地址
  12. RescuePRO Deluxe(闪迪数据恢复) v6.0.3.1中文破解版
  13. Could not instantiate the executor. Make sure a planner module is on the classpath
  14. 2018年深圳,武汉房价走势分析
  15. Python一对一题目辅导「PTA 题目讲解·难度系数:基础」
  16. python实现前复权及后复权
  17. 校验日期+时间部分的常用方法
  18. ADI Blackfin DSP处理器-BF533的开发详解58:DSP控制ADXL345三轴加速度传感器的应用(含源码)
  19. 计算机网络复习资料(前六章谢希仁版)
  20. 配置EF Core的DbContext

热门文章

  1. php 截取www后面的目录,php-如何从字符串路径中获取最后一个目录
  2. Linux之文件系统介绍
  3. 超详细的jenkins持续集成工作原理、功能、部署方式等介绍
  4. SAP License:基于成本的获利分析表CE1-CE4
  5. 个人信用报告“数字解读”与妙用
  6. 数据同步Sqoop用法之mysql与Hive导入导出
  7. MySQL高级知识(十)——批量插入数据脚本
  8. 工程监测管理平台、工程数据看板、工程总览、动态模型、数据分析、数据跟踪、建筑工地、数据报表、警点管控、现场记录、观测记录、测点管理、模型管理、文档管理、墙体下沉、成员管理、axure原型、产品原型
  9. Axure高保真智慧消防远程监管系统数据可视化大屏看板+web端高保真大数据分析平台看板+大数据交换配置管理平台大屏动态可视化看板
  10. 最流行的自动化测试工具,总有一款适合你