web-dev-qa-db-ja.com

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"はXMLの特殊なケースですか?

名前空間を使用する場合は、次の例に示すように、関連付けられたXSDがどこにあるかも示す必要があります。

<?xml version="1.0"?>
<Artist BirthYear="1958" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.webucator.com/Artist"
 xsi:schemaLocation="http://www.webucator.com/Artist Artist.xsd">
 <Name>
  <Title>Mr.</Title>
  <FirstName>Michael</FirstName>
  <LastName>Jackson</LastName>
 </Name>
</Artist>

ここでは、Artist.xsdを使用してhttp://www.webucator.com/Artist名前空間を検証する必要があることを示しました。ただし、http://www.w3.org/2001/XMLSchema-instance名前空間も使用していますが、そのXSDがどこにあるかは指定していません。 XMLパーサーはこの名前空間を処理する方法をどのように知っていますか?

更新(最初のコメント投稿者への応答)

だから、私たちは使用する代わりに:

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

使用する

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:ehcache="http://www.springmodules.org/schema/ehcache">
...
</beans>

10

XMLパーサーはこの名前空間の処理方法をどのように知っていますか?

彼らがそうするときを除いて、彼らはそうしません。基本的な考え方は、文字列 ' http://www.w3.org/2001/XMLSchema-instance 'はマジッククッキーのように機能するということです。処理ソフトウェアはそれを認識するようにプログラムされているため、それが何を意味するかに基づいて動作するか、そうでないかのどちらかです。

したがって、認識という単なる事実とともに、それが表すものの「知識」も得られます。 4つの属性を定義する「名前空間」 ( 'type'、 'nil'、 'schemaLocation'、および 'noNamespaceSchemaLocation' )fixed定義済みの意味を持つ。

言い換えると、文字列 ' http://www.w3.org/2001/XMLSchema-instance ' "の意味"を「知っている」場合は、自動的に xsi:schemaLocation "means"という名前の属性:「W3CXMLスキーマ」形式でエンコードされたスキーマドキュメントを指します。

これは、 XML Namespaces Rec が実際に提供するものを超えています(これは、「ユニバーサル名」などについてのいくつかの手振りです)。ここでは、名前空間の構文が(植民地化された名前を使用して)展開され、セマンティック理解をハードコードするという規則が機能しています。このドキュメントインスタンスのスキーマ(W3C XMLスキーマの形式)。」それはすべて、その魔法のクッキー文字列を事前に理解することにかかっています。

名前空間にはスキーマが必要であり、マシンで処理可能なスキーマが必要であり、起動するにはW3CXMLスキーマ形式でのみ必要であるという印象を受けるかもしれません。これらのどれも必ずしも真実ではありません。他のスキーマ形式が存在します(SGML/XML DTD、Relax-NG、どちらもW3C XMLスキーマとは異なり、 国際標準 );名前空間の定義は、機械可読である必要はありません(実際には、 ' http://www.w3.org/2001/XMLSchema-instance '名前空間の場合のように散文である可能性があります。 );また、名前空間の文字列はすべて、明確化マーカーとして機能することが保証されているため、名前空間を正式に定義する必要はまったくありません。

9
arayq2

スキーマがどこにあるかを言う必要はありません。必要に応じて実行できますが、実行する必要はありません。

この例では、すべてのプラットフォームが、xsixmlxsd、およびsoapのスキーマがすべて配置されている場所を理解している可能性があります。


EDIT:私が言ったように、すべてのプラットフォームは、これらのよく知られた名前空間のスキーマがどこにあるかを知っている可能性があります。おそらく、それらはすべてスキーマのコピーを持っています。私はVisualStudioを使用しており、これらのスキーマのコピーをオンラインで保持し、必要に応じて参照します。

2
John Saunders

Xmlスキーマには4つの組み込み宣言があります。 typenilschemaLocation、およびnoNamespaceSchemaLocationは、「定義上、すべてのスキーマに存在します」。それらについては Xmlスキーマの推奨 で読むことができます。

2
dkackman

次のコンテンツを見ると: http://www.w3.org/2001/XMLSchema-instance テキストがあることがわかりました:

...
<xs:schema targetNamespace="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.w3.org/1999/xhtml">
  <xs:annotation>
   <xs:documentation>
    <h1>XML Schema instance namespace</h1>
    <p>See <a href="http://www.w3.org/TR/xmlschema-1/">the XML Schema
       Recommendation</a> for an introduction</p>
...

xmlns="http://www.w3.org/1999/xhtml"なので、上記のリンクはHTMLドキュメントとして表示されます。

http://www.w3.org/TR/xmlschema-1/#schema-loc (Schema Representation Constraint:Schema Document Location Strategy)schema-awareprocessorsによると次の戦略の任意の組み合わせを任意の順序で実装できます

  • 名前空間名を解決してそのようなリソースを見つけようとします

したがって、http://www.w3.org/2001/XMLSchema-instanceはそれ自体を指します(はい、再帰!!)。

同様の回答を参照してください: 「http://www.w3.org/2001/XMLSchema-instance」のXSDファイルはどこにありますか?

[〜#〜] ps [〜#〜]。特殊なXMLプロセッサは、実際にこの定義をダウンロードしなくても、http://www.w3.org/2001/XMLSchema-instanceを既知のものとして扱うことができます(ほとんどの場合、そうします)。

[〜#〜] pps [〜#〜]XMLスキーマ標準によって定義されたhttp://www.w3.org/2001/XMLSchema-instanceのセマンティック http://www.w3.org/TR/xmlschema-1/

0
gavenkoa