欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

XML中的schema是什么

本篇文章給大家分享的是有關(guān)XML中的schema是什么,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)主營曲陽網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā),曲陽h5重慶小程序開發(fā)公司搭建,曲陽網(wǎng)站營銷推廣歡迎曲陽等地區(qū)企業(yè)咨詢

  經(jīng)過一番艱苦的學(xué)習(xí)和研究,終于將XML的schema的基本原理弄通了!

這是多么的痛的領(lǐng)悟呀!

同一個知識點我至少閱讀了3遍,終于將此脈穴打通!

使用過DTD的人應(yīng)該知道,命名沖突是DTD的一大問題,而Schema里引入了命名空間的概念,就很好的解決了這個問題。具體來看:

   1、聲明名稱空間

   名稱空間聲明的一般形式為:第一部分是一個關(guān)鍵字xmlns:,第二部分是名稱空間的前綴,第三部分是一個等號,第四部分是雙引號,將第五部分的名稱空間標(biāo)識URI包括起來。需要注意的是,名稱空間的前綴不能為xml,因為在XML中這個字符串是保留作特殊用途的。例:
    xmlns:tns="http://www.whtest.com/"    //其中tns為前綴。
    還可以隱式聲明名稱空間,即省略掉冒號和名稱空間前綴。例:
    xmlns="http://www.whtest.com/"   //注意在一個文檔中只能有一個隱式聲明的命名空間

 2、Schema中的命名空間:

  (1)Schema中的全局成分

    全局成分指的是元素xsd:schema的直接子節(jié)點,包括元素聲明、屬性聲明、復(fù)雜/簡單類型定義、組定義、屬性組定義

<span style="font-family: SimSun; font-size: 14px;"><?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.php.cn/”
targetNamespace=“http://www.php.cn/“>
   // Schema的目標(biāo)名稱空間用屬性targetNamespace在根元素上定義。
   //Schema的全局成分被放在名稱空間http://www.php.cn/里。
</span>

 (2)Schema中的非全局成分     有時希望將非全局成分定義在目標(biāo)空間中去,可使用下面方法。

<span style="font-family: SimSun; font-size: 14px;"><?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.php.cn/”
targetNamespace=“http://www.php.cn/“
elementFormDefault=“qualified“></span>

 屬性elementFormDefault的默認(rèn)值是unqualified,也就是規(guī)定了只有全局成分才被定義在目標(biāo)名稱空間中。將elementFormDefault的值賦為qualified,使得目標(biāo)名稱空間包含非全局的元素定義。同樣,使屬性attributeFormDefault的值賦為qualified,可使得目標(biāo)名稱空間包含非全局屬性定義。如下:

<span style="font-family: SimSun; font-size: 14px;"><?xml version=”1.0”>
<xsd:schema xmlns:xsd=”http://www.php.cn/”
targetNamespace=“http://www.php.cn/“
attributeFormDefault=“qualified“></span>

 也可以修改屬性form的值,使得某些非全局成分不包含在名稱空間中。如下:

<xsd:element name=”name” type=”xsd:string” form=”unqualified”/>

  (3)targetNamespace

    xsd文件中定義了一個targetNameSpace后,其內(nèi)部定義的元素,屬性,類型等都屬于該targetNameSpace,其自身或外部xsd文件使用這些元素,屬性等都必須從定義的targetNameSpace中找。

    targetNamespace定義了Schema定義的新元素與屬性的名稱空間。而"http://www.php.cn/"名稱空間則定義了element, attribute, complexType, group, simpleType等元素。

    若自身并不使用重用組件,僅供外部使用的話,則只定義targetNameSpace就可以,不用指定別名。    

  3、XML文檔中命名空間

     在XML中,名稱空間的使用涉及范疇的概念,范疇即名稱空間的覆蓋范圍,它指的是哪些元素和屬性在該名稱空間中,哪些不在該名稱空間中。名稱空間既可以限定整個XML文檔,也可以只針對XML文檔中的一部分。

  (1).名稱空間限定整個XML文檔

<span style="font-family: SimSun; font-size: 14px;"><?xml version=”1.0”?>
<member_details xmlns=”http://www.php.cn/”>
   <name>Tom</name>
   <age>12</age>
   <sex>male</sex>
</member_details></span>

  (2)名稱空間只針對XML文檔中的一部分

<span style="font-family: SimSun; font-size: 14px;"><?xml version=”1.0”?>
<member_details>
   <name xmlns=”http://www.php.cn/”>Tom</name>
   <age>12</age>
   <sex>male</sex>
</member_details></span>

