XML約束——Schema約束

Schema與DTD

  • XML Schema符合XML語法結(jié)構(gòu)。
  • DOM、SAX等XML API很容易解析出XML Schema文檔中的內(nèi)容。
  • XML Schema對名稱空間支持得非常好。
  • XML Schema比XML DTD支持更多的數(shù)據(jù)類型,并支持用戶自定義新的數(shù)據(jù)類型。
  • XML Schema定義約束的能力非常強大,可以對XML實例文檔作出細致的語義限制。
  • XML Schema不能像DTD一樣定義實體

概念

  • XML Schema 文件自身就是一個XML文件,但它的擴展名通常為.xsd
  • 一個XML Schema文檔也必須有一個根結(jié)點,但這個根結(jié)點的名稱為schema
  • 編寫了一個XML Schema約束文檔后,通常需要把這個文件中聲明的元素綁定到一個URI地址上,即把XML Schema文檔聲明的元素綁定到一個名稱空間上,以后XML文件就可以通過這個URI(即名稱空間)來告訴解析引擎,xml文檔中編寫的元素來自哪里,被誰約束。
<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema 
xmlns:xs=“http://www.w3.org/2001/XMLSchema” //標(biāo)準(zhǔn)的名稱空間
targetNamespace=“http://www.cskaoyan.com” //將該schema文檔綁定到http://www.cskaoyan.com名稱空間
elementFormDefault="qualified">
    <xs:element name='書架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='書' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='書名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售價' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

名稱空間

  • 在XML Schema中,每個約束模式文檔都可以被賦以一個唯一的名稱空間,名稱空間用一個唯一的URI(Uniform Resource Identifier,統(tǒng)一資源標(biāo)識符)表示
  • 在Xml文件中書寫標(biāo)簽時,可以通過名稱空間聲明(xmlns),來聲明當(dāng)前編寫的標(biāo)簽來自哪個Schema約束文檔。
<cskaoyan:書架 xmlns:cskaoyan=“http://www.cskaoyan.com”>//使用cskaoyan來指向聲明的名稱便于后面對名稱空間的引用`
`<cskaoyan:書>……</cskaoyan:書>`
`</cskaoyan:書架>
  • 名稱空間以 http:// 開始,此 URL并不指向一個包含模式定義的文件。事實上,這個 URL:http://www.cskaoyan.com 根本沒有指向任何文件,只是一個分配的名字

使用名稱空間引入Schema

為了在一個XML文檔中聲明它所遵循的Schema文件的具體位置,通常需要在Xml文檔中的根結(jié)點中使用schemaLocation屬性來指定,

<cskaoyan:書架 xmlns:cskaoyan="http://www.cskaoyan.com"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation=“http://www.cskaoyan.com book.xsd">

schemaLocation此屬性有兩個值第一個值是需要使用的命名空間。第二個值是供命名空間使用的 XML schema 的位置,兩者之間用空格分隔,在使用schemaLocation屬性時,也需要指定該屬性來自哪個命名空間


使用默認名稱空間

基本格式:xmlns="URI"

<書架 xmlns="http://www.cskaoyan.com/xmlbook/schema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation=“http://www.cskaoyan.com/xmlbook/schema book.xsd">
        <書>
        <書名>做最好的自己</書名>
        <作者>李開復(fù)</作者>
        <售價>28.00元</售價>
        </書>
    <書架>

使用名稱空間引入多個XML Schema文檔

文件清單:xmlbook.xml

<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns="http://www.cskaoyan.com/xmlbook/schema" 
    xmlns:demo="http://www.cskaoyan.com/demo/schema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.cskaoyan.com/xmlbook/schema http://www.cskaoyan.com/xmlbook.xsd http://www.cskaoyan.com/demo/schema  http://www.cskaoyan.com/demo.xsd">
    <書>
        <書名>做最好的自己</書名>
        <作者>李開復(fù)</作者>
        <售價 demo:幣種=”人民幣”>28.00元</售價>
    </書>
</書架>

不使用名稱空間引入XML Schema文檔
<?xml version="1.0" encoding="UTF-8"?>
<書架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="xmlbook.xsd">
    <書>
        <書名>做最好的自己</書名>
        <作者>李開復(fù)</作者>
        <售價>李開復(fù)</售價>
    </書>
</書架>

在XML Schema文檔中聲明名稱空間
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www. cskaoyan.com"
            elementFormDefault="qualified">
<xs:schema>

targetNamespace元素:指定schema文檔中聲明的元素屬于哪個名稱空間
elementFormDefault元素:指定該schema文檔中聲明的根元素及其所有子元素都屬于targetNamespace所指定的名稱空間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容