日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

中國(guó)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2

xmlschema教程

XML Schema 實(shí)例

閱讀 (2132)

XSD 實(shí)例


本節(jié)會(huì)為您演示如何編寫(xiě)一個(gè) XML Schema。您還將學(xué)習(xí)到編寫(xiě) schema 的不同方法。


XML 文檔

讓我們看看這個(gè)名為 "shiporder.xml" 的 XML 文檔:

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
? <orderperson>John Smith</orderperson>
? <shipto>
??? <name>Ola Nordmann</name>
??? <address>Langgt 23</address>
??? <city>4000 Stavanger</city>
??? <country>Norway</country>
? </shipto>
? <item>
??? <title>Empire Burlesque</title>
??? <note>Special Edition</note>
??? <quantity>1</quantity>
??? <price>10.90</price>
? </item>
? <item>
??? <title>Hide your heart</title>
??? <quantity>1</quantity>
??? <price>9.90</price>
? </item>
</shiporder>

上面的XML文檔包括根元素 "shiporder",其中包含必須名為 "orderid" 的屬性。"shiporder" 元素包含三個(gè)不同的子元素:"orderperson"、"shipto" 以及 "item"。"item" 元素出現(xiàn)了兩次,它含有一個(gè) "title"、一個(gè)可選 "note" 元素、一個(gè) "quantity" 以及一個(gè) "price" 元素。

上面這一行 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance",告知XML解析器根據(jù)某個(gè) schema 來(lái)驗(yàn)證此文檔。這一行:xsi:noNamespaceSchemaLocation="shiporder.xsd" 規(guī)定了 schema 的位置(在這里,它與 "shiporder.xml" 處于相同的文件夾)。


創(chuàng)建一個(gè) XML Schema

現(xiàn)在,我們需要為上面這個(gè) XML 文檔創(chuàng)建一個(gè) schema。

我們可以通過(guò)打開(kāi)一個(gè)新的文件來(lái)開(kāi)始,并把這個(gè)文件命名為 "shiporder.xsd"。要?jiǎng)?chuàng)建schema,我們僅僅需要簡(jiǎn)單地遵循 XML 文檔中的結(jié)構(gòu),定義我們所發(fā)現(xiàn)的每個(gè)元素。首先我們開(kāi)始定義一個(gè)標(biāo)準(zhǔn)的 XML 聲明:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

在上面的 schema 中,我們使用了標(biāo)準(zhǔn)的命名空間 (xs),與此命名空間相關(guān)聯(lián)的 URI 是 Schema 的語(yǔ)言定義(Schema language definition),其標(biāo)準(zhǔn)值是 http://www.w3.org/2001/XMLSchema。

接下來(lái),我們需要定義 "shiporder" 元素。此元素?fù)碛幸粋€(gè)屬性,其中包含其他的元素,因此我們將它認(rèn)定為復(fù)合類型。"shiporder" 元素的子元素被 xs:sequence 元素包圍,定義了子元素的次序:

<xs:element name="shiporder">
? <xs:complexType>
??? <xs:sequence>
????? ...
??? </xs:sequence>
? </xs:complexType>
</xs:element>

然后我們需要把 "orderperson" 元素定義為簡(jiǎn)易類型(這是因?yàn)樗话魏螌傩曰蛘咂渌脑兀n愋?(xs:string) 的前綴是由命名空間的前綴規(guī)定的,此命名空間與指示預(yù)定義的 schema 數(shù)據(jù)類型的 XML schema 相關(guān)聯(lián):

<xs:element name="orderperson" type="xs:string"/>

接下來(lái),我需要把兩個(gè)元素定義為復(fù)合類型:"shipto" 和 "item"。我們從定義 "shipto" 元素開(kāi)始:

<xs:element name="shipto">
? <xs:complexType>
??? <xs:sequence>
????? <xs:element name="name" type="xs:string"/>
????? <xs:element name="address" type="xs:string"/>
????? <xs:element name="city" type="xs:string"/>
????? <xs:element name="country" type="xs:string"/>
??? </xs:sequence>
? </xs:complexType>
</xs:element>

