Определение ссылок на элементы в XSD - PullRequest
1 голос
/ 31 августа 2010

Как написать xsd для представления xml, показанного ниже (взято из http://static.springsource.org/spring-ws/sites/2.0/reference/html/why-contract-first.html)?

<flight number="KL1117">
  <passengers>
    <passenger>
      <name>Arjen Poutsma</name>
      <flight href="KL1117" />
    </passenger>
  </passengers>
</flight>

В этом случае passenger.flight ссылается на другой элемент полета (в данном случае это прародитель пассажира). Как на самом деле вы справляетесь с этим при написании xsds? Это может охватывать случаи циклических ссылок или просто для удобства сводить к минимуму повторение элементов, представляющих сложные типы, используя ссылки.

1 Ответ

3 голосов
/ 31 августа 2010

С этим нет проблем, если только вы не используете подход моделирования, при котором вы ссылаетесь на глобальные элементы (так называемая схема «ломтик салями»), поскольку вы не можете определить два глобальных элемента с одинаковым именем. Если вы используете чуть более типичный подход, это не проблема (обратите внимание, я опускаю повторяющийся список пассажиров для ясности):

<xs:complexType name="FlightDefinition">
    <xs:sequence>
        <xs:element name="passenger" type="Passenger"/>
    </xs:sequence>
    <xs:attribute name="number" type="xs:ID" use="required"/>
</xs:complexType>
<xs:complexType name="Passenger">
    <xs:sequence>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="flight" type="FlightReference"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="FlightReference">
    <xs:attribute name="href" type="xs:IDREF" use="required"/>
</xs:complexType>
<xs:element name="flight" type="FlightDefinition"/>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...