3

私は現在XMLを学んでおり、複数の名前空間で使用されるXMLスキーマのすばらしい世界に到達しました。

私の質問は、名前空間プレフィックスを宣言する必要がある場合と宣言する必要がない場合です。

次のXMLスキーマのスニペットについて考えてみます。

<A:schema   xmlns:A="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="B" 
        xmlns:B="B" 
        elementFormDefault="qualified">

    <A:element name="foo">
        <complexType>                   <!-- or A:complexType?-->
            <element name="bar" type="B:myType"/>       <!-- or A:element?-->
        </complexType>
    </A:element>

    <B:complexType name="myType">
        <choice>                         <!--or B:choice?-->
            <element name="baz" type="string"/>      <!--or B:element?-->
            <element name="bas" type="string"/>      <!--or B:element?-->
        </choice>
    </B:complexType>

</A:schema>

名前空間プレフィックスを持つノードのすべての子ノードで名前空間プレフィックスを指定する必要がありますか、それともこれは継承されますか?または、親ノードにA名前空間プレフィックスが付加されている場合とはA:complexType異なりますか?complexType

4

1 に答える 1

4

名前空間 URI へのプレフィックスのバインディングは子要素に継承されますが、要素自体は親と同じ名前空間に自動的に配置されません。それらが存在する場合、名前空間にない子を持つ名前空間内の要素を表現する方法はありません。あなたの例では、スキーマ定義の一部であるすべての要素は、名前空間にある必要があります(従来、または接頭辞http://www.w3.org/2001/XMLSchemaにマップされています):xsdxs

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="urn:B" 
        xmlns:B="urn:B" 
        elementFormDefault="qualified">

    <xs:element name="foo">
        <xs:complexType>
            <xs:element name="bar" type="B:myType"/>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="myType">
        <xs:choice>
            <xs:element name="baz" type="xs:string"/>
            <xs:element name="bas" type="xs:string"/>
        </xs:choice>
    </xs:complexType>

</xs:schema>

例外は、xmlns="..."接頭辞のない要素のデフォルトの名前空間を定義する whichを使用する場合です。

<schema xmlns="http://www.w3.org/2001/XMLSchema" ...>
   <element ...>
      <complexType ...>

と同等です

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...>
   <xs:element ...>
      <xs:complexType ...>

は、スキーマの で指定されtype="B:myType"た型を参照しているため、正しいです。これは、 prefix にマップされています。myTypetargetNamespaceB

于 2012-10-10T12:30:58.130 に答える