1
我試圖通過不同元素類型的共享屬性唯一性約束添加。所有這些元素共享一組通用屬性,使用attributeGroup
定義。獨特屬性
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attributeGroup name="commonAttributes">
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="displayName" type="xs:string" />
</xs:attributeGroup>
...
<xs:element name="mainType" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="firstType" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="commonAttributes"></xs:attributeGroup>
</xs:complexType>
</xs:element>
<xs:element name="secondType" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attributeGroup ref="commonAttributes"></xs:attributeGroup>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
基本上,兩者firstType
和secondType
元素定義id
屬性,它需要有唯一值進行的跨每個mainType
實例。從我讀過的內容來看,unique
約束不能在xs:attributeGroup
內設置。在firstType
和secondType
元素上設置此限制顯然僅適用於該類型的其他元素,這意味着firstType
元素的實例可以具有與secondType
元素相同的id
值。
在mainType
元素中定義的所有類型中,是否有使id
屬性唯一的方法?將單個元素名稱設置爲屬性將意味着重大的代碼更改和規範的隱式更改(我非常想不觸發)。
是的,這確實起作用。從中可以看出,XPath有助於抽象不同的元素類型。無論節點名稱如何,「*」的意思是「所有孩子」。 –