通過(guò) schema,我們可使用 maxOccurs 和 minOccurs 屬性來(lái)定義某個(gè)元素可能出現(xiàn)的次數(shù)。maxOccurs 定義某元素出現(xiàn)次數(shù)的最大值,而 minOccurs 則定義某元素出現(xiàn)次數(shù)的最小值。maxOccurs 和 minOccurs 的默認(rèn)值都是 1!

現(xiàn)在,我們可以定義 "item" 元素了。這個(gè)元素可在 "shiporder" 元素內(nèi)部出現(xiàn)多次。這是通過(guò)把 "item" 元素的 maxOccurs 屬性的值設(shè)定為 "unbounded" 來(lái)實(shí)現(xiàn)的,這樣 "item" 元素就可出現(xiàn)創(chuàng)作者所希望的任意多次。請(qǐng)注意,"note" 元素是可選元素。我們已經(jīng)把此元素的 minOccurs 屬性設(shè)定為 0 了:

<xs:element name="item" maxOccurs="unbounded">
? <xs:complexType>
??? <xs:sequence>
????? <xs:element name="title" type="xs:string"/>
????? <xs:element name="note" type="xs:string" minOccurs="0"/>
????? <xs:element name="quantity" type="xs:positiveInteger"/>
????? <xs:element name="price" type="xs:decimal"/>
??? </xs:sequence>
? </xs:complexType>
</xs:element>

現(xiàn)在,我們可以聲明 "shiporder" 元素的屬性了。由于這是一個(gè)必選屬性,我們規(guī)定 use="required"。

注意:此屬性的聲明必須被置于最后:

<xs:attribute name="orderid" type="xs:string" use="required"/>

這是這個(gè)名為 "shiporder.xsd" 的 schema 文件的文檔清單:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
? <xs:complexType>
??? <xs:sequence>
????? <xs:element name="orderperson" type="xs:string"/>
????? <xs:element name="shipto">
??????? <xs:complexType>
????????? <xs:sequence>
??????????? <xs:element name="name" type="xs:string"/>
??????????? <xs:element name="address" type="xs:string"/>
??????????? <xs:element name="city" type="xs:string"/>
??????????? <xs:element name="country" type="xs:string"/>
????????? </xs:sequence>
??????? </xs:complexType>
????? </xs:element>
????? <xs:element name="item" maxOccurs="unbounded">
??????? <xs:complexType>
????????? <xs:sequence>
??????????? <xs:element name="title" type="xs:string"/>
??????????? <xs:element name="note" type="xs:string" minOccurs="0"/>
??????????? <xs:element name="quantity" type="xs:positiveInteger"/>
??????????? <xs:element name="price" type="xs:decimal"/>
????????? </xs:sequence>
??????? </xs:complexType>
????? </xs:element>
??? </xs:sequence>
??? <xs:attribute name="orderid" type="xs:string" use="required"/>
? </xs:complexType>
</xs:element>

</xs:schema>


分割 Schema

前面的設(shè)計(jì)方法非常容易,但當(dāng)文檔很復(fù)雜時(shí)卻難以閱讀和維護(hù)。

接下來(lái)介紹的設(shè)計(jì)方法基于首先對(duì)所有元素和屬性的定義,然后再使用 ref 屬性來(lái)引用它們。

