Проблема с разработкой схемы XML на основе существующего XML - PullRequest
0 голосов
/ 15 июня 2010

У меня проблема с проверкой этого фрагмента XML:

<?xml version="1.0" encoding="UTF-8"?>
<i-ching xmlns="http://www.oracolo.it/i-ching">
    <predizione>
        <esagramma nome="Pace">
            <trigramma>
                <yang/><yang/><yang/>
            </trigramma>
            <trigramma>
                <yin/><yin/><yin/>
            </trigramma>
        </esagramma>
        <significato>Questa combinazione preannuncia
            <enfasi>boh</enfasi>, e forse anche <enfasi>mah,
                chissa</enfasi>.</significato>
    </predizione>
    <predizione>
        <esagramma nome="Ritorno">
            <trigramma>
                <yang/><yin/> <yin/>
            </trigramma>
            <trigramma>
                <yin/><yin/><yin/>
            </trigramma>
        </esagramma>
        <significato>Si prevede con certezza <enfasi>qualcosa</enfasi>,
            <enfasi>ma anche <enfasi>no</enfasi></enfasi>.</significato>
    </predizione>
</i-ching>

Эта XML-схема была разработана с использованием техники русских кукол:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.oracolo.it/i-ching"
    targetNamespace="http://www.oracolo.it/i-ching"
    > 

<xsd:element name="i-ching">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="predizione" minOccurs="0" maxOccurs="64">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="esagramma">
                            <xsd:complexType>
                                <!-- vi sono 2 trigrammi -->
                                <xsd:sequence>
                                    <xsd:element name="trigramma" minOccurs="2" maxOccurs="2">
                                        <xsd:complexType>
                                            <xsd:sequence minOccurs="3" maxOccurs="3">
                                                <xsd:choice>
                                                    <xsd:element name="yang"/>
                                                    <xsd:element name="yin"/>
                                                </xsd:choice>
                                            </xsd:sequence>
                                        </xsd:complexType>
                                    </xsd:element>
                                </xsd:sequence>
                                <xsd:attribute name="nome" type="xsd:string"/>
                            </xsd:complexType>
                        </xsd:element>
                        <!-- significato: context model misto -->
                        <xsd:element name="significato">
                            <xsd:complexType mixed="true">
                                <xsd:sequence>
                                    <xsd:element name="enfasi" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

</xsd:schema>

Для выполнения упражнения мне необходимо разработатьСхема XML для проверки предыдущего XML.Проблема в том, что кислород говорит мне это:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'predizione'. One of '{predizione}' is expected. Start location: 3:6 End location: 3:16 URL: http://www.w3.org/TR/xmlschema-1/#cvc-complex-type

почему?что-то не так с моей XML-схемой?большое спасибо

1 Ответ

1 голос
/ 15 июня 2010

Он ищет predizione с пустым пространством имен, но он может найти только predizione в пространстве имен по умолчанию http://www.oracolo.it/i-ching, потому что у вас нет elementFormDefault="qualified", настроенного в элементе xsd:schema. Вы можете узнать больше об этом атрибуте и о том, зачем он нужен, здесь .

В принципе, самое простое решение для вас - использовать следующее:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.oracolo.it/i-ching"
    targetNamespace="http://www.oracolo.it/i-ching"
    elementFormDefault="qualified"
    >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...