Расширить схему XML с помощью пользовательских элементов - PullRequest
1 голос
/ 09 марта 2012

Я пытаюсь сделать следующее:

<myNamespace:foo>
    <myNamespace:bar>hello</myNamespace:bar>
    <myNamespace:extended>
        <yourNamespace:anything>
        ....
        </yourNamespace:anything>
    </myNamespace:extended>
</myNamespace:foo>

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

Я пробовал это:

<!-- mySchema.xsd -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/mySchema" 
    xmlns:myNamespace="http://www.example.org/mySchema" 
    elementFormDefault="qualified">

    <complexType name="extendedType">
        <sequence>
            <any/>
        </sequence>
    </complexType>

    <element name="foo">
        <complexType>
            <sequence>
                <element name="bar" type="string"/>
                <element name="extended" type="myNamespace:extendedType"/>
            </sequence>
        </complexType>
    </element>

.

<!-- yourSchema.xsd -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/yourSchema" 
    xmlns:yourNamespace="http://www.example.org/yourSchema"
    xmlns:myNamespace="http://www.example.org/mySchema" 
    elementFormDefault="qualified">

    <import namespace="http://www.example.org/mySchema" schemaLocation="mySchema.xsd"/>

    <redefine schemaLocation="mySchema.xsd">
        <complexType name="extendedType">
                <complexContent>
                <extension base="myNamespace:extendedType">
                    <sequence>
                        <element name="anything"></element>
                    </sequence>
                </extension>
            </complexContent>
        </complexType>
    </redefine>
</schema>

но когда я пытаюсь создать новый документ из yourSchema.xsd, в eclipse я получаю следующее: «Корневой элемент не существует, так как предоставленная схема не имеет глобальных элементов». Разве yourSchema.xsd не должен наследовать корневой элемент от mySchema.xsd?

1 Ответ

0 голосов
/ 10 марта 2012

Я думаю, вам нужно определить элемент <extended> с типом anyType.Попробуйте эту схему:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"     attributeFormDefault="unqualified">
    <xs:element name="foo">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="bar" type="xs:string"/>
                <xs:element name="extended" type="xs:anyType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...