web-dev-qa-db-ja.com

targetNamespaceとxmlns:targetの違いは何ですか?

targetNamespaceの関数とは何ですか?

<schema xmlns="http://www.w3.org/2001/SchemaXML"
        targetNamespace="http://www.example.com/name"
        xmlns:target="http://www.example.com/name">

xmlns="http://www.w3.org/2001/SchemaXMLはスキーマXML名前空間を定義することを理解しています。

また、接頭辞「target」を使用して独自のスキーマを作成する場合、xmlns:target="http://www.example.com/name"が独自の語彙の名前空間を定義することも理解しています。これは、URI http://www.example.com/nameのプロキシまたはプレースホルダーとして機能します。

名前空間参加者の必要な境界と語彙を定義するのに十分なようです。それで、なぜhttp://www.example.com/name名前空間を複製するtargetNamespace属性が必要なのですか?

39
jojo10

ここで非常によく答えました: targetNamespaceと接頭辞なしのxmlns、違いは何ですか?

言い換えると:

  • targetNamespace=""-現在のXMLドキュメントはスキーマであるため、この属性はこのスキーマが対象とする、または検証することを意図している名前空間を定義します。

  • xmlns=""-接頭辞のないすべての要素に対して現在のドキュメント内のデフォルトの名前空間を定義します(つまり、yada:<yada:elementName>はありません)

  • xmlns:target=""-ここでは、接頭辞target:を使用して独自の名前空間を定義していますが、これは前の2つの特殊なケースとは無関係です。

44
Shaun

TargetNamespaceは、このスキーマを参照する他のxmlおよびxsdドキュメントのネームスペースを宣言します。この場合のターゲットプレフィックスは同じ名前空間を参照し、このスキーマ定義内でそれを使用して、同じスキーマ定義で定義されている他の要素、属性、タイプなどを参照します。

6
s_t_e_v_e

xmlns:target="http://www.example.com/name"の接頭辞「target」は特別なものではありません。スキーマプロセッサは、それをスキーマのターゲット名前空間にすることをどのように知るのでしょうか? targetNamespaceはまさにそれを行います-スキーマのコンポーネントが属する名前空間を宣言します。

N.B.スキーマドキュメント内のすべてがtargetNamespaceに入るわけではありません。 「schema」要素の「elementFormDefault」および「attributeFormDefault」属性、および「element」および「attribute」要素の「form」属性にも注意してください。

2
Kevin