Атрибуты id и idref в XSD

Я работаю над заданием по составлению XML-документации для календаря событий, который состоит из элементов событий, которые имеют дочерние элементы имени, даты, места проведения и т. д. У нескольких событий одно и то же место, но указана контактная информация для каждого места. только один раз в данных XML. Итак, что у меня есть в XML-документе:

<venueinfo>
    <venue id="p1">
        <name>...</name>
        <address>...</address>
        ...
    </venue>
    <venue id="p2">
        ...
    </venue>
    ...
</venueinfo>

И в элементах события:

<event>
    <name>...</name>
    ...
    <location idref="p1"/>
    ...
</event>

В XSD мне нужно связать элементы elements с соответствующими элементами в , но пока у меня нет правильной привязки. Вот соответствующие объявления атрибутов и элементов:

<-- root element -->
<xs:element name="eventcalendar">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="tapahtuma" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="idref" type="xs:IDREF"/>

<xs:element name="venueinfo">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="venue" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:element name="venue">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="name"/>
            <xs:element ref="address"/>
            ...
        </xs:sequence>
        <xs:attribute ref="id" use="required"/>
    </xs:complexType>
</xs:element>

<xs:element name="location">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute ref="idref" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

<xs:element name="event">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="category"/>
            ...
            <xs:element ref="location"/>
            ...
        </xs:sequence>
    </xs:complexType>
</xs:element>

Проверка XML дает мне "элемент "venueinfo" не разрешен для модели контента "(событие +)"". Может ли кто-нибудь посоветовать мне, что я должен сделать, чтобы получить это правильно? Большое спасибо.


person Maria Niku    schedule 27.11.2013    source источник


Ответы (1)


Используйте атрибут типа для определения event, переместите его в начало файла, а затем укажите его как контейнер для структуры venueinfo:

<xs:element name="event" type="tEvent">
...
</xs:element>

<xs:complexType name="tEvent">
 <xs:element name="venueinfo">
 ...
 </xs:element>
</xs:complexType>
person Community    schedule 28.01.2014