<?xml version="1.0"?>
<!-- These are the examples for XSF XEP-0024: Publish/Subscribe-->
<stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" xml:lang="en"><!-- Example 1-->
SEND: <iq type='set' from='subscriber' to='pubsub' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'>
            <ns>namespace:1</ns>
             <ns>namespace:2</ns>
             ...
             <ns>namespace:N</ns>
          </subscribe>
        </query>
      </iq>

RECV: <iq type='result' to='subscriber' from='pubsub' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'>
            <ns>namespace:1</ns>
             <ns>namespace:2</ns>
             ...
             <ns>namespace:N</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 2-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 3-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'/>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'/>
        </query>
      </iq>
<!-- Example 4-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe to='publisher'>
            <ns>namespace:1</ns>
          </unsubscribe>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe to='publisher'>
            <ns>namespace:1</ns>
          </unsubscribe>
        </query>
      </iq>
<!-- Example 5-->
SEND: <iq type='set' to='pubsub.localhost' 
             from='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe to='publisher'/>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe to='publisher'/>
        </query>
      </iq>
<!-- Example 6-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 7-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe/>
        </query>
      </iq>

RECV: <iq type='error' from='pubsub.localhost'
             to='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe/>
        </query>
        <error code='405'>Not Allowed</error>
      </iq>
<!-- Example 8-->
SEND: <iq type='set' to='pubsub.localhost' 
             from='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </unsubscribe>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost' 
             to='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </unsubscribe>
        </query>
      </iq>
<!-- Example 9-->
SEND: <iq type='set' to='pubsub.localhost' 
             from='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe/>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost' 
             to='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <unsubscribe/>
        </query>
      </iq>
<!-- Example 10-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisherA'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
          <subscribe to='publisherB'>
            <ns>namespace:3</ns>
          </subscribe>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisherA'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
          <subscribe to='publisherB'>
            <ns>namespace:3</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 11-->
SEND: <iq type='set' to='pubsub.localhost'
             from='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisherA'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
          <unsubscribe to='publisherB'>
            <ns>namespace:3</ns>
          </unsubscribe>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisherA'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
          <unsubscribe to='publisherB'>
            <ns>namespace:3</ns>
          </unsubscribe>
        </query>
        <error code='400'>
          Bad Request: only subscribes or unsubscribes
        </error>
      </iq>
<!-- Example 12-->
SEND: <iq type='get' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe/>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
          <subscribe to='publisherA'>
            <ns>namespace:2</ns>
            <ns>namespace:4</ns>
          </subscribe>
          <subscribe to='publisherB'>
            <ns>namespace:5</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 13-->
SEND: <iq type='set' to='pubsub.localhost'
             from='publisher@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='foo'>
            <foo xmlns='foo'>bar</foo>
          </publish>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='publisher@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='foo'>
            <foo xmlns='foo'>bar</foo>
          </publish>
        </query>
      </iq>
<!-- Example 14-->
SEND: <iq type='set' to='pubsub.localhost'
             from='publisher.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='foo'>
            <foo xmlns='foo'>bar</foo>
          </publish>
          <publish ns='jabber:x:oob'>
            <x xmlns='jabber:x:oob'>
              <url>http://www.pipetree.com/jabber/</url>
              <desc>Some stuff about Jabber</desc>
            </x>
          </publish>
        </query>
      </iq>

RECV: <iq type='result' from='pubsub.localhost'
             to='publisher.localhost' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='foo'>
            <foo xmlns='foo'>bar</foo>
          </publish>
          <publish ns='jabber:x:oob'>
            <x xmlns='jabber:x:oob'>
              <url>http://www.pipetree.com/jabber/</url>
              <desc>Some stuff about Jabber</desc>
            </x>
          </publish>
        </query>
      </iq>
<!-- Example 15-->
SEND: <iq type='set' to='subscriber@localhost/foosink'
             from='pubsub.localhost' id='push1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='foo' from='publisher@localhost'>
            <foo xmlns='foo'>bar</foo>
          </publish>
        </query>
      </iq>
<!-- Example 16-->
RECV: <iq type='set' to='pubsub.localhost'
             from='subscriber@localhost/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'>
            <ns>namespace:1</ns>
            <ns>namespace:2</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 17-->
RECV: <iq type='set' to='pubsub.localhost'
             from='news.server/politics-listener' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher'>
            <ns>news:politics:home</ns>
            <ns>news:politics:foreign:usa</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 18-->
SEND: <iq type='set' to='pubsub.server1'
             from='subscriber@server1/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher.server2'>
            <ns>namespace:1</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 19-->
SEND: <iq type='set' to='pubsub.server2'
             from='pubsub.server1' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher.server2'>
            <ns>namespace:1</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 20-->
SEND: <iq type='result' from='pubsub.server1'
             to='subscriber@server1/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher.server2'>
            <ns>namespace:1</ns>
          </subscribe>
        </query>
      </iq>
<!-- Example 21-->
SEND: <iq type='error' from='pubsub.server1'
             to='subscriber@server1/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher.server2'>
            <ns>namespace:1</ns>
          </subscribe>
        </query>
        <error code='406'>Not Acceptable</error>
      </iq>
<!-- Example 22-->
SEND: <iq type='set' from='publisher.server2'
             to='pubsub.server2' id='p1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='namespace;1'>
            <stuff xmlns='namespace:1'>nonsense</stuff>
          </publish>
        </query>
      </iq>
<!-- Example 23-->
RECV: <iq type='set' from='pubsub.server2'
             to='pubsub.server1' id='p1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='namespace;1' from='publisher.server2'>
            <stuff xmlns='namespace:1'>nonsense</stuff>
          </publish>
        </query>
      </iq>
<!-- Example 24-->
SEND: <iq type='set' from='pubsub.server1'
             to='subscriber@server1/resource' id='p1'>
        <query xmlns='jabber:iq:pubsub'>
          <publish ns='namespace;1' from='publisher.server2'>
            <stuff xmlns='namespace:1'>nonsense</stuff>
          </publish>
        </query>
      </iq>
<!-- Example 25-->
SEND: <iq type='error' from='pubsub.server2'
             to='subscriber@server1/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher.server2'>
            <ns>namespace:1</ns>
          </subscribe>
        </query>
        <error code='406'>Local pubsub only</error>
      </iq>
<!-- Example 26-->
SEND: <iq type='error' from='pubsub.server2'
             to='subscriber@server1/resource' id='s1'>
        <query xmlns='jabber:iq:pubsub'>
          <subscribe to='publisher.server2'>
            <ns>namespace:1</ns>
          </subscribe>
        </query>
        <error code='302' jid='pubsub.server1'/>
      </iq>
</stream>

