Проверка XML-файла с помощью XSD дает разные ошибки

Я все время пытаюсь проверить файл XML с помощью XSD и пробовал разные варианты добавления элементов, последовательностей, сложного типа, и ничто не решает проблему.

Может кто-нибудь сказать мне, в чем именно проблема? Спасибо.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<literature
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:NoNameSpaceSchemaLocation="exerciseLiteraturSchema.xsd">

    <!-- First reference -->
    <reference number="1">
        <author>
            <firstname>Ron</firstname>
            <name>Jefferson</name>
        </author>
        <title>XML for Beginners</title>
        <editor>McGraw Hill</editor>
        <!-- <isbn>12-3344-567-00</isbn> -->
    </reference>

</literature>

<?xml version="1.0" encoding="UTF-8"?>

<xsd:element name="literature">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="reference">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="author">
                            <xsd:complexType>
                                <xsd:sequence>
                                    <xsd:element name="title" type="xsd:string" />
                                    <xsd:element name="editor" type="xsd:string" />
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="number" type="xsd:integer" />
    </xsd:complexType>
</xsd:element>


person kannzzmm2    schedule 18.06.2019    source источник


Ответы (1)


За исключением xsi:noNameSpaceSchemaLocation="exerciseLiteraturSchema.xsd", вы можете получить удовлетворительный результат, используя следующий XSD:

XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<literature
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <!-- First reference -->
    <reference number="1">
        <author>
            <firstname>Ron</firstname>
            <name>Jefferson</name>
        </author>
        <title>XML for Beginners</title>
        <editor>McGraw Hill</editor>
        <!-- <isbn>12-3344-567-00</isbn> -->
    </reference>

</literature>

XSD:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xs:element name="literature">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="reference">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="firstname" type="xs:string" />
                                        <xs:element name="name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="editor" type="xs:string" />
                        </xs:sequence>
                        <xs:attribute name="number" type="xs:integer" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Этот XSD проверяет приведенный выше XML.
Я переместил элементы title и editor из элемента author и вместо них добавил элементы firstname и name.

person zx485    schedule 18.06.2019
comment
Спасибо за вашу помощь, но как файл XML узнает, какую схему использовать, если она не указана в начале? - person kannzzmm2; 19.06.2019
comment
XSD обычно является параметром валидатора. Если нет, он должен работать с атрибутом xsi:noNameSpaceSchemaLocation="exerciseLiteraturSchema.xsd". Поэтому добавьте его в файл, а затем проверьте его с помощью вашего валидатора. - person zx485; 19.06.2019