xsd повторное использование сложного типа в другом пространстве имен - PullRequest
1 голос
/ 02 марта 2012

У меня есть 2 xsd, принадлежащие 2 различным пространствам имен. могу ли я сослаться на сложный тип как элемент в xsd из другого пространства имен и добавить к нему дочерние элементы?

Global.xsd - пространство имен - пространство имен

<xs:complexType name = "body" mixed="true">
<xs:sequence>
    <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="fontStyle" type="fontStyle"/>
        <xs:element name="link" type="link"/>
        <xs:element name="mark" type="mark"/>
        <xs:element name="orderedList" type="orderedList"/>
        <xs:element name="table" type="table"/>
        <xs:element name="toc" type="toc"/>
        <xs:element name="unorderedList" type="unorderedList"/>
    </xs:choice>
</xs:sequence>
</xs:complexType>

пространство имен test.xsd - test

<xs:element name="body" type="n:body"/>
  • могу ли я добавить дочерние элементы ???

Ответы [ 2 ]

1 голос
/ 12 марта 2013

Да, вам просто нужно расширить тип следующим образом:

<xs:complexType name="moreBodyType">
    <xs:complexContent>
        <xs:extension base="n:body">
            <xs:sequence>
                // put extra child elements here
                                   <xs:element name="morestuff" />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

Так что теперь вы можете сделать:

<xs:element name="morebody" type="n:MoreBodyType" />
1 голос
/ 02 марта 2012

Конечно, почему бы и нет. Что-то вроде:

<xsd:schema
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:m"
    xmlns:m="urn:m"
    xmlns:n="urn:n"
    elementFormDefault="qualified">

    <xsd:import namespace="urn:n" schemaLocation="n.xsd"/>

    <xsd:element name="body" type="n:body"/>

    <xsd:element name="extendedBody" type="m:extendedBody"/>

    <xsd:complexType name="extendedBody">
        <xsd:complexContent>
            <xsd:extension base="n:body">
                <xsd:sequence>
                    <xsd:element name="additionalElement" type="xsd:string"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>

Однако помните, что XML будет выглядеть так:

<m:extendedBody>
    <n:toc>...</n:toc>
    <m:additionalElement>...</m:additionalElement>
</m:extendedBody>

(Я не проверял решение, хотя, это только для того, чтобы дать представление. Вполне вероятно, что расширение смешанного / выбора не будет работать.)

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