10
我在我的公司創建了一個新的dataexchange服務。我們想擴展在我們的core.xsd定義文件中定義的現有對象。這裏是我需要做的一個例子:如何重寫父/擴展元素內部的Xsd元素
<xs:complexType name="parentType">
<xs:sequence>
<xs:element name="departmentName" type="core:DEPARTMENT_NAME"
minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="childType">
<xs:complexContent>
<xs:extension base="parentType">
<xs:sequence>
<xs:element name="departmentName"
type="core:DEPARTMENT_NAME"
minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
我認爲這很有道理。我想覆蓋父元素並使其成爲必需元素。但是,一個有效的XML文件就是這樣。現在哪裏有一個額外的部門名稱!?
<childType>
<departmentName>HR</departmentName>
<departmentName>IT</departmentName>
</childType>
我怎麼能做到這一點,這樣的XML文件將成爲:
<childType>
<departmentName>IT</departmentName>
</childType>
謝謝, 克雷格
感謝Petru,那就是我一直在尋找的東西。問題雖然:如果我仍然想擴展parentType會發生什麼?假設我想爲擴展它的類型添加一些缺失的字段。我注意到你只能限制或擴展,但不能同時爲父類型。我會嘗試,但是是否需要創建一個擴展childType的grandChild類型,該類型對parentType有限制?這似乎過於冗長和繁瑣,是不是一個更清潔的解決方案? – Craig
爲了構建childType的頂部,您必須創建grandchildType。我同意這看起來很麻煩 - 尤其是維護xsd:限制......但這就是XSD 1.0。至於「更清潔」的限定詞...它真的在細節中,而且是旁觀者的眼睛。如果這是一個新的設計,我相信有不同的方式來佈局你的層次結構,以便它給你合理的東西......你還必須考慮XSD的代碼綁定... –