xmllint : valider un fichier XML à l'encontre de deux schémas XSD (enveloppe / charge utile)

Je suis en utilisant xmllint à faire certaines validations et j'ai une instance de document XML qui doit valider à l'encontre de deux schémas: l'un pour l'extérieur "enveloppe" (qui comprend un tout élément) et un pour la charge en question. Dire A. xsd est l'enveloppe de schéma, B. xsd une charge utile de schéma (il existe différents types de charges utiles) et ab.xml valide instance de document XML (je vous donner un exemple, à la fin du post).

J'ai tous les trois fichiers disponibles localement dans le même répertoire et je suis en utilisant xmllint pour effectuer la validation, en fournissant comme le schéma argument de l'emplacement de l'extérieur (enveloppe) schéma:

xmllint -schema A.xsd ab.xml

... pourtant, bien que je fournir à la fois de l'A. xsd et B. xsd dans le document d'instance (à l'aide de la xsi:schemaLocation élément) xmllint ne parvient pas à le trouver et se plaint:

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

Donc, apparemment, xmllint n'est pas la lecture de la xsi:schemaLocation élément. Je comprends que xmllint peut être configuré avec des catalogues, mais je n'ai pas réussi à obtenir xmllint de trouver à la fois des schémas. Comment pourrais-je obtenir xmllint à prendre en compte à la fois des schémas lors de la validation du document d'instance ou est-il un autre utilitaire de ligne de commande ou graphique de l'outil que je pourrais utiliser à la place?

SSCCE

A. xsd - enveloppe schéma

<?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 - charge utile schéma

<?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 - document d'instance

<?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>