Xml架构:如何为同一组中的不同元素定义键/ keyref?

时间:2011-08-19 09:02:18

标签: xsd relation

我有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在字段组中没有的所有其他元素中也是唯一的,这可能会导致错误的引用。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

基于依赖于重用的一般方法 - 通过xsd:group和type hierarchyies - 我推断您希望能够“重用”键定义。如果是真的,那么简短的答案就是无法完成。 key keyref unique a.k.a 身份约束定义架构组件只能嵌套在元素声明中。无法定义与xsd:group相关的密钥,以便它“无论它们实际上是哪个元素都可以工作”,也不能在类型“定义密钥”上“这样就可以导出到所有其他元素。” p>