Mir ist nicht bekannt, dass es in XML-Schema irgendetwas gibt, mit dem Sie mehrere XML-Dokumente gegeneinander validieren können. In der xs:id
y xs:key
(usw.), verwenden Sie xpath, um die Beschränkungen anzuwenden. Sie können zu XML-Schema Teil 1: Strukturen und scrollen Sie ein wenig nach unten, um das Beispiel zu sehen, das diese Einschränkungen in Aktion zeigt.
Wenn Sie die Möglichkeit haben, eine Meta-XML-Datei zu definieren, die Ihre anderen Dateien enthält (vielleicht durch Entitätsreferenzen, wenn nicht auf andere Weise), und dann ein Schema für diese Meta-Datei zu verwenden, dann sollten Sie in der Lage sein, XML-Schema zu verwenden, um Ihre Beschränkungen anzuwenden. Wenn Sie für jeden Ihrer XML-Dateitypen ein Schema definieren, sollten Sie in der Lage sein, trivial (durch xs:import
o xs:include
) ein Meta-Schema für eine XML-Datei definieren, das Ihren gesamten XML-Inhalt in einer XML-Datei enthält. Dieses Meta-Schema könnte die von Ihnen gewünschten Einschränkungen erfolgreich anwenden.
Nehmen wir an, Sie müssen ein Wiki mit vielen Beiträgen validieren, bei dem jeder Beitrag einen Autor und vielleicht viele Kommentare hat, bei denen jeder Kommentar auch einen Autor hat, und Sie haben eine XML-Datei für alle Beiträge, eine für alle Kommentare, eine für alle Autoren, und Sie wollen Einschränkungen zwischen diesen Dateien validieren, dass jeder Beitrag Autoren und Kommentare verwendet, die es gibt, dass jeder Kommentar Autoren verwendet, die es gibt, und so weiter. Nehmen wir an, Sie haben die folgenden drei Dateien:
Die Datei /home/username/posts.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<posts>
<post>
<author name="author1"/>
<comment id="12345" pos="1"/>
<comment id="12346" pos="2"/>
<body>I really like my camera...</body>
</post>
...
</posts>
Die Datei /home/username/comments.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<comments>
<comment id="12345" author="kindguy">
That was a very good post
</comment>
...
</comments>
Die Datei /home/username/authors.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<authors>
<author name="kindguy" id="1"/>
<author name="author1" id="2"/>
...
</authors>
Ich schlage vor, dass Sie eine Meta-XML-Datei erstellen, indem Sie Entität Referenzen . Sie könnten zum Beispiel die folgende XML-Datei erstellen:
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY postfile SYSTEM "file:///home/username/posts.xml">
<!ENTITY commentfile SYSTEM "file:///home/username/comments.xml">
<!ENTITY authorfile SYSTEM "file:///home/username/authors.xml">
<root>
&postfile1;
&commentfile;
&authorfile;
</root>
Diese Meta-XML-Datei (eigentlich eine einfache alte XML-Datei ... das "Meta" ist nur aus der Perspektive Ihrer drei definierten XML-Dateien und nicht im Sinne von XML) ist das exakte Äquivalent der folgenden Datei, und XML-Parser verhalten sich so, als hätten Sie wirklich die folgende Datei:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<posts>
<post>
<author name="author1"/>
<comment id="12345" pos="1"/>
<comment id="12346" pos="2"/>
<body>I really like my camera...</body>
</post>
...
</posts>
<comments>
<comment id="12345" author="kindguy">
That was a very good post
</comment>
...
</comments>
<authors>
<author name="kindguy" id="1"/>
<author name="author1" id="2"/>
...
</authors>
</root>
Desde este Datei können Sie ein XML-Schema definieren, das die gewünschten Beschränkungen anwendet, obwohl es bei den einzelnen Dateien keine Möglichkeit gibt, Beschränkungen anzuwenden. Da Sie mit der XML-Entity-Notation das gesamte XML in eine Datei "eingeschlossen" haben, können Sie xpath in den Constraint-Referenzen verwenden.