這是用新方法設(shè)計(jì)的 schema 文件("shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<xs:element name="shipto">
? <xs:complexType>
??? <xs:sequence>
????? <xs:element ref="name"/>
????? <xs:element ref="address"/>
????? <xs:element ref="city"/>
????? <xs:element ref="country"/>
??? </xs:sequence>
? </xs:complexType>
</xs:element>

<xs:element name="item">
? <xs:complexType>
??? <xs:sequence>
????? <xs:element ref="title"/>
????? <xs:element ref="note" minOccurs="0"/>
????? <xs:element ref="quantity"/>
????? <xs:element ref="price"/>
??? </xs:sequence>
? </xs:complexType>
</xs:element>

<xs:element name="shiporder">
? <xs:complexType>
??? <xs:sequence>
????? <xs:element ref="orderperson"/>
????? <xs:element ref="shipto"/>
????? <xs:element ref="item" maxOccurs="unbounded"/>
??? </xs:sequence>
??? <xs:attribute ref="orderid" use="required"/>
? </xs:complexType>
</xs:element>

</xs:schema>


使用指定的類型(Named Types)

第三種設(shè)計(jì)方法定義了類或者類型,這樣使我們有能力重復(fù)使用元素的定義。具體的方式是:首先對(duì)簡(jiǎn)易元素和復(fù)合元素進(jìn)行命名,然后通過(guò)元素的 type 屬性來(lái)指向它們

這是利用第三種方法設(shè)計(jì)的 schema 文件 ("shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="stringtype">
? <xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
? <xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
? <xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
? <xs:restriction base="xs:string">
??? <xs:pattern value="[0-9]{6}"/>
? </xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
? <xs:sequence>
??? <xs:element name="name" type="stringtype"/>
??? <xs:element name="address" type="stringtype"/>
??? <xs:element name="city" type="stringtype"/>
??? <xs:element name="country" type="stringtype"/>
? </xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
? <xs:sequence>
??? <xs:element name="title" type="stringtype"/>
??? <xs:element name="note" type="stringtype" minOccurs="0"/>
??? <xs:element name="quantity" type="inttype"/>
??? <xs:element name="price" type="dectype"/>
? </xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
? <xs:sequence>
??? <xs:element name="orderperson" type="stringtype"/>
??? <xs:element name="shipto" type="shiptotype"/>
??? <xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
? </xs:sequence>
? <xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

restriction 元素顯示出數(shù)據(jù)類型源自于 W3C XML Schema 命名空間的數(shù)據(jù)類型。因此,下面的片段也就意味著元素或?qū)傩缘闹当仨毷亲址愋偷闹担?/p>

<xs:restriction base="xs:string">

restriction 元素常被用于向元素施加限制。請(qǐng)看下面這些來(lái)自以上 schema 的片段:

<xs:simpleType name="orderidtype">
? <xs:restriction base="xs:string">
??? <xs:pattern value="[0-9]{6}"/>
? </xs:restriction>
</xs:simpleType>

這段代碼指示出,元素或?qū)傩缘闹当仨殲樽址⑶冶仨毷沁B續(xù)的六個(gè)字符,同時(shí)這些字符必須是 0-9 的數(shù)字。

關(guān)閉
程序員人生
主站蜘蛛池模板: 日本a在线| 国产经典一区二区三区 | 亚洲精品久久久酒店 | 在线麻豆 | 午夜在线精品偷拍 | av观看网址| 久久久国产精品 | 欧美三级网站 | 久久久国产精品入口麻豆 | 午夜视频免费在线观看 | 亚洲精品免费网站 | 欧美一区在线视频 | 亚洲一区二区中文字幕 | 精品九九九 | 让男人欲仙欲死的床技 | 精品国产91乱码一区二区三区 | 国产韩国精品一区二区三区 | 在线一区二区视频 | 日韩免费一区二区三区 | 国产一区二区在线播放 | 亚洲三级视频 | jlzzjlzz亚洲女人18 | 天天操夜夜撸 | 欧美日韩免费网站 | 黄色的网站在线观看 | 欧美日韩电影 | 国产一区二区精品久久 | 国产精品乱码一区二区三区 | 国产黄色免费 | 久久精品亚洲国产 | 国产小视频在线播放 | 久久久久国产精品一区三寸 | 久久久久91 | 久久综合国产 | 欧美黄色免费片 | 国产精品久久久久一区二区三区 | 亚洲成人av | 成人午夜在线观看 | 国产精品久久一区二区三区 | av看片网站| 热re99久久精品国产99热 |