xmllint : die Validierung einer XML-Datei gegen zwei XSD-Schemata (Umschlag / Nutzlast)

Ich bin mit xmllint zu tun, einige Validierungen und ich habe eine XML-Instanz-Dokument die Validierung gegen zwei schemas: eine für die äußere "Hülle" (die ein alle element) und eine für den bestimmten Nutzlast. Sagen A. xsd ist der Umschlag schema, B. xsd Nutzlast-schema (es gibt verschiedene mögliche Nutzlasten) und ab.xml eine gültige XML-Instanz-Dokument (ich habe ein Beispiel am Ende des Beitrags).

Ich habe alle drei Dateien, die lokal im gleichen Verzeichnis und bin mit xmllint zur Durchführung der Validierung, da die schema argument die Position der äußeren (Umschlag) schema:

xmllint -schema A.xsd ab.xml

... aber, obwohl ich die Lage der beiden A. xsd und B. xsd in das Instanz-Dokument (mit der xsi:schemaLocation element) xmllint fehlschlägt, um es zu finden und beschwert sich:

ab.xml:8: element person: Schemas validity error : Element '{http://www.example.org/B}person': No matching global element declaration available, but demanded by the strict wildcard.
ab.xml fails to validate

Also anscheinend xmllint ist nicht das Lesen der xsi:schemaLocation element. Ich verstehe, dass xmllint kann konfiguriert werden, mit Katalogen, aber ich konnte nicht xmllint zu finden, die beide schemas. Wie sollte ich xmllint zu berücksichtigen, sowohl schemas bei der Validierung der Instanz-Dokument oder gibt es einen anderen Befehl Linie Dienstprogramm oder graphische tool könnte ich stattdessen verwenden?

SSCCE

A. xsd - Umschlag schema

<?xml version="1.0" encoding="UTF-8"?>
<schema elementFormDefault="qualified" 
        xmlns               ="http://www.w3.org/2001/XMLSchema"
        xmlns:a             ="http://www.example.org/A"
        targetNamespace ="http://www.example.org/A">

       <element name="someType" type="a:SomeType"></element>

        <complexType name="SomeType">
            <sequence>
                <any namespace="##other" processContents="strict"/>
            </sequence>
        </complexType>
</schema>

B. xsd - Nutzlast-schema

<?xml version="1.0" encoding="UTF-8"?>
<schema elementFormDefault="qualified"
    xmlns          ="http://www.w3.org/2001/XMLSchema"
    xmlns:b        ="http://www.example.org/B"
    targetNamespace="http://www.example.org/B"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <element name="person" type="b:PersonType"></element>
    <complexType name="PersonType">
        <sequence>
                <element name="firstName" type="string"/>
                <element name="lastName"  type="string"/>
        </sequence>
    </complexType>
  </schema>

ab.xml - Instanz-Dokument

<?xml version="1.0" encoding="UTF-8"?>
<a:someType xmlns:a="http://www.example.org/A"
        xmlns:b="http://www.example.org/B"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.example.org/A A.xsd
                            http://www.example.org/B B.xsd">

            <b:person>
                <b:firstName>Mary</b:firstName>
                <b:lastName>Bones</b:lastName>
            </b:person>

</a:someType>

InformationsquelleAutor der Frage Marcus Junius Brutus | 2013-06-08

Schreibe einen Kommentar