(3)嵌套的命名空間

<span style="font-family: SimSun; font-size: 14px;"><?xml version=”1.0”?>
<member_details xmlns=”http://www.php.cn/”
xmlns:newns=”http://www.php.cn/”>
   <name>Tom</name>
   <age>12</age>
   <newns:sex>male</sex>
</member_details>
//<span style="line-height: 26px;">&nbsp;此例中,除了元素sex被定義在新的名稱空間中外,其余的元素仍然使用原來的名稱空間。</span></span>

(4)schemaLocation

   schemaLocation 屬性引用具有目標(biāo)名稱空間的 XML 架構(gòu)文檔(.xsd)。該xml文件中用到的所有新創(chuàng)的元素、屬性等的.xsd文件都必須在這里聲明。
<xsi:schemaLocation="list of anyURI" >

   其中的anyURI是一個架構(gòu)位置,該架構(gòu)包含限定的(具有名稱空間的架構(gòu))架構(gòu)構(gòu)造。每一對中的第一個 URI 引用是名稱空間名稱,第二個則是描述名稱空間的架構(gòu)的位置。

將具有目標(biāo)名稱空間的架構(gòu)文檔與實例文檔相關(guān)聯(lián)。可以列出多對 URI 引用,每一對都有不同的名稱空間名稱部分。
   根據(jù)萬維網(wǎng)聯(lián)合會 (W3C) XML 架構(gòu)建議,XML 實例文檔可以同時指定 xsi:schemaLocation 和 xsi:noNamespaceSchemaLocation 屬性。此外,還可以多次列出同一個命名空間。

   以下示例顯示如何使用 xsi:schemaLocation 屬性為多個 XML 架構(gòu)文檔提供位置信息。

<span style="font-family: SimSun; font-size: 14px;"><p:Person
   xmlns:p="http://contoso.com/People"
   xmlns:v="http://contoso.com /Vehicles"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation=
     "http://contoso.com/People
      http://www.php.cn/
      http://www.php.cn/
      http://www.php.cn/
      http://www.php.cn/
      http://www.php.cn/">
   <name>John</name>
   <age>28</age>
   <height>59</height>
   ....
</p:Person></span>


     通過上邊的分析,我們可以看到,XML和Schema的命名空間標(biāo)簽使用格式是相同的(這也是Schema相對與DTD的優(yōu)勢),但XML和Schema都有各自的獨特的屬性,這也是由他們不同的功能決定的,Schema主要給XML提供服務(wù),所以會規(guī)定好targetNameSpace來聲明命名空間的名字,而XML需要使用schema的服務(wù),所以需要SchemaLocation來聲明使用的命名空間。

上文把XML和Schema的命名空間的一些相關(guān)內(nèi)容進(jìn)行了詳細(xì)介紹,下面通過例子來具體了解:

   例一:重點理解名稱空間的相關(guān)概念。

   下面的例子是一個XML Schema文件,名為"note.xsd"

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
         <xsd:sequence>
           <xsd:element name="to" type="xs:string"/>
           <xsd:element name="from" type="xs:string"/>
           <xsd:element name="heading" type="xs:string"/>
           <xsd:element name="body" type="xs:string"/>
        </xsd:sequence>
      </xsd:complexType>
</xsd:element>
</xsd:schema>
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
         <xsd:sequence>
           <xsd:element name="to" type="xs:string"/>
           <xsd:element name="from" type="xs:string"/>
           <xsd:element name="heading" type="xs:string"/>
           <xsd:element name="body" type="xs:string"/>
        </xsd:sequence>
      </xsd:complexType>
</xsd:element>
</xsd:schema>


       下面的XML文檔和上文給出的XML Schema相關(guān)聯(lián),名為"note.xml"。并且下文的討論將圍繞這兩個文檔展開。

 <?xml version="1.0"?>
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<?xml version="1.0"?>
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>


           此片段:xmlns:xsd="http://www.php.cn/",表明此schema中使用的元素和數(shù)據(jù)類型來自于"http://www.php.cn/"名稱空間(namespace)。它同樣指出來自于"http://www.php.cn/"名稱空間的元素和數(shù)據(jù)類型必須使用帶"xsd: "前綴。作為名稱空間的標(biāo)識符(在聲明中作為元素或?qū)傩缘那熬Y),你也可以不使用xsd或xsi。這個 xmlns屬性包含了基本的XML schema元素,比如element, attribute, complexType, group, simpleType等。

    對于任何一個XML Schema定義文檔(XSD)都有一個最頂層的schema (XSD)元素。而且該schema (XSD)元素定義必須包含這個名稱空間:http://www.php.cn/。即此名稱空間是由XML模式規(guī)范定義的標(biāo)準(zhǔn)名稱空間-所有XML模式元素必須屬于該名稱空間。
    此片段:targetNamespace="http://www.php.cn/",表明此schema (note, to, from, heading, body)定義的元素來自于"http://www.php.cn/"名稱空間。這個targetNamespace屬性表示了該schema所對應(yīng)的名稱空間的URI。也就是說在引用該Schema的其它文檔(包括自身文檔)中要聲明名稱空間,其URI應(yīng)該是targetNamespace的屬性值。例如在這里因為要用到note.xsd自己定義的擴展數(shù)據(jù)類型(note, to, from, heading, body),所以也聲明了名稱空間xmlns="http://www.php.cn/"。而且該名稱空間是默認(rèn)名稱空間(沒有前綴)。targetNamespace屬性為在模式中顯式創(chuàng)建的所有新類型均聲明了XML名稱空間。

