xsi:schemaLocationの用途は何ですか?


131

春のように、この属性の値として複数のURLがあることがわかります。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

なぜそれが必要で何に使用されるのですか?SpringはURLにアクセスして検証しますか?xmlnsとxsi:schemaLocationの違いは何ですか?

回答:


87

Springが使用するJava XMLパーサーはschemaLocation、XMLファイルを検証するために、値を読み取ってインターネットからロードしようとします。次に、Springはこれらのロード要求をインターセプトし、独自のJARファイル内からバージョンを提供します。

を省略した場合schemaLocation、XMLパーサーは、構成を検証するためにスキーマを取得する場所を認識しません。


XMLパーサーはクラスパスを検索しませんか?
HDave 2012年

1
@skaffman、スプリングベースのプロジェクトのmavenビルドを-o(オフライン)フラグで実行すると、すべての依存関係がローカルリポジトリで利用可能であるにもかかわらず、ビルドが失敗するということですか?
経由

@HDaveしかし、XMLパーサーが探しているものは何ですか。スキーマには任意の名前を付けることができます
KrzysztofKrasońApr

技術的には、XMLパーサーは最初にインターネットからスキーマをロードしようとします。見つからない場合、またはインターネットアクセスが利用できない場合は、クラスパスからローカルに* .xsdファイルを検索します。見つからない場合は省略されます。
フランク・チャン、

スプリングインターセプトレイヤーの詳細については、stackoverflow.com
a / 10768972/32453

68

xmlns文書内で一意の識別子である-それはスキーマにURIである必要はありません。

XML名前空間は、URI参照で識別される名前空間に関連付けることにより、Extensible Markup Languageドキュメントで使用される要素と属性の名前を修飾するための簡単な方法を提供します。

xsi:schemaLocation 実際のスキーマの場所に関するヒントを与えることになっています:

ドキュメントで使用して、評価に使用できるスキーマドキュメントの物理的な場所に関するヒントを提供できます。


22

スキーマを見つけるための仕様によると

ネームスペース名を介して取得可能なスキーマがある場合とない場合があります...ユーザーコミュニティやコンシューマー/プロバイダーの合意により、[ネームスペースのURLからxsdを取得しようとする]が適切なデフォルトの戦略である状況が確立される場合があります。

(曖昧さをなくしてくれてありがとう、スペック!)

そして

ドキュメント作成者(人間かどうかに関係なく)が特定のスキーマを表示してドキュメントを作成し、ドキュメントの一部またはすべてがそのスキーマに準拠していることを保証する場合、schemaLocationおよびnoNamespaceSchemaLocation [属性]が提供されます。

したがって、基本的には名前空間のみを指定すると、schemaLocation「コミュニティ」に応じて、XMLがその場所で(属性がなくても)xsdに対して検証される可能性があります。特定のを指定する場合schemaLocation、それは基本的に、xmlドキュメントが上記のxsdに準拠している必要があることを意味しているため、「確認してください」(私が読んだとおり)。私の推測では、a schemaLocationまたはnoNamespaceSchemaLocation属性を実行しない場合、ほとんどの場合「検証されない」だけです(他の回答に基づいて、javaはこの方法で実行するようです)。

あなたのXMLファイルは、特定の指定した場合、:[春の設定xmlファイルEX]ここでもう一つのシワが、それはJavaライブラリでXSD検証で、一般的であるschemaLocationように、XMLファイル内のXSD URLをxsi:schemaLocation="http://somewhere http://somewhere/something.xsd"一般的に、あなたの依存関係のjarファイルの1つに、それがされます含まれているのコピーをそのxsdファイルは、そのリソースセクションにあり、Springには「マッピング」機能があり、そのxsdファイルをURLにマップするかのように処理しますhttp://somewhere/something.xsd(Webにアクセスしてファイルをダウンロードすることはなく、ローカルに存在するだけです)。わずかに詳細については、https://stackoverflow.com/a/41225329/32453も参照してください


0

これらの場所のいずれかに移動すると、それらのスキーマで定義されているものが見つかります。たとえば、これはiniメソッドのキーワード値のデータ型を教えてくれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.