Схема XML: Как определить ключ / keyref для разных элементов в одной группе? - PullRequest
2 голосов
/ 19 августа 2011

У меня есть эта часть моего 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. * 1010.*

Или: как я могу определить ключ на field-type, чтобы он выводился для всех других элементов, расширяющих тип поля?

Как вы можете видеть, у меня в настоящее время есть идентификатор, ноидентификатор также уникален среди всех других элементов, не входящих в группу полей, и это может привести к неправильным ссылкам.

Как этого добиться?

1 Ответ

3 голосов
/ 05 сентября 2011

Основываясь на вашем общем подходе, который основан на повторном использовании - через иерархии xsd: group и type - я делаю вывод, что вы хотите иметь возможность «повторно использовать» определения ключей. Если это правда, то краткий ответ: это невозможно. key , keyref и уникальные a.k.a компоненты схемы определения ограничения идентификации могут быть вложены только в объявления элементов. Нельзя определить ключ, связанный с xsd: group, чтобы он работал «независимо от того, какими элементами они являются на самом деле», и «не определял ключ» для типа «так, чтобы он был получен для всех других элементов».

...