schema约束 约束 schema约束location为什么同一个文件要写两个地址

新建一个XML Schema文件
   
新建一个XML Schema文件
要在XMLSpy 2005中新建XML Schema文件,首先您必须启动XMLSpy 2005,然后新建一个XML Schema(.xsd)文档。
启动XMLSpy 2005 要启动XMLSpy 2005,您可以双击桌面上的XMLSpy 2005图标,或者在开始 | 所有程序菜单中选择XMLSpy 2005程序。XMLSpy 2005启动后处于无打开文档的状态。 您可以看到用户界面的三个主要部分:(i)左侧的Project和Info窗口;(ii)中间的主窗口(目前为空);和(iii)右侧的输入助手窗口。
新建一个XML Schema文件 您可以通过以下步骤来新建一个XML Schema文件:
&<span style="font-family:Helvetica,A font-size:10 color:#.选择菜单项File | New,此时将出现&Create new document(创建新文档)&对话框。 && &&<span style="font-family:Helvetica,A font-size:10 color:#.在该对话框中选择xsd&#xA0;XML&#xA0;Schema,然后点击OK确认。此时主窗口中将出现一个以Schema/WSDL设计视图打开的空schema文件。注:Schema/WSDL设计视图本身有两种显示方式:Schema概要视图(Schema Overview) && 为整个schema提供一个关于所有全局成分的概要;以及内容模型视图(Content Model View) && 为各个全局成分提供内容模型视图。在新建XML Schema文件时,Schema/WSDL视图将以Schema概要视图打开。您会被提示输入根元素(root element)的名称。
<span style="font-family:Helvetica,A font-size:10 color:#.点击加亮的字段,并输入Company。然后以回车键确认。现在该schema的根元素为Company,它是一个全局元素(global element)[译注//全局元素、全局属性是XML Schema中的术语,指的是那些在schema元素下声明的元素和属性。由于这些元素和属性可在XML Schema中的别处被引用,因此被称作全局元素/属性。]。您在主窗口中所看到的视图(屏幕截图如下)被称为Schema概要视图(Schema Overview)。它为该schema提供了一个概要:上方窗格(pane)中列出了所有的全局成分;下方窗格中显示所选全局成分的属性(attribute)及唯一性约束(identity constraint)。(只需点击全局成分左侧的图标即可对该全局成分的内容模型进行查看和编辑。) &
<span style="font-family:Helvetica,A font-size:10 color:#.在Company元素的Annotations字段[译注//即Company右边那个以ann:开头的字段]中输入对该元素的描述,比如这里我们输入Root&#xA0;element。&<span style="font-family:Helvetica,A font-size:10 color:#.点击菜单项File | Save以保存该XML Schema文件,文件名可以自行选择(比如用AddressFirst.xsd)。 &
&#xA0; &#xA0;
&#xA9; 2004 本文档由Collin Hsu翻译。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&IBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
新的 XML Schema 系统即将成为 W3C 推荐标准,目的是为了克服 DTD 的局限性(请参阅侧栏, DTD 的局限性 ),为 XML 文档提供丰富的语法结构。本文展示了模式的灵活性,说明如何使用 XML Schema 系统来定义最基本的 XML 文档构造块——元素。
, 总裁兼首席技术官, AvantSoft, Inc.
Ashvin Radiya 是
的创始人和总裁。作为首席技术官,他领导开发并推出了最新 Java 编程及相关技术的 AvantSoft 培训课程。他还建立和管理与财富 100 强的战略伙伴关系。Ashvin 有丰富的企业、学院和专业人员经历。他曾在奥斯汀的 IBM 工作,研究基于 CORBA 的高级分布式面向对象产品。在移动商务、XML、Java、Enterprise JavaBeans 组件、InfoBus、安全、CORBA 和分布式面向对象编程方面,他拥有丰富的知识和经验。Ashvin 从锡拉丘兹大学获得了计算机科学博士学位。可以通过
与 Ashvin Radiya 联系。
(), 首席执行官, AvantSoft, Inc.
Vibha Dixit 在
Inc. 的 Business Development Manager and Technologist 中担任重要职务。她负责业务规划、管理战略伙伴、开发新的客户、营销和市场。她还积极参与 AvantSoft 技术目标的制定,确定移动商务、XML 和 Java 技术领域的发展方向。Vibha 在商业管理方面有独到的经验,在计算机技术方面也有丰富的行业经验。在加入 AvantSoft 之前,她曾在 IBM Santa Teresa 实验室工作,从事分布式交互对象中间件的研究。在俄亥俄超级计算机中心,她参与了一个微型计算机操作系统的设计与开发。Vibha 从俄亥俄州立大学获得了计算机科学博士学位。她还从 Southern Methodist University 修完了 MBA 高级管理人员课程。可以通过
与 Vibha Dixit 联系。
XML Schema 比 DTD 更强大。为了说明 XML Schema 机制的强大功能,下面三个程序清单简要比较了表示元素的不同方式。
给出了一个 XML 文档片段,
用 DTD 语法声明了这两个元素,
则是相应的 XML Schema 语法形式。要注意,
中所用的是相同的 XML 语法。通过模式,验证解析器可以检查元素
InvoiceNo 是否是正整数,元素
ProductID 的首字符是否为 A 到 Z 之间的字母,后面为六个阿拉伯数字。相反,引用 DTD 的验证解析器只能检查这些元素是否用字符串表示。
清单 1:XML 文档片段&InvoiceNo&&/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 使用名称空间区分这些定义。一个给定的 XML Schema 定义了一组新名字,如元素名、类型名、属性名、属性组名,这些名字的定义和声明都写在模式中。
定义的名字包括
InvoiceNo 、
ProductID 和
ProductCode 。
我们说模式中定义的名字属于它的
目标名称空间。名称空间本身有一个固定但没有限制的名字,必须符合 URL 语法。比如,对于
中模式片段,您可以把名称空间的名字设为:
/Account 。
名称空间的名字语法容易让人混淆,尽管以
http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL
/Account 根本没有指向任何文件,只是一个分配的名字。
模式中的定义和声明可能引用属于其他名称空间的名字。在本文中,我们称这些名称空间为
源名称空间。每个模式都有一个目标名称空间,但可能有多个源名称空间。名称空间的名字可能相当长,但在 XML 文档中通过
xmlns 声明可使用简写形式。为了说明这些概念,我们可以向前述
中的示例模式中添加更多的内容。
清单 4:目标名称空间和源名称空间&!--XML Schema fragment in file schema1.xsd--&&xsd:schema targetNamespace='/Account'
xmlns:xsd='http://www.w3.org/1999/XMLSchema'
xmlns:ACC= '/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&在
的 XML Schema 中,
targetNamespace 的名字是
/Account ,其中包含的名字有
InvoiceNo 、
ProductID 和
ProductCode 。
element 、
simpleType 、
pattern 、
positive-integer 这些名字属于源名称空间
http://www.w3.org/1999/XMLSchema ,通过
xmlns 声明缩写为
xsd 。别名
xsd 没有任何特殊的地方,我们可以选择任何其他的名字。在本文后面的部分为了方便和简化起见,我们使用
xsd 代表名称空间
http://www.w3.org/1999/XMLSchema ,在一些代码片段中省略了限定符
xsd 。在这个例子中,
targetNamespace 偶尔也作为一个源名称空间,因为要使用名字
ProductCode 定义其他的名字。
图 1:清单 4 中的名称空间中的模式片段不需要指定源模式文件的位置。对于整个“模式的模式”,
http://www.w3.org/1999/XMLSchema ,不需要指定位置,因为它的位置是人所共知的。对于源名称空间
/Account ,也不需要指定位置,因为它恰好是该文件中定义的目标名称空间。为了更好地理解如何指定模式的位置和使用默认名称空间,看一看
中扩展的例子。
清单 5:多个源名称空间,导入一个名称空间&!--XML Schema fragment in file schema1.xsd--&
&schema targetNamespace='/Account'
xmlns='http://www.w3.org/1999/XMLSchema'
xmlns:ACC= '/Account'
xmlns:PART= '/PartsCatalog'&
&import namespace='/PartsCatalog'
schemaLocation='http://www.ProductStandards.org/repository/alpha.xsd'/&
&element name='InvoiceNo' type='positive-integer'/&
&element name='ProductID' type='ACC:ProductCode'/&
&simpleType name='ProductCode' base='string'&
&pattern value='[A-Z]{1}d{6}'/&
&/simpleType&
&element name='stickyGlue' type='PART:SuperGlueType'/&中多了一个名称空间引用:
/PartsCatalog 。这个名称空间不同于
targetNamespace 和标准名称空间。因此必须使用
import 声明元素引入,该元素的
schemaLocation 属性指明包含模式的文件位置。默认的名称空间是
http://www.w3.org/1999/XMLSchema ,它的
xmlns 声明没有名字。每个非限定的名字如
element ,都属于默认名称空间
http://www.w3.org/1999/XMLSchema 。如果模式从一个名称空间中引用了多个名字,将其指定为默认名字空间更方便。
一个 XML 实例文档可能引用多个名称空间的元素名,这些名称空间定义在不同模式中。为了引用和简化名称空间的名字,同样要使用
xmlns 声明。我们使用 XML Schema 实例名称空间的
schemaLocation 属性指定文件的位置。要注意,该属性不同于上一个例子中
xsd 名称空间的同名属性
schemaLocation 。
清单 6:使用来自多个模式的多个名称空间的名字&?xml version="1.0"?&
&ACC:rootElement xmlns:ACC='/Account'
xmlns:PART='/PartsCatalog'
xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance'
xsi:schemaLocation='/PartsCatalog
http://www.ProductStandards.org/repository/alpha.xsd
/repository/schema1.xsd'&
&ACC:InvoiceNo&&/ACC:InvoiceNo&图 2:清单 5 和清单 6 的名称空间定义元素
定义元素就是定义元素的名字和内容模型。在 XML Schema 中,元素的内容模型由其类型定义,因此 XML 文档中实例元素的值必须符合模式中定义的类型。类型包括简单类型和复杂类型。简单类型的值不能包含元素或属性。复杂类型可以产生在其他元素中嵌套元素的效果,或者为元素增加属性。(到目前为止本文中的例子都是用户定义的简单类型,比如
ProductCode )。XML Schema 规范也包括预定义的简单类型(请参阅侧栏
派生的简单类型约束了基类型的值。比如,派生简单类型
ProductCode 的值是基类型
string 值的子集。
简单的、非嵌套的元素是简单类型
不含属性或其他元素的元素可以定义为简单类型,无论是预定义的简单类型还是用户定义的简单类型,如
integer 、
decimal 、
ProductCode 等等。
清单 7:一些元素的简单类型&element name='age' type='integer'/&
&element name='price' type='decimal'/&带有属性的元素必须是复杂类型
现在,试着向
中的简单元素
price 增加属性
currency 。您不能这样做,因为简单类型的元素不能有属性。如果希望增加属性,您必须把
price 元素定义成复杂类型。在
的例子中,我们定义了一个
匿名类型,没有明确地命名这个复杂类型。换句话说,没有定义复杂类型
complexType 的
name 属性。
清单 8:一个复杂元素类型&element name='price'&
&complexType base='decimal' derivedBy='extension'&
&attribute name='currency' type='string'/&
&/complexType&
&/element&
&!-- In XML instance document, we can write: &price currency='US'&45.50&/price& --&嵌入其他元素的元素必须是复杂类型
在 XML 文档中,一个元素可能嵌入其他的元素。这种要求可以在 DTD 中直接表示。但 XML Schema 定义一个元素,这个元素有一个类型,而这个类型可以包含其他元素和属性的声明。
给出了一个简单的例子。
表 1:DTD 和 XML Schema 中复杂数据类型的比较XML 文档&Book&
&Title&Cool XML&Title&
&Author&Cool Guy&/Author&
&/Book&DTD&Book&
&Title&Cool XML&Title&
&Author&Cool Guy&/Author&
&/Book&XML Schema&Book&
&Title&Cool XML&Title&
&Author&Cool Guy&/Author&
&/Book&&!ELEMENT Book (Title, Author)&
&!ELEMENT Title (#PCDATA)&
&!ELEMENT Author (#PCDATA)&&element name='Book' type='BookType'/&
&complexType name='BookType'&
&element name='Title' type='string'/&
&element name='Author' type='string'/&
&/complexType&尽管
中的 XML 代码同时满足 DTD 与 XML Schema 片段,但两者之间有一个很大的区别。在
DTD 中所有的元素都是全局性的,而表中的 XML Schema 允许把
Author 定义成局部的——只出现在元素
Book 中。为了在 XML Schema 中实现与 DTD 声明完全相同的效果,元素
Author 必须是全局范围的,如
中所示。元素
element 的
ref 属性使您能够引用前面声明的元素。
清单 9:用全局简单类型定义的复杂类型&element name='Title' type='string'/&
&element name='Author' type='string'/&
&element name='Book' type='BookType'/&
&complexType name='BookType'&
&element ref='Title'/&
&element ref='Author'/&
&/complexType&在
所示的例子中,
BookType 是全局性的,可用于声明其他元素。相反,
将该类型局部地定义到元素
Book 中,而且定义成匿名元素。要注意,
中的 XML 文档片段与表 1、
中三个模式片段都匹配。
清单 10:隐藏 BookType 作为本地类型&element name='Title' type='string'/&
&element name='Author' type='string'/&
&element name='Book'&
&complexType&
&element ref='Title'/&
&element ref='Author'/&
&/complexType&
&/element&表示元素的复杂约束
对于表示元素内容模型的约束,XML Schema 比 DTD 提供了更大的灵活性。在最简单的层次上,像在 DTD 中那样,您可以把属性和元素声明关联起来,指明能够出现的给定元素集合序列:只能出现 1 次(1)、出现 0 次或多次(*)或者出现 1 次或多次(+)。您还可以表示 XML Schema 中的其他约束,比方说使用
element 元素的
minOccurs 和
maxOccurs 属性,以及
all 元素。
清单 11:表示元素类型的约束&element name='Title' type='string'/&
&element name='Author' type='string'/&
&element name='Book'&
&complexType&
&element ref='Title' minOccurs='0'/&
&element ref='Author' maxOccurs='2'/&
&/complexType&
&/element&在
Title 的出现是可选的(类似 DTD 的 '?')。但是,
Book 元素中至少要有一个但不能超过两个作者。
element 的
minOccurs 和
maxOccurs 属性的默认值是 1。元素
choice 只允许它的一个子女出现在实例中。另外一个元素
all ,表示这样的约束:组中的所有子元素可以同时出现一次,或者都不出现,它们可以按任意的顺序出现。
Author 两者必须同时出现(顺序任意)在
Book 中,或者都不出现。这种约束很难在 DTD 中表示。
清单 12:指出必须为元素定义所有的类型&xsd:element name='Title' type='string'/&
&xsd:element name='Author' type='string'/&
&xsd:element name='Book'&
&xsd:complexType&
&xsd:element ref='Tile'/&
&xsd:element ref='Author'/&
&/xsd:all&
&/xsd:complexType&
&/xsd:element&更上层楼
我们已经讨论了在 XML Schema 中定义元素所需的最基本的概念,通过一些简单的例子使您领略到它的强大功能。还有一些更强大的机制:XML Schema 对类型继承提供了广泛的支持,允许重用以前定义的结构。使用所谓的
facets,您可以派生新的类型,表示其他某个类型值的更小子集,比如通过枚举、范围或模式匹配来定义子集。在本文的例子中,
ProductCode 类型就是使用模式面(
pattern facet)定义的。子类型也可以向基类型增加更多的元素和属性声明。
有几种机制控制能否定义子类型,或者能否在具体的文档中替换为子类型。比如,有可能表示
InvoiceType ( Invoice 编号的类型)不允许子类型化,任何人都不能定义新版本的
InvoiceType 。通过规定在特定的上下文中不能用
ProductCode 类型的子类型替换,也能表达这种约束。
除了子类型外,还可以定义等价的类型,这样,一个类型的值可以用另一个类型代替。通过声明抽象的元素或者类型,XML Schema 提供了一种强制替换机制。为了方便起见,可以定义并命名属性组和元素组,从而能够在后面引用这些组达到重用的目的。XML Schema 提供了三个元素——
appInfo 、
documentation 和
annotation ——为模式作注解,以方便读者(
documentation )和应用程序(
appInfo )。
基于子元素的某些属性可以表示惟一性约束。可以通过 W3C 站点(请参阅
)的文档进一步研究 XML Schema,或者访问 dW XML 专区了解更多的内容。目前,XML Schema 规范已经被批准,并成为候选推荐标准(Candidate Recommendation),毫无疑问您将越来越多地用到它。
参考资料 您可以参阅本文在 developerWorks 全球站点上的
,可以免费获得爱丁堡大学/W3C 的 XSV(alpha 版),这是一个 XML Schema Validator。
免费下载 Apache 项目的
Extensibility 的商业软件
的评估版。
下载免费工具。
最新 XML Schema 规范的背景资料:
目前的 W3C XML Schema 规范文档由两部组成:
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
免费下载、试用软件产品,构建应用并提升技能。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=XMLArticleID=52807ArticleTitle=使用 XML Schema 定义元素的基本知识publish-date=XML Schema约束_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
XML Schema约束
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&

我要回帖

更多关于 xml schema 的文章

 

随机推荐