0

XMPP をいじって、XML について学んでいます。XMPP ドキュメントからすべての登録済みユーザーを取得する要素の例を次に示します。

 <iq from='bard@shakespeare.lit/globe'
        id='get-registered-users-num-1'
        to='shakespeare.lit'
        type='set'
        xml:lang='en'>
      <command xmlns='http://jabber.org/protocol/commands' 
               action='execute'
               node='http://jabber.org/protocol/admin#get-registered-users-num'/>
    </iq>

xmlns 名前空間の前にプレフィックスがないのはなぜですか? そうでない理由:

<command xmlns=get_users:'http://jabber.org/protocol/commands' 
               action='execute'
               node='http://jabber.org/protocol/admin#get-registered-users-num'/>

これは、この 1 つの子要素<command>のみの名前空間を定義していることを意味しますか? もしそうなら、なぜそれをするのですか?

4

1 に答える 1

0

これは、「デフォルト」名前空間と呼ばれるものです。基本的に、それが宣言されている要素のすべての属性 (および要素) の前に、その名前空間 (この場合はhttp://jabber.org/protocol/commands) を付けて、これと同等にします。

<command xmlns:default_namespace="http://jabber.org/protocol/commands"
       default_namespace:action="execute"
       default_namespace:node="http://jabber.org/protocol/admin#get-registered-users-num" />

そのノードの子を持つ場合、同じデフォルトの名前空間が自動的にプレフィックスとして付けられます (それら自体に別のデフォルトの名前空間がない場合)。

1 つの名前空間だけを扱っている場合は非常に便利ですが、複数の名前空間を扱っている場合は、手に負えなくなる可能性があります。

xPath はデフォルトの名前空間でも問題を起こすことがあるので、それを使用して XML を解析している場合は注意してください。

于 2013-05-03T00:28:21.307 に答える