Что делает атрибут ref для элемента в XSD? - PullRequest
50 голосов
/ 19 сентября 2009

Документация, кажется, говорит, что она ссылается на другой элемент в схеме, но как это можно использовать - я никогда не видел его в схемах, с которыми я работал.

У кого-нибудь есть хорошие варианты использования или что-то, что могло бы объяснить его использование дальше?

Ответы [ 2 ]

69 голосов
/ 20 сентября 2009

По сути, он ссылается на другой элемент, который рассматривается в другом месте, который может быть или не быть тем же документом схемы. Например, он может быть получен из схемы с внешней ссылкой в ​​другом пространстве имен. Предположим, что вы часто используете элемент item в нескольких различных схемах, вы можете объявить его (и любые другие общие типы и атрибуты) в схеме common , а затем повторно использовать их во всех ваших схемах. другие схемы. Если вы ссылаетесь на свою общую схему с пространством имен c , вы можете объявить экземпляр элемента item самостоятельно или как часть типа следующим образом:

<xs:element ref="c:item" /><!-- reference here -->
<xs:complexType name="something">
    <xs:sequence>
        <xs:element ref="c:item" /><!-- and here -->
    </xs:sequence>
    <xs:element name="other" type="xs:Name" />
</xs:complexType>

Определение в схеме данных будет выглядеть так:

<xs:element name="item" type="itemType" /><!-- referenced element -->
<xs:complexType name="itemType">
    <xs:sequence>
        <xs:element name="code" type="xs:Name" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
    <xs:attribute name="description" type="xs:normalizedString" use="required" />
</xs:complexType>
5 голосов
/ 19 сентября 2009

Например, если вы хотите объявить типы элементов, которые могут показаться глубоко вложенными, но также и как элементы верхнего уровня в экземпляре документа.

Учебник по XML-схеме содержит примеры для этого: http://www.w3.org/TR/xmlschema-0/

...