2


0

Xmlスキーマ内のグローバル宣言

a)なぜグローバル要素と属性の宣言は常に名前空間に属し、それ自体がインスタンス文書内で常に修飾されなければならないのですか?

b)ローカル要素/属性宣言( form`属性が unqualified`に設定されている)は、インスタンスドキュメント内の名前空間に関連付けられていなくても、スキーマのターゲット名前空間の一部ですか?

c)型/グループ宣言がグローバルであっても、ターゲット名前空間の一部であるため、グローバル宣言を参照するときはターゲット名前空間プレフィックスを含める必要があります。

とにかく、グローバル宣言がターゲット名前空間の一部であるのに、ローカル宣言はそうではない特別な理由がありますか? つまり、グローバルな型/グループ宣言がターゲット名前空間に属していなくても、Xml Schema内でそれらを参照することができます。したがって、それらが名前空間の一部であるためには他の利点があります。

ありがとうございました

編集:

_ @ user437291:名前空間と修飾名の概念を理解しているなら、なぜ概念の一部ではない「ローカル」と「グローバル」という言葉を使用するのですか? _

しかし、なぜローカル型宣言はXml Schemaのターゲット名前空間のメンバーである必要があるのでしょうか? インスタンスドキュメントまたは他のXmlスキーマから参照されないので、ターゲット名前空間のメンバーであることの目的/利点は何ですか?

_ さらに、要素または属性が名前空間に属しているかどうかの質問は、その「資格」から本当に独立しています。 それは何かの色やサイズのような異なるプロパティです。 _

要素/属性はどのように名前空間に属し、同時にインスタンスドキュメントで修飾する必要はありませんか? プログラミング言語では、型「T」が名前空間「N1」のメンバーである場合、その完全修飾名は「N1.T」であるため、他の型は完全修飾名「N1.T」を使用してこの型を参照する必要があることを意味します(ここでは、「using」ディレクティブなどを無視しています)。

Xmlスキーマとxmlインスタンスドキュメントでも同じだと思います - したがって、私が理解しているように、Xml Schema Validator解析 Contacts.xml`は修飾された要素 contact:firstName`に遭遇し、名前http://www.someDomain.com.firstNameを使用して一致する要素宣言を `Contacts.xsd`で検索します。

一致するものが見つかると、バリデーターは Contacts.xml`の次の要素である lastName`に進みます。 lastName`要素が unqualified`であることを確認すると、 Contacts.xsd`で lastName`という名前の要素宣言を検索します。 これで、 Contacts.xsd`内の完全修飾名が http:// www.someDomain.com.lastName`であった場合、バリデーターは一致する宣言を見つけることができません! しかし、一致する宣言が見つかるため、 `lastName`は名前空間http://www.someDomain.comのメンバーではないと想定しています。

Contacts.xml


Contacts.xsd


1 Answer


4


あなたの質問は特別なネームスペースの理解に関係しているように思えます:「名前空間なし」。 次の単純なXMLドキュメントで

    Bla Bla

root`要素と myElement`要素の両方には、「名前空間なし」という名前の特別な名前空間があります。 対応するXMLスキーマを定義できます。


スキーマでは「targetNamespace」が使用されないため、スキーマは「名前空間なし」のスキーマを定義します。

ところで、スキーマ "http://www.w3.org/2001/XMLSchema-instance"は、XMLドキュメントからスキーマを参照する簡単な方法を提供します。 上記のスキーマドキュメントをファイル NoNamespace.xsd`に保存し、XMLドキュメントをファイル NoNamespace.xml`に保存します。 さらに、両方のファイルを同じフォルダーに配置します。 次に、XMLドキュメントを次のように変更できます。

    Bla Bla

これで、使用するスキーマへの_explicit_参照ができました。

修飾された要素名または修飾された属性名に関する質問は、メインの質問から独立しています。 説明するのはとても簡単です。 qualified namesは、 ``または `xsi:のような*名前空間プレフィックス*を持つ名前と同じです。 noNamespaceSchemaLocation = "NoNamespace.xsd" `。 したがって、_qualified_は要素と属性の両方になります。

1つのドキュメントで、異なる名前空間に要素を混在させることができます。 たとえば、次のドキュメントで

            Hello!







            Hello!

要素 ``

その子には「http://www.w3.org/1999/xhtml」名前空間があり、よく知られているXHTMLスキーマに対して検証する必要があります。 要素 および には "namespeceなし"があります。 要素 および には名前空間 "http://www.ok-soft-gmbh.com/xsd/test/123"があります。 要素 要素には、 のような "namespeceなし"もあります。 したがって、すべてが非常に簡単です。

更新済み:XML Schemaで定義されているすべてのタイプを修正すると、定義で「グローバル」になります。 「内部」または「プライベート」タイプを定義することはできません。

あなたがあなたの例に含めたXMLファイルとXSDスキーマに関するあなたの質問は何なのか分かりません。 次のスキーマと同じスキーマを使用してXMLファイルを書き換えることができると便利です。


したがって、要素 lastName`はスキーマ Contacts.xsd`で定義されていますが、「名前空間なし」の要素として定義されています。 XMLスキーマでは、「「 "http://www.someDomain.com"」の要素には2つの子要素が必要であると言われています。「targetNamespace」「http://www.someDomain.com」の「firstName」と「名前空間なし」の要素「lastName」。 お役に立てば幸いです。