2

我有我的 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>

所有这些元素类型(文本字段类型、数字字段类型、按钮类型)都扩展了通用类型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- 无论它们实际上是哪个元素,并且能够从FieldValidationGroup.

或者:我如何定义 keyfield-type以便它派生到扩展字段类型的所有其他元素?

如您所见,我目前在那里有一个 ID,但该 ID 在字段组以外的所有其他元素中也是唯一的,这可能导致错误的引用。

我怎样才能做到这一点?

4

1 回答 1

3

根据您依赖重用的一般方法 - 通过 xsd:group 和类型层次结构 - 我推断您也希望能够“重用”键定义。如果属实,那么简短的回答是它无法完成。keykeyrefunique aka身份约束定义架构组件,只能嵌套在元素声明中。不能定义与 xsd:group 相关的键,以便“无论它们实际上是哪些元素”都可以工作,也不能在类型上“定义键”,“以便派生到所有其他元素”。

于 2011-09-05T04:13:29.333 回答