私は次の2つのXSDS、test.xsdを持っています
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="http://www.test.com/ns1"
targetNamespace="http://www.test.com"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<import namespace="http://www.test.com/ns1" schemaLocation="test1.xsd"/>
<element name="Root">
<complexType>
<sequence>
<element name="Child" type="string"/>
</sequence>
<attribute ref="ns1:myAttrib1" use="required"/>
<attribute ref="ns1:myAttrib2" use="required"/>
</complexType>
</element>
</schema>
およびtest1.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema.xsd"
xmlns:ns1="http://www.test.com/ns1"
targetNamespace="http://www.test.com/ns1"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<attribute name="myAttrib1" type="string"/>
<attribute name="myAttrib2" type="string"/>
</schema>
インスタンスドキュメントは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="http://www.test.com" xmlns:ns1="http://www.test.com/ns1"
ns1:myAttrib1="1" ns1:myAttrib2="2">
<Child>Child 1</Child>
</Root>
Xerces 2.11.0を使用して、属性にプレフィックスmyAttrib1
をmyAttrib2
付け、ns1
検証に合格する必要があります。最初は、これはスキーマ定義に準拠していないと感じましたが(attributeFormDefault="unqualified"
inのためns1
)、もう一度考えてみると、それは理にかなっています。これが私がそれを理解する方法です:属性myAttrib1
とmyAttrib2
はで定義されていないのでプレフィックスが必要ですそれらが使用されるデフォルトの名前空間。つまり、で定義されていませんtargetNamespace
xmlns="http://www.test.com"
。
これが私の質問です:1)上記の属性にプレフィックスを付ける必要性を正しく理解しましたか?2)W3Cレコードのどこにありますか。この振る舞いを説明する一節を見つけてもいいですか?ありがとう。:)
更新:私は次のパッセージに出くわしました
最後の2つの属性(elementFormDefaultとattributeFormDefault)は、W3C XMLスキーマによって提供される機能であり、単一のスキーマ内で、属性と要素がデフォルトで修飾されていると見なされるかどうかを制御します(名前空間内)。修飾と非修飾のこの区別は、上記のようにデフォルト値を指定することによって示すことができますが、要素と属性を定義するときに、修飾または非修飾の値のフォーム属性を追加することによっても示すことができます。
非修飾として指定できるのはローカル要素と属性のみであることに注意することが重要です。グローバルに定義されたすべての要素と属性は、常に修飾する必要があります。
xml.comで見つかりました。もう1つの興味深いソースはzvon.orgです。したがって、これは実際に受け入れられた答えをバックアップします。ただし、(悪名高い謎めいた)W3Cの記録がどこにあるのかはまだ正確にはわかりません。これについて詳しく述べています。結局のところ、彼らはこの質問の統治機関です。