posts - 56,  comments - 12,  trackbacks - 0

基本的 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 ='[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 ='[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 下进行寻找。
  
  
  
  到此为止,你应该对名字空间有了一个比较感性的理解。
posted on 2007-01-19 00:11 苦笑枯 阅读(228) 评论(0)  编辑  收藏 所属分类: Xml

只有注册用户登录后才能发表评论。


网站导航:
 
收藏来自互联网,仅供学习。若有侵权,请与我联系!

<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(2)

随笔分类(56)

随笔档案(56)

搜索

  •  

最新评论

阅读排行榜

评论排行榜