1. ホーム
  2. xml

[解決済み] targetNamespaceとxmlnsの接頭辞なし、違いは何ですか?

2023-07-15 17:35:12

質問

xmlスキーマのドキュメントで、targetNamespaceとxmlnsの両方を指定したとき がプレフィックスなしで .

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.com/" xmlns="http://example.com/">

これらの間の正確な違いは何ですか?私の理解では、プレフィックスなしのxmlnsがあれば、プレフィックスなしのすべての要素がその名前空間を取得し、...混乱したことに、同じことがtargetNamespaceにも当てはまると思います。

どのように解決するのですか?

ターゲット名前空間 は XML スキーマの成果物であり、その目的はスキーマファイルが記述する特定の XML 名前空間を示すことです。

xmlns - XML スキーマは XML 文書であるため、XML ファイル自体に対してデフォルトの XML 名前空間を定義することが可能です(これは xmlns 属性が行うことです)。例えば、スキーマで定義され、後に同じファイル内の他の場所で参照される項目(例えば、属性や要素の型として使用されるグローバルな simpleType)に対して接頭辞を使用する必要はありません。

私の経験では、多くの XML スキーマの作成者はこれを "ベストプラクティス" として考えています...したがって、あなたは正しい道を進んでいるのです。

XSD の観点では、targetNamespace はスキーマコンポーネントの修飾名の名前空間部分を規定しており、要素、属性、グループおよび属性グループ、単純型および複合型を含みます。XSDで定義された修飾名(要素や属性)の一部は,XMLインスタンス文書で直接使用される。その他のもの、たとえば型については xsi:type 属性で参照できます.残りの部分(グループ,属性グループ)は,(参照を通じて)スキーマの構成を容易にするために存在します.

私はまた、(一般的に)人々は2つの角度からXSDの設計に臨んでいるという意見を持っています。

  • 既存のXMLと一致させること。この場合、XML が名前空間を使用していれば、使用される名前空間ごとに、一致する targetNamespace 属性を持つ XSD スキーマ要素で終わります。

  • 純粋なモデリング。その後、UMLパッケージ、データベーススキーマ、Javaパッケージ、.NETの名前空間と同様のtargetNamespaceを考え、この場合、それが意味するすべてを考えます。基本的には、名前の衝突を避けるためのメカニズムです。それにもかかわらず、主題領域などでモデルを分割するためのメカニズムでもあるのです。