我們再來看由該schema規(guī)定的XML文檔note.xml的開頭將是什么樣子:

 <note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<note xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">

    其中缺省名稱空間聲明xmlns="http://www.php.cn/"就是和剛剛聲明的XML Schema的名稱空間相結(jié)合來規(guī)定該XML文檔。(即該文檔用到了此名稱空間中定義的數(shù)據(jù)) xmlns:xsi="http://www.php.cn/" 是任何XML實例文檔固有的XML模式實例名稱空間,它由XML模式規(guī)范定義。而xsi:schemaLocation="http://www.php.cn/.com note.xsd"則規(guī)定了該名稱空間所對應(yīng)的schema的位置,即在相同路徑的note.xsd文件。

    例二:重點理解Schema文檔使用自身定義類型

   xsd文件中定義了一個targetNameSpace后,其內(nèi)部定義的元素,屬性,類型等都屬于該targetNameSpace,其自身或外部xsd文件使用這些元素,屬性等都必須從定義的targetNameSpace中找。修改一下note.xsd,去除默認(rèn)名稱空間的聲明,并添加一個復(fù)雜類型:

 <?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="stu"/>
  <xsd:complexType name="stu">
  <xsd:sequence>
   <xsd:element name="Name" type="xs:string"/>
   <xsd:element name="Class" type="xs:string"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:schema>

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="stu"/> 
  <xsd:complexType name="stu"> 
  <xsd:sequence> 
   <xsd:element name="Name" type="xs:string"/> 
   <xsd:element name="Class" type="xs:string"/> 
  </xsd:sequence> 
 </xsd:complexType> 
</xsd:schema>


      上述代碼中,復(fù)雜類型stu是找不到的,因為你定義了一個名稱空間"http://www.php.cn/",該復(fù)雜類型存在于"http://www.php.cn/"中,因此應(yīng)該修改代碼如下:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns:student="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="student:stu"/>
  <xsd:complexType name="stu">
  <xsd:sequence>
   <xsd:element name="Name" type="xs:string"/>
   <xsd:element name="Class" type="xs:string"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:schema>

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns:student="http://www.w3schools.com"
elementFormDefault="qualified">
<xsd:element name="note">
      <xsd:complexType>
        <xsd:sequence>
       <xsd:element name="to" type="xs:string"/>
       <xsd:element name="from" type="xs:string"/>
<xsd:element name="heading" type="xs:string"/>
       <xsd:element name="body" type="xs:string"/>
       </xsd:sequence>
      </xsd:complexType>
</xsd:element>
<xsd:element name="Student" type="student:stu"/> 
  <xsd:complexType name="stu"> 
  <xsd:sequence> 
   <xsd:element name="Name" type="xs:string"/> 
   <xsd:element name="Class" type="xs:string"/> 
  </xsd:sequence> 
 </xsd:complexType> 
</xsd:schema>


       若自身并不使用重用組件,僅供外部使用的話,則只定義targetNameSpace就可以,不用指定別名。
       通過上面的例子,我們可以很深刻的理解targetNameSpace。targetNamespace定義了Schema定義的新元素與屬性的名稱空間。而"http://www.php.cn/"名稱空間則定義了element, attribute, complexType, group, simpleType等元素。

  理解了上面的兩個例子,Schema的命名空間的內(nèi)容應(yīng)該就明了了。

以上就是XML中的schema是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前標(biāo)題:XML中的schema是什么
分享地址:http://chinadenli.net/article12/ipscgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷定制開發(fā)品牌網(wǎng)站建設(shè)定制網(wǎng)站網(wǎng)站排名網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)