web-dev-qa-db-ja.com

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

春のように、この属性の値として複数の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の違いは何ですか?

124
sab

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

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

83
skaffman

xmlns はドキュメント内の一意の識別子です。スキーマへのURIである必要はありません。

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

xsi:schemaLocation は、実際のスキーマの場所に関するヒントを提供することになっています。

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

67
Oded

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

名前空間名を介して取得可能なスキーマがある場合とない場合がある...ユーザーコミュニティおよび/または消費者/プロバイダー契約は、[名前空間urlからxsdを取得しようとする]が賢明なデフォルト戦略である状況を確立します。

(明確であること、仕様に感謝!)

そして

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

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

ここでのもう1つの欠点は、通常、Javaライブラリでのxsd検証[ex:spring config xml files]、XMLファイルでXMLファイルで特定のschemaLocation xsd urlを指定する場合です。xsi:schemaLocation="http://somewhere http://somewhere/something.xsd"依存関係のjarファイル内で、リソースセクションにそのxsdファイルのコピーを含むcontain、springには「マッピング」機能があります。そのxsdファイルは、http://somewhere/something.xsdというURLにマップされているように見えます(したがって、Webにアクセスしてファイルをダウンロードすることはなく、ローカルにのみ存在します)。詳細については https://stackoverflow.com/a/41225329/3245 も参照してください。

20
rogerdpack

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

0
Mojun Zhu