最新的Web開發教程
 

XSD元素替代


在XML Schema,一個元素可以代替另一個元素。


元素替代

比方說,我們有來自兩個不同國家的用戶:英格蘭和挪威。 我們希望讓用戶選擇他或她是否想在XML文檔中使用挪威元素名或英文元素名稱的能力。

為了解決這個問題,我們可以定義一個substitutionGroup在XML模式。 首先,我們聲明一個頭元素,然後我們聲明,其中指出,他們可替代頭元素的其他元素。

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

在上面的例子中, "name"元件是頭元件和"navn"元素是可取代為"name"

看一個XML架構的該片段:

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>

<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/>

有效的XML文檔(according to the schema above)看起來是這樣的:

<customer>
  <name>John Smith</name>
</customer>

或者是這樣的:

<kunde>
  <navn>John Smith</navn>
</kunde>

阻塞元素替代

為了防止其他元素從指定的元素替換,使用block屬性:

<xs:element name="name" type="xs:string" block="substitution"/>

看一個XML架構的該片段:

<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>

<xs:complexType name="custinfo">
  <xs:sequence>
    <xs:element ref="name"/>
  </xs:sequence>
</xs:complexType>

<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/>

有效的XML文檔(according to the schema above)如下:

<customer>
  <name>John Smith</name>
</customer>

但是,這是不再有效:

<kunde>
  <navn>John Smith</navn>
</kunde>

使用substitutionGroup

類型可取代的元素必須是相同的,或從頭部元件的類型的。 如果該取代的元素的類型是一樣的頭元素的類型你不會有指定取代元素的類型。

請注意,在substitutionGroup所有元素(head元素和替代元素)必須聲明為全局元素,否則將無法正常工作!


什麼是全球要素是什麼?

全局元素是屬於的直接子元素的"schema"的元素! 本地元素嵌套在其他元素中的元素。