关于Schema的名字空间(namespace)(2)
类别: XML教程
在上面的代码中,目标名字空间(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下进行寻找。
到此为止,你应该对名字空间有了一个比较感性的理解。
对于标准名字空间和目标名字空间,我们不需要指定它的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下进行寻找。
到此为止,你应该对名字空间有了一个比较感性的理解。
-= 资 源 教 程 =-
文 章 搜 索