關於Schema的名字空間

來源:互聯網
上載者:User
名字空間

 

基本的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下進行尋找。
  
  
    到此為止,你應該對名字空間有了一個比較感性的理解。
  



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.