Включить элементы в сложный тип XSD без нового элемента

У меня есть этот сложный тип:

<xsd:complexType name="Identifier">
    <xsd:sequence>
        <xsd:element name="Id" type="xsd:string"/>
        <xsd:element name="Version" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

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

<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="Id" type="Identifier"/>
              <!-- More elements here -->
    </xsd:sequence>
</xsd:complexType>

Хотя это не то, чего я действительно хочу. Я хочу включить элементы типа Identifier непосредственно во второй сложный тип, не создавая новый элемент. Например. то же самое, что просто сделать это:

<xsd:complexType>
    <xsd:sequence>
        <xsd:element name="Id" type="xsd:string"/>
        <xsd:element name="Version" type="xsd:string"/>
              <!-- More elements here -->
    </xsd:sequence>
</xsd:complexType>

Надеюсь, это имеет смысл.

Заранее спасибо.


person ng5000    schedule 16.10.2009    source источник


Ответы (2)


Вы можете расширять типы, например:

<xsd:complexType name="MySubType">
    <xsd:complexContent>
        <xsd:extension base="Identifier">
                       <xsd:sequence>
                            <!-- More elements here -->
                       </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>
person skaffman    schedule 16.10.2009
comment
Идеально - спасибо. Знаете ли вы, как включить несколько расширений в один сложный тип? - person ng5000; 16.10.2009
comment
Нашел ответ. Я хотел множественного наследования, которого можно добиться с помощью xsd:group. - person ng5000; 16.10.2009
comment
Да, группы — очень удобная вещь, хотя они могут запутать, если вы переусердствуете. - person skaffman; 16.10.2009

этот сложный тип всегда будет разрешать

<Identifier>
   <Id>string</Id>
   <Version>string</Version>
</Identifier>

если вам не нужна дочерняя структура, вы можете определить идентификатор и версию как элементы и ссылаться на них, используя

<xsd:element ref="Id"/>
<xsd:element ref="Version"/>

позже. Но тогда у вас нет гарантии, что они оба произойдут

Вы также можете сделать атрибуты Id и Version для элемента Identifier в сложном типе.

удачи Майк

person MikeD    schedule 16.10.2009