我有xsd的这部分:
<!-- FIELDGROUP - groups all available field types -->
<xsd:group name="FieldGroup">
<xsd:choice id="fieldset-fields">
<xsd:element name="TextField" type="textfield-type" maxOccurs="unbounded" />
<xsd:element name="NumberField" type="numberfield-type" maxOccurs="unbounded" />
<xsd:element name="Button" type="button-type" maxOccurs="unbounded" />
</xsd:choice>
</xsd:group>
所有这些元素类型(textfield-type,numberfield-type,button-type)扩展了公共类型field-type
:
<!-- Fieldset -> FIELD-TYPE: the base type of all possible field elements -->
<xsd:complexType id="field-type" name="field-type" abstract="true" mixed="false">
<xsd:sequence>
<xsd:element name="Label" type="label-type" minOccurs="0" maxOccurs="1" />
<xsd:group ref="FieldValidationGroup" />
</xsd:sequence>
<xsd:attribute id="field-type-id" name="id" type="id-type" use="required" />
<xsd:attribute id="field-type-css-class" name="css-class" use="optional" type="css-class-type" />
</xsd:complexType>
我现在想要创建一个直接在FieldGroup
内的所有元素中唯一的Key - 无论它们实际是哪个元素,并且能够从FieldValidationGroup
中的某些元素引用它们。
或者:我如何在field-type
上定义密钥,以便将其派生到扩展字段类型的所有其他元素?
正如您所看到的,我当前在那里有一个ID,但ID在字段组中没有的所有其他元素中也是唯一的,这可能会导致错误的引用。
我怎样才能做到这一点?
答案 0 :(得分:3)
基于依赖于重用的一般方法 - 通过xsd:group和type hierarchyies - 我推断您希望能够“重用”键定义。如果是真的,那么简短的答案就是无法完成。 key , keyref 和 unique a.k.a 身份约束定义架构组件只能嵌套在元素声明中。无法定义与xsd:group相关的密钥,以便它“无论它们实际上是哪个元素都可以工作”,也不能在类型“定义密钥”上“这样就可以导出到所有其他元素。” p>