专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »XML教程 » xmlschema:XMLSchema用法 »正文

xmlschema:XMLSchema用法

来源: 发布时间:星期四, 2009年2月12日 浏览:95次 评论:0


作者: Tuesday, April

你现在应该知道XML只介绍说明数据结构而并不关心数据是如何具体描述、数据是否正确XML文档强制性结构化需求是通过DTD(文档类型介绍说明)来实现那就是本系列文章中先前讲述主题在本文里我们概要介绍DTD所存在缺点讨新型更为强大标准XML Schema

DTD麻烦

使用DTD虽然在指定许可元素、需要元素以及给定XML文档中如何组织元素等方面给我们以较大方便但是旦你想针对特定元素施加数据类型就会遇到麻烦了DTD规范标准严格地定义了结构但只支持相对功能较弱内容类型规范标准而对强制性结构化却无计可施比如名为Date 数据如何规定它必须包含有效值呢?

这就要指望XML Schema了XML Schema目前作为建议已经于2001年提交给了W3C 这意味着它最终将成为般用途建议标准假如你对此感兴趣你不妨到W3C网站WebSite找些官方文档和内容介绍的类材料来看看注意其他schema定义也是有包括日本标准RELAX 和微软公司XDR可是XML Schema是唯受到W3C成为建议标准所以我在这篇文章中只对它进行阐述

XML Schema不仅可以让你定义XML文档结构而且还允许你约束文档内容这就区别于DTD了另外个 XML Schema自身就是个XML文档其基于标签语法比DTD中特殊要清楚多了


Schema概述

XML Schema是用套预先规定XML元素和属性创建这些元素和属性定义了文档结构和内容模式相应套精巧规则(这些规则却很有意思用DTD来表示)指定了每个Schema元素或者属性合法用途如果违反这些规则解析器就会拒绝解析你Schema以及任何同它相联系文档

清单A Listing A--catalog schema

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualied\" attributeFormDefault=\"unqualied\">
<xs:complexType name=\"booktype\">
<xs:annotation>
<xs:documentation>Models a single book in a catalog. Includes _disibledevent=><xs:element name=\"title\" type=\"xs:\"/>
<xs:element name=\"genre\" type=\"xs:\"/>
<xs:element name=\"price\" type=\"xs:double\"/>
<xs:element name=\"publish_date\" type=\"xs:date\"/>
<xs:element name=\"description\" type=\"xs:\" minOccurs=\"0\"/>
</xs:sequence>
<xs:attribute name=\"id\" type=\"xs:ID\" use=\"required\"/>
</xs:complexType>

<xs:complexType name=\"catalogtype\">
<xs:annotation>
<xs:documentation>a catalog of _disibledevent=></xs:sequence>
</xs:complexType>

<xs:element name=\"catalog\" type=\"catalogtype\">
<xs:annotation>
<xs:documentation>A collection of books</xs:documentation>
</xs:annotation>
</xs:element>

<xs:element name=\"book\" type=\"booktype\">
<xs:annotation>
<xs:documentation>A single book</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>

清单B Listing B--catalog.xml
<?xml version=\"1.0\"?>
<catalog xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"C:\\Path to schema\\catalog.xsd\">
<book id=\"bk101\">
<author>Gambardella, Matthew</author>
<title>XML Developer\'s Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
<book id=\"bk102\">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.</description>
</book>
<book id=\"bk103\">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a society.</description>


</book>
</catalog>

现在让就让我们来看看清单A中显示XML Schema举例该例对我们以前在清单B中用到图书目录进行了介绍说明清单B有了点小改动:作为根元素catalog现在有了两个新属性它们通过清单A中catalog schema和的关联

你再看catalog schema很快你就会注意到它包含了标准XML头<?xml version = \"1.0\"?>这表示schema自己就是个XML文档而任何schema根元素都必须是schema它有个或者多个介绍说明自己属性在这种情况下schema定义属性(xmlns)会定义名称空间为xs它将用作文档中所有元素根名称空间

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

什么是名称空间
XML把名称空间定义为包装XML元素在起供以后重用方式为了使用XML文档名称空间中定义元素你必须通过xmlns属性声明你希望采用名称空间你还必须为该名称空间定义快捷方式前缀(例如xs:)作为你文档中根元素从而使得名称空间在文档中都可用前缀是用于文档任何导入名称空间元素标识符过程就如同在Visual Basic中给库加索引或者导入模块;C、Java或者.NET下名称空间也具有同样含义

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

我们schema举例中接下来元素是annotation作用是代表同其父元素有关文档annotation可以包含两个子元素的或者是documentation或者是appinfo或者两者都包含进去前者用于可读文档而后者则用来保存供应用处理指令

接下来我们定义了两个主要元素(根元素catalog及其子元素book)它们用在书目文档内后者采用了两个element元素这些元素都包含了定义名字属性和各个元素准许内容在这种情况下catalog元素被定义为catalogtype类型而book元素则被定义为elementtype类型;这两种类型以后还要在schema文档中被定义

什么是类型?

我已经说过了XML Schema可以让你把XML文档中元素声明为特定类型准许解析器检查文档内容及其结构XML Schem定义了两种主要数据类型:预定义简单类型和复杂类型这两种数据类型的间主要区别是复杂类型可以象数据样包含其他元素而简单类型则只能包含数据简单类型给予了XML Schema低级类型检查能力允许你把元素定义为图A中任何类型的

简单类型定义串数据boolean 2元类型True或者Falsedate 历法日期格式是CCYY-MM-DDdateTime历法日期和时间time24小时格式时间可根据时区调节decimal任意精度和位数十进制数eger整数float标准32位浮点数图A XML Schema预定义简单类型

你也可以定义自己简单类型为了更

[1][2]下

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: