1

XML名前空間に関する概念的な質問があります。フォルダー階層に2つの異なるxsdファイルがある場合:

fileA.xsd
folder/
    fileB.xsd

そして、これら2つのファイルのそれぞれで、targetNamespace属性によって個別の名前空間を定義しました。

fileA.xsdでは、

targetNamespace="http://www.anurlofmine.com/myproject/A"

そしてfileB.xsdでは次のようになります。

targetNamespace="http://www.anurlofmine.com/myproject/folder/B"

eurlのパスを使用して相対インポートを実行できますか?

たとえば使用できますか

<xs:schema xmlns:relativeA="../A">

fileB.xsd内?

私はそれを行う方法にはあまり関心がありません。スキーマ定義の場所を指定する方法はいろいろあることを知っています。URLのパスの意味に関心があるだけです。

私の知る限り、URLは、xsdファイルの型を一意に識別するために使用される文字列です(定義ファイルの場所を指定する以外に、保証はありません)。私は正しいですか?

うまくいけば、私の質問は答えるにはあまりにも奇妙ではありません:)

よろしくお願いしますMischa

4

1 に答える 1

1

XSDスキーマドキュメントのimportおよびinclude要素のschemaLocation属性のスキーマロケーションヒントは、タイプxs:anyURIとして指定されています。つまり、相対参照にすることができます。

したがって、fileB.xsdには、次の形式のインポートステートメントを含めることができます。

<xs:import namespace="http://www.anurlofmine.com/myproject/A"
           schemaLocation="../fileA.xsd"/>

一方、名前空間宣言の値(xmlns:relativeA例のように)は、相対URIではなく絶対URIであることが期待されます。多くのプログラムは、実際には名前空間名のURIとしての合法性をチェックしないため、名前空間名として「../A」を使用しても必ずしもエラーが発生するわけではありません。ただし、XMLテクノロジスタックを定義する基本的なW3C仕様では、名前空間名として相対URIを使用するドキュメントの情報セットは未定義であると指定されています。

いずれの場合も、名前空間宣言をxs:schema要素に追加しても、その名前空間をインポートしたり、指定された場所にある可能性のあるスキーマドキュメントを参照したりする効果はありません。

于 2013-02-05T16:52:29.827 に答える