複数の XML ドキュメントを相互に検証できるようにする XML スキーマについては知りません。xs:id
and (etc) 制約ではxs:key
、xpath を使用して制約を適用します。XML Schema Part 1: Structuresに移動し、少し下にスクロールして例を表示し、これらの制約の動作を確認できます。
他のものを含むメタ XML ファイルを定義し (他に方法がない場合はエンティティ参照によって)、そのメタ ファイルのスキーマを使用できる場合は、XML スキーマを使用して制約を適用できるはずです。 . XML ファイルの種類ごとにスキーマを定義すると、1 つの XML ファイルにすべての XML コンテンツを含む XML ファイルのメタスキーマを簡単に (xs:import
またはによって) 定義できるはずです。xs:include
このメタスキーマは、必要な制約を正常に適用できます。
多くの投稿があり、各投稿には作成者がいて、各コメントにも作成者がいる多くのコメントがある Wiki を検証する必要があり、すべての投稿に対して 1 つの XML ファイル、すべてのコメントに対して 1 つ、すべてのコメントに対して 1 つの XML ファイルがあるとします。各投稿が存在する作成者とコメントを使用すること、各コメントが存在する作成者を使用することなど、これらのファイル間の制約を検証する必要があります。次の 3 つのファイルがあるとします。
ファイル/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>
ファイル/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>
ファイル/home/username/authors.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<authors>
<author name="kindguy" id="1"/>
<author name="author1" id="2"/>
...
</authors>
私が提案しているのは、Entity Referencesを使用してメタ XML ファイルを作成することです。たとえば、次の XML ファイルを作成できます。
<?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>
このメタ XML ファイル (実際には、単純な古い XML ファイルです...「メタ」は、定義された 3 つの XML ファイルの観点からのみのものであり、XML の意味ではありません) は、次のファイルとまったく同じであり、XMLパーサーは、実際に次のファイルがあるかのように動作します。
<?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>
このファイルから、必要な制約を適用する XML スキーマを定義できますが、個々のファイルには制約を適用する方法がありません。XML エンティティ表記を使用すると、すべての XML が 1 つのファイルに「含まれる」ため、制約参照で xpath を使用できます。