关于Schema的名字空间

2016-02-19 12:50 8 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐关于Schema的名字空间,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - Web开发 】

基本的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语法的标准地

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

在上面的代码中,目标名字空间(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'
 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)     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下进行寻找。
  
  
    到此为止,你应该对名字空间有了一个比较感性的理解。
  

来源:http://www.tulaoshi.com/n/20160219/1602105.html

延伸阅读
在名字空间中声明类和成员函数 赵湘宁     虽然很多程序员都熟悉名字空间的概念,但他们常常都是被动地使用名字空间。也就是说他们使用的是第三方定义的成员(如标准库的类和函数),而不是在名字空间中声明自己的类和函数。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。 ...
标签: Web开发
列表类型   除了使用简单类型中描述的原子类型(这些原子类型可用于组合成绝大多数的其它类型,包括其它的简单类型和复合类型)外,XML Schema中在简单类型范畴中还有列表类型(List Type)的概念。原子类型、列表类型以及联合类型,总称为简单类型。一个原子类型的值在XML Schema中是不可分割的。举例来说,NMTOKEN值US是不可分割的,US的任...
标签: Web开发
你现在应该知道XML只说明数据的结构而并不关心数据是如何具体描述的、数据是否正确。XML文档的强制性结构化需求是通过DTD(文档类型说明)来实现的。那就是本系列文章中先前讲述的主题。在本文里,我们概要介绍DTD所存在的缺点,讨论新型的更为强大的标准XML Schema。     其他文章   以下是本系列的另两篇文...
标签: Web开发
 XML Schema是2001年5月正式发布的W3C(万维网联盟)的推荐标准,经过数年的大规模讨论和开发如今终于奠定下来,成为全球公认的XML环境下首选的数据建模工具。   由于XML是SGML(标准通用标示语言)的一个子集,它也继承了SGML用于建模的DTD。使用DTD的好处是可以利用大量现有的DTD工具,使得开发应用代价维持在一个相对较低的水平。然而...
标签: Web开发
以前从来没有用过 schema, 这次希望能给我的 xml 文件加上 namespace, schema, 然后用 xslt 转换成 html, 没想到花了不少功夫。现在我把工作正常的结果记录下来,希望对大家有些帮助。 先来看看我的 xml 文件。打算用来定义网页的菜单。 ?xml version="1.0" encoding="GB2312"?menu_itemsmenu_item href="...

经验教程

960

收藏

82
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部