分享
 
 
 

关于Schema的名字空间(namespace)

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

基本的XML Schema的使用就是这样,下面我们要介绍XML Schema的另外一个核心的部分也是Schema最关键的一个部分,就是关于Schema的名字空间(namespace)的问题。在上面关于XML Schema的介绍中,为了把读者集中到对XML Schema的语法理解上,特意省略了关于名字空间(namespace)的介绍。

首先我们还是从简单的例子着手,见下面的一段代码:

<xsd:schema targetNamespace='http://www.SampleStore.com/Account'

xmlns:xsd='http://www.w3.org/2000/08/xmlSchema'

xmlns:ACC= 'http://www.SampleStore.com/Account'>

<xsd:element name='订单号码' type='xsd:positiveInteger'/>

<xsd:element name='商品编号' type='ACC:商品编号类型'/>

<xsd:simpleType name='商品编号类型' base='xsd:string'>

<xsd:pattern value='[A-Z]{1}d{6}'/>

<!-上面的一行代码表示商品编码的第一个字符应该为字母,后面跟六个阿拉伯数字 -->

</xsd:simpleType>

现在大家需要把注意力集中到开头几行的代码上来,如下:

<xsd:schema targetNamespace='http://www.SampleStore.com/Account'

xmlns:xsd='http://www.w3.org/2000/08/xmlSchema'

xmlns:ACC= 'http://www.SampleStore.com/Account'>

实际上,一个给定的XML Schema定义了一系列的元素名称,类型名称,属性名称和属性组名称。比如上面的代码中的订单号码、商品编号、商品编号类型等。而这些名称都有它一定的作用范围,类似于C++中的局部变量的概念。而它们的作用范围是什么呢?就是在他们的目标名字空间(target namespace)中是有效的,在上面的代码中,我们可以看到它的目标名字空间为http://www.SampleStore.com/Account。

需要注意的是,目标名字空间的命名必须遵守URL的语义。同时需要注意的是,该目标名字空间并不是指一个具体的文件,仅仅是给它一个名字而已。实际上,在Schema中的定义和声明也可以引用其他的名字空间,我们可以把这种名字空间取名为源名字空间(source namespaces)。每一个Schema必须有一个目标名字空间,但是可以有多个源名字空间。

实际上,在一个给定的Schema中,每一个名称都是属于一个特定的名字空间的。名字空间的名称可能会很长(比如http://www.SampleStore.com/Account),但是它们可以用在XML Schema中的语义xmlns来进行简化。在上面的例子中,我们用xsd(取名为xsd是任意的,比如你可以取名为kkk,tt,ppp,gh都可以)来表示名字空间'http://www.w3.org/2000/08/xmlSchema',用ACC来表示名字空间http://www.SampleStore.com/Account。同时我们把http://www.w3.org/2000/08/xmlSchema这个名字空间称为标准名字空间(standard namespace),因为它是定义Schema语法的标准地。

在上面的代码中,目标名字空间(targetNamespace)包含了名字订单号码、商品编号、商品编号类型。而名字schema,element,simpleType,pattern,string和positiveInteger是属于标准名字空间http://www.w3.org/2000/08/xmlSchema的。也就是说,它们的意义是在http://www.w3.org/2000/08/xmlSchema中进行定义的。实际上,所有标准的XML Schmea 语法、语义和数据结构都在http://www.w3.org/2000/08/xmlSchema中进行定义。这样解析器碰到一个名称(如schema,element等等)的时候,就知道应该在哪里去得到关于它的正确的语义的使用方法。

对于标准名字空间和目标名字空间,我们不需要指定它的SchemaLocation。因为对于目标名字空间来讲,SchemaLocation就是文档自己。对于标准名字空间来讲,它是众所周知的,也不需要指定。而对于源目标空间来讲,就需要指定它的SchemaLocation。见下面的例子:

<schema targetNamespace='http://www.SampleStore.com/Account'

xmlns='http://www.w3.org/1999/xmlSchema'

xmlns:ACC= 'http://www.SampleStore.com/Account'

xmlns:PART= 'http://www.PartnerStore.com/PartsCatalog'>

<import namespace='http://www.PartnerStore.com/PartsCatalog'

schemaLocation='http://www.ProductStandards.org/repository/alpha.xsd'/>

<element name='订单号码' type='positiveInteger'/>

<element name='商品编号' type='ACC: 商品编号类型'/>

<simpleType name='商品编号类型' base='string'>

<pattern value='[A-Z]{1}d{6}'/>

</simpleType>

<element name='手表' type='PART:手表类型'/>

在谈关于源目标空间的schemaLocation之前,我们先看一下这行代码:

xmlns='http://www.w3.org/1999/xmlSchema'

它表示什么呢?它表示在文档中所有的名字前面如果没有前缀的,就是由http://www.w3.org/1999/xmlSchema进行定义和解析的。这样无疑是很合理的。因为事实上,我们XML Schema中的很多名称(比如schema,element,simpleType,pattern等等)都是来自这个标准名字空间的,反复往前面加前缀,你烦不烦呀?所以干脆把它定义成默认的,所以如果一个名称前面没有前缀,就认定它是由http://www.w3.org/1999/xmlSchema进行处理的。

好,接下来我们来注意

<import namespace='http://www.PartnerStore.com/PartsCatalog'

schemaLocation='http://www.ProductStandards.org/repository/alpha.xsd'/>

这段代码,因为http://www.PartnerStore.com/PartsCatalog是一个源名字空间,所以必须指定它的schemaLocation,采用关键字import来引入这个schemaLocation。

注意到下面这行代码

<element name='手表' type='PART:手表类型'/>

它表示元素手表的类型(type)手表类型是在http://www.PartnerStore.com/PartsCatalog中进行定义的。解析器如果要寻找关于手表类型的定义,需要在名字空间http://www.PartnerStore.com/PartsCatalog下进行寻找。

到此为止,你应该对名字空间有了一个比较感性的理解。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有