Moved the xmpp transport into the main trunk

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@467593 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
James Strachan 2006-10-25 09:42:24 +00:00
parent a191115187
commit 7b19dd4cec
109 changed files with 8417 additions and 0 deletions

238
activemq-xmpp/pom.xml Executable file
View File

@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-parent</artifactId>
<version>4.1-incubator-SNAPSHOT</version>
</parent>
<artifactId>activemq-xmpp</artifactId>
<packaging>jar</packaging>
<name>ActiveMQ :: XMPP</name>
<repositories>
<repository>
<id>codehaus</id>
<name>Codehaus Maven 2 Repository</name>
<url>http://repository.codehaus.org/</url>
</repository>
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net Maven 2 Repository</name>
<url>https://maven2-repository.dev.java.net/nonav/repository</url>
</repository>
<repository>
<id>maven-repository.dev.java.net</id>
<name>Java.net Maven 1 Repository (legacy)</name>
<url>https://maven-repository.dev.java.net/nonav/repository</url>
<layout>legacy</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>maven2-repository.dev.java.net</id>
<url>https://maven2-repository.dev.java.net/nonav/repository</url>
</pluginRepository>
<pluginRepository>
<id>maven-repository.dev.java.net</id>
<name>Java.net Maven 1 Repository (legacy)</name>
<url>https://maven-repository.dev.java.net/nonav/repository</url>
<layout>legacy</layout>
</pluginRepository>
</pluginRepositories>
<dependencies>
<!-- activemq -->
<dependency>
<groupId>${pom.groupId}</groupId>
<artifactId>activemq-core</artifactId>
</dependency>
<!--
<dependency>
<groupId>${pom.groupId}</groupId>
<artifactId>activemq-core</artifactId>
<scope>compile</scope>
<type>test-jar</type>
</dependency>
-->
<dependency>
<groupId>${pom.groupId}</groupId>
<artifactId>activeio-core</artifactId>
</dependency>
<dependency>
<groupId>stax</groupId>
<artifactId>stax</artifactId>
<scope>runtime</scope>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>xmlbeans</groupId>
<artifactId>xmlbeans-jsr173-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.0.2</version>
<exclusions>
<exclusion>
<groupId>javax.xml</groupId>
<artifactId>jsr173</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jws</groupId>
<artifactId>jsr181-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.0</version>
<exclusions>
<exclusion>
<groupId>javax.xml</groupId>
<artifactId>jsr173</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<!--<groupId>woodstox</groupId>-->
<artifactId>wstx-asl</artifactId>
<version>3.0.1</version>
<!--<version>3.1-rc1</version>-->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>jivesoftware</groupId>
<artifactId>smack</artifactId>
<version>1.5.0</version>
<!--<version>2.2.1</version>-->
<scope>test</scope>
</dependency>
<dependency>
<groupId>jivesoftware</groupId>
<artifactId>smackx</artifactId>
<version>1.5.0</version>
<!--<version>2.2.1</version>-->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<!-- Configure which tests are included/excuded -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!--
<includes>
<include>**/*Test.*</include>
</includes>
-->
<excludes>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<dependencies>
<dependency>
<groupId>net.java.dev.jaxb2-commons</groupId>
<artifactId>jaxb-fluent-api</artifactId>
<version>2.0.1</version>
<exclusions>
<exclusion>
<groupId>com.sun.xml</groupId>
<artifactId>jaxb-xjc</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<strict>false</strict>
<verbose>false</verbose>
<args>
<!--<arg value="-Xfluent-api"/>-->
</args>
<!--
<arg>-XtoString</arg>
<arg>-Xequals</arg>
<arg>-XhashCode</arg>
-->
<!--
<schemasExcludes>
<exclude>delimiter.xsd</exclude>
</schemasExcludes>
-->
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,5 @@
This directory contains all the bad XSDs from the XMPP project that we can't process via JAXB2
For more see
http://www.xmpp.org/schemas/

View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:ietf:params:xml:ns:xmpp-bind'
xmlns='urn:ietf:params:xml:ns:xmpp-bind'
elementFormDefault='qualified'>
<xs:element name='bind'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='1'>
<xs:element name='resource' type='resourceType'/>
<xs:element name='jid' type='fullJIDType'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:simpleType name='resourceType'>
<xs:restriction base='xs:string'>
<xs:minLength value='1'/>
<xs:maxLength value='1023'/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name='fullJIDType'>
<xs:restriction base='xs:string'>
<xs:minLength value='8'/>
<xs:maxLength value='3071'/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,54 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='storage:bookmarks'
xmlns='storage:bookmarks'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0048: http://www.jabber.org/jeps/jep-0048.html
</xs:documentation>
</xs:annotation>
<xs:element name='storage'>
<xs:complexType>
<xs:choice>
<xs:element ref='url'/>
<xs:element ref='conference'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='url'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='name' type='xs:string' use='required'/>
<xs:attribute name='url' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='conference'>
<xs:complexType>
<xs:sequence>
<xs:element name='nick' type='xs:string' minOccurs='0'/>
<xs:element name='password' type='xs:string' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='autojoin' type='xs:boolean' use='optional' default='false'/>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='name' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,74 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/bytestreams'
xmlns='http://jabber.org/protocol/bytestreams'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0065: http://www.jabber.org/jeps/jep-0065.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:choice>
<xs:element ref='streamhost' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='streamhost-used' minOccurs='0'/>
<xs:element name='activate' type='empty' minOccurs='0'/>
</xs:choice>
<xs:attribute name='sid' type='xs:string' use='optional'/>
<xs:attribute name='mode' use='optional' default='tcp'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='tcp'/>
<xs:enumeration value='udp'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='streamhost'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='host' type='xs:string' use='required'/>
<xs:attribute name='zeroconf' type='xs:string' use='optional'/>
<xs:attribute name='port' type='xs:string' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='udpsuccess'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='dstaddr' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='streamhost-used'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/caps'
xmlns='http://jabber.org/protocol/caps'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0115: http://www.jabber.org/jeps/jep-0115.html
</xs:documentation>
</xs:annotation>
<xs:element name='c'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='ext' type='xs:NMTOKENS' use='optional'/>
<xs:attribute name='node' type='xs:string' use='required'/>
<xs:attribute name='ver' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/chatstates'
xmlns='http://jabber.org/protocol/chatstates'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0085: http://www.jabber.org/jeps/jep-0085.html
</xs:documentation>
</xs:annotation>
<xs:element name='active' type='empty'/>
<xs:element name='composing' type='empty'/>
<xs:element name='gone' type='empty'/>
<xs:element name='inactive' type='empty'/>
<xs:element name='paused' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,102 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/commands'
xmlns='http://jabber.org/protocol/commands'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0050: http://www.jabber.org/jeps/jep-0050.html
</xs:documentation>
</xs:annotation>
<xs:import namespace='http://www.w3.org/XML/1998/namespace'
schemaLocation='http://www.w3.org/2001/xml.xsd'/>
<xs:element name='command'>
<xs:complexType>
<xs:choice>
<xs:element ref='actions' minOccurs='0'/>
<xs:element ref='note' minOccurs='0' maxOccurs='unbounded'/>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded'/>
</xs:choice>
<xs:attribute name='action' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='execute'/>
<xs:enumeration value='cancel'/>
<xs:enumeration value='prev'/>
<xs:enumeration value='next'/>
<xs:enumeration value='complete'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='node' type='xs:string' use='required'/>
<xs:attribute name='sessionid' type='xs:string' use='optional'/>
<xs:attribute name='status' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='executing'/>
<xs:enumeration value='completed'/>
<xs:enumeration value='canceled'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='actions'>
<xs:complexType>
<xs:sequence>
<xs:element name='prev' type='empty' minOccurs='0'/>
<xs:element name='next' type='empty' minOccurs='0'/>
<xs:element name='complete' type='empty' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='prev'/>
<xs:enumeration value='next'/>
<xs:enumeration value='complete'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='note'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='info'/>
<xs:enumeration value='warn'/>
<xs:enumeration value='error'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='bad-action' type='empty'/>
<xs:element name='bad-locale' type='empty'/>
<xs:element name='bad-payload' type='empty'/>
<xs:element name='bad-sessionid' type='empty'/>
<xs:element name='malformed-action' type='empty'/>
<xs:element name='session-expired' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,201 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:xml='http://www.w3.org/XML/1998/namespace'
targetNamespace='jabber:component:accept'
xmlns='jabber:component:accept'
elementFormDefault='qualified'>
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-streams'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0114: http://www.jabber.org/jeps/jep-0114.html
</xs:documentation>
</xs:annotation>
<xs:element name='handshake' type='xs:string'/>
<xs:element name='message'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='subject'/>
<xs:element ref='body'/>
<xs:element ref='thread'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='optional' default='normal'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='chat'/>
<xs:enumeration value='error'/>
<xs:enumeration value='groupchat'/>
<xs:enumeration value='headline'/>
<xs:enumeration value='normal'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='body'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subject'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='thread' type='xs:NMTOKEN'/>
<xs:element name='presence'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='show'/>
<xs:element ref='status'/>
<xs:element ref='priority'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='subscribe'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unsubscribe'/>
<xs:enumeration value='unsubscribed'/>
<xs:enumeration value='unavailable'/>
<xs:enumeration value='probe'/>
<xs:enumeration value='error'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='show'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='away'/>
<xs:enumeration value='chat'/>
<xs:enumeration value='dnd'/>
<xs:enumeration value='xa'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name='status'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='priority' type='xs:byte'/>
<xs:element name='iq'>
<xs:complexType>
<xs:sequence>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='1'/>
<xs:element ref='error'
minOccurs='0'
maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='required'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='get'/>
<xs:enumeration value='set'/>
<xs:enumeration value='result'/>
<xs:enumeration value='error'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='error'>
<xs:complexType>
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-streams'>
<xs:group ref='err:stanzaErrorGroup'/>
<xs:element ref='err:text'
minOccurs='0'
maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='code' type='xs:byte' use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='cancel'/>
<xs:enumeration value='continue'/>
<xs:enumeration value='modify'/>
<xs:enumeration value='auth'/>
<xs:enumeration value='wait'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,200 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:xml='http://www.w3.org/XML/1998/namespace'
targetNamespace='jabber:component:connect'
xmlns='jabber:component:connect'
elementFormDefault='qualified'>
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-streams'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0114: http://www.jabber.org/jeps/jep-0114.html
</xs:documentation>
</xs:annotation>
<xs:element name='handshake' type='xs:string'/>
<xs:element name='message'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='subject'/>
<xs:element ref='body'/>
<xs:element ref='thread'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='optional' default='normal'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='chat'/>
<xs:enumeration value='error'/>
<xs:enumeration value='groupchat'/>
<xs:enumeration value='headline'/>
<xs:enumeration value='normal'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='body'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subject'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='thread' type='xs:NMTOKEN'/>
<xs:element name='presence'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='show'/>
<xs:element ref='status'/>
<xs:element ref='priority'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='subscribe'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unsubscribe'/>
<xs:enumeration value='unsubscribed'/>
<xs:enumeration value='unavailable'/>
<xs:enumeration value='probe'/>
<xs:enumeration value='error'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='show'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='away'/>
<xs:enumeration value='chat'/>
<xs:enumeration value='dnd'/>
<xs:enumeration value='xa'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name='status'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='priority' type='xs:byte'/>
<xs:element name='iq'>
<xs:complexType>
<xs:sequence>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='1'/>
<xs:element ref='error'
minOccurs='0'
maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='required'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='get'/>
<xs:enumeration value='set'/>
<xs:enumeration value='result'/>
<xs:enumeration value='error'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='error'>
<xs:complexType>
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-streams'>
<xs:group ref='err:stanzaErrorGroup'/>
<xs:element ref='err:text'
minOccurs='0'
maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='code' type='xs:byte' use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='cancel'/>
<xs:enumeration value='continue'/>
<xs:enumeration value='modify'/>
<xs:enumeration value='auth'/>
<xs:enumeration value='wait'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/features/compress'
xmlns='http://jabber.org/features/compress'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0138: http://www.jabber.org/jeps/jep-0138.html
</xs:documentation>
</xs:annotation>
<xs:element name='compression'>
<xs:complexType>
<xs:sequence>
<xs:element name='method' type='xs:NCName' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,48 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/compress'
xmlns='http://jabber.org/protocol/compress'
elementFormDefault='qualified'>
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0138: http://www.jabber.org/jeps/jep-0138.html
</xs:documentation>
</xs:annotation>
<xs:element name='compress'>
<xs:complexType>
<xs:sequence>
<xs:element name='method' type='xs:NCName' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='compressed' type='empty'/>
<xs:element name='failure'>
<xs:complexType>
<xs:choice>
<xs:element name='setup-failed' type='empty'/>
<xs:element name='processing-failed' type='empty'/>
<xs:element name='unsupported-method' type='empty'/>
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-stanzas'>
<xs:group ref='err:stanzaErrorGroup'/>
<xs:element ref='err:text' minOccurs='0'/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='roster:delimiter'
xmlns='roster:delimiter'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0083: http://www.jabber.org/jeps/jep-0083.html
</xs:documentation>
</xs:annotation>
<xs:element name='roster' type='xs:string'/>

View File

@ -0,0 +1,21 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:ietf:params:xml:ns:xmpp-e2e'
xmlns='urn:ietf:params:xml:ns:xmpp-e2e'
elementFormDefault='qualified'>
<xs:element name='e2e' type='xs:string'/>
<xs:element name='decryption-failed' type='empty'/>
<xs:element name='signature-unverified' type='empty'/>
<xs:element name='bad-timestamp' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,27 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/feature-neg'
xmlns='http://jabber.org/protocol/feature-neg'
elementFormDefault='qualified'>
<xs:import
namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0020: http://www.jabber.org/jeps/jep-0020.html
</xs:documentation>
</xs:annotation>
<xs:element name='feature'>
<xs:complexType>
<xs:sequence xmlns:data='jabber:x:data'>
<xs:element ref='data:x'/>
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,46 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/si/profile/file-transfer'
xmlns='http://jabber.org/protocol/si/profile/file-transfer'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0096: http://www.jabber.org/jeps/jep-0096.html
</xs:documentation>
</xs:annotation>
<xs:element name='file'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:element name='desc' type='xs:string'/>
<xs:element ref='range'/>
</xs:sequence>
<xs:attribute name='date' type='xs:dateTime' use='optional'/>
<xs:attribute name='hash' type='xs:string' use='optional'/>
<xs:attribute name='name' type='xs:string' use='required'/>
<xs:attribute name='size' type='xs:integer' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='range'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='length' type='xs:integer' use='optional'/>
<xs:attribute name='offset' type='xs:integer' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,31 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/geoloc'
xmlns='http://jabber.org/protocol/geoloc'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0080: http://www.jabber.org/jeps/jep-0080.html
</xs:documentation>
</xs:annotation>
<xs:element name='geoloc'>
<xs:complexType>
<xs:sequence minOccur='0'>
<xs:element name='alt' minOccurs='0' type='xs:decimal'/>
<xs:element name='bearing' minOccurs='0' type='xs:decimal'/>
<xs:element name='datum' minOccurs='0' type='xs:string'/>
<xs:element name='description' minOccurs='0' type='xs:string'/>
<xs:element name='error' minOccurs='0' type='xs:decimal'/>
<xs:element name='lat' minOccurs='1' type='xs:decimal'/>
<xs:element name='lon' minOccurs='1' type='xs:decimal'/>
<xs:element name='timestamp' minOccurs='0' type='xs:datetime'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/http-auth'
xmlns='http://jabber.org/protocol/http-auth'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0070: http://www.jabber.org/jeps/jep-0070.html
</xs:documentation>
</xs:annotation>
<xs:element name='confirm'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='id' use='required' type='xs:string'/>
<xs:attribute name='method' use='required' type='xs:NCName'/>
<xs:attribute name='url' use='required' type='xs:anyURI'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,92 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:stream='http://etherx.jabber.org/streams'
targetNamespace='http://jabber.org/protocol/httpbind'
xmlns='http://jabber.org/protocol/httpbind'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0124: http://www.jabber.org/jeps/jep-0124.html
</xs:documentation>
</xs:annotation>
<xs:import namespace='http://etherx.jabber.org/streams'
schemaLocation='http://www.xmpp.org/schemas/streams.xsd'/>
<xs:element name='body'>
<xs:complexType>
<xs:choice xmlns:stream='http://etherx.jabber.org/streams'>
<xs:element ref='stream:features'
minOccurs='0'
maxOccurs='1'/>
<xs:any namespace='urn:ietf:params:xml:ns:xmpp-tls'
minOccurs='0'
maxOccurs='1'/>
<xs:any namespace='urn:ietf:params:xml:ns:xmpp-sasl'
minOccurs='0'
maxOccurs='1'/>
<xs:any namespace='urn:ietf:params:xml:ns:xmpp-streams'
minOccurs='0'
maxOccurs='1'/>
<xs:any namespace='jabber:client'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element name='uri'
minOccurs='0'
maxOccurs='1'
type='xs:string'/>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'
processContents='lax'/>
</xs:choice>
<xs:attribute name='accept' type='xs:string' use='optional'/>
<xs:attribute name='authid' type='xs:string' use='optional'/>
<xs:attribute name='charsets' type='xs:NMTOKENS' use='optional'/>
<xs:attribute name='condition' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='host-gone'/>
<xs:enumeration value='host-unknown'/>
<xs:enumeration value='improper-addressing'/>
<xs:enumeration value='internal-server-error'/>
<xs:enumeration value='remote-connection-failed'/>
<xs:enumeration value='remote-stream-error'/>
<xs:enumeration value='see-other-uri'/>
<xs:enumeration value='system-shutdown'/>
<xs:enumeration value='undefined-condition'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='content' type='xs:string' use='optional'/>
<xs:attribute name='hold' type='xs:byte' use='optional'/>
<xs:attribute name='inactivity' type='xs:short' use='optional'/>
<xs:attribute name='key' type='xs:string' use='optional'/>
<xs:attribute name='newkey' type='xs:string' use='optional'/>
<xs:attribute name='polling' type='xs:short' use='optional'/>
<xs:attribute name='requests' type='xs:byte' use='optional'/>
<xs:attribute name='rid' type='xs:positiveInteger' use='optional'/>
<xs:attribute name='route' type='xs:string' use='optional'/>
<xs:attribute name='secure' type='xs:boolean' use='optional' default='false'/>
<xs:attribute name='sid' type='xs:string' use='optional'/>
<xs:attribute name='stream' type='xs:string' use='optional'/>
<xs:attribute name='to' type='xs:string' use='optional'/>
<xs:attribute name='type' type='xs:string' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='error'/>
<xs:enumeration value='terminate'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='wait' type='xs:short' use='optional'/>
<xs:attribute name='xml:lang' type='xs:string' use='optional'/>
<xs:anyAttribute namespace='##other' processContents='lax'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,54 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/ibb'
xmlns='http://jabber.org/protocol/ibb'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0047: http://www.jabber.org/jeps/jep-0047.html
</xs:documentation>
</xs:annotation>
<xs:element name='open'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='sid' type='xs:string' use='required'/>
<xs:attribute name='block-size' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='close'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='sid' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='data'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='sid' type='xs:string' use='required'/>
<xs:attribute name='seq' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,413 @@
<html>
<head>
<title>XMPP Schemas</title>
<!--#include virtual="/includes/head.txt" -->
<h2>XMPP Schemas</h2>
<p><em>Last Updated: 2006-10-04</em></p>
<p>The wire protocols defined in the <a href="/rfcs/">XMPP RFCs</a> and various <a href='/extensions/'>XMPP extensions</a> are described formally in terms of <a href="http://www.w3.org/TR/xmlschema-1/">W3C XML Schema</a>. This page provides links to online versions of the relevant schemas.</p>
<p><em>Note: The following table is sortable, just click on the headers (click twice to reverse the sort order).</em></p>
<table border='1' cellpadding='3' cellspacing='0' class='sortable' id='xeplist'>
<tr class='tablebody'>
<th>Namespace</th>
<th>Schema</th>
<th>Spec</th>
</tr>
<tr class='tablebody'>
<td>http://etherx.jabber.org/streams</td>
<td><a href='streams.xsd'>streams.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/activity</td>
<td><a href='activity.xsd'>activity.xsd</a></td>
<td><a href='/extensions/xep-0108.html'>XEP-0108</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/address</td>
<td><a href='address.xsd'>address.xsd</a></td>
<td><a href='/extensions/xep-0033.html'>XEP-0033</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/amp</td>
<td><a href='amp.xsd'>amp.xsd</a></td>
<td><a href='/extensions/xep-0079.html'>XEP-0079</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/amp#errors</td>
<td><a href='amp-errors.xsd'>amp-errors.xsd</a></td>
<td><a href='/extensions/xep-0079.html'>XEP-0079</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/bytestreams</td>
<td><a href='bytestreams.xsd'>bytestreams.xsd</a></td>
<td><a href='/extensions/xep-0065.html'>XEP-0065</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/caps</td>
<td><a href='caps.xsd'>caps.xsd</a></td>
<td><a href='/extensions/xep-0115.html'>XEP-0115</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/chatstates</td>
<td><a href='chatstates.xsd'>chatstates.xsd</a></td>
<td><a href='/extensions/xep-0085.html'>XEP-0085</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/commands</td>
<td><a href='commands.xsd'>commands.xsd</a></td>
<td><a href='/extensions/xep-0050.html'>XEP-0050</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/compress</td>
<td><a href='compress.xsd'>compress.xsd</a></td>
<td><a href='/extensions/xep-0138.html'>XEP-0138</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/features/compress</td>
<td><a href='compress-feature.xsd'>compress-feature.xsd</a></td>
<td><a href='/extensions/xep-0138.html'>XEP-0138</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/disco#info</td>
<td><a href='disco-info.xsd'>disco-info.xsd</a></td>
<td><a href='/extensions/xep-0030.html'>XEP-0030</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/disco#items</td>
<td><a href='disco-items.xsd'>disco-items.xsd</a></td>
<td><a href='/extensions/xep-0030.html'>XEP-0030</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/feature-neg</td>
<td><a href='feature-neg.xsd'>feature-neg.xsd</a></td>
<td><a href='/extensions/xep-0020.html'>XEP-0020</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/geoloc</td>
<td><a href='geoloc.xsd'>geoloc.xsd</a></td>
<td><a href='/extensions/xep-0080.html'>XEP-0080</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/http-auth</td>
<td><a href='http-auth.xsd'>http-auth.xsd</a></td>
<td><a href='/extensions/xep-0070.html'>XEP-0070</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/httpbind</td>
<td><a href='httpbind.xsd'>httpbind.xsd</a></td>
<td><a href='/extensions/xep-0124.html'>XEP-0124</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/ibb</td>
<td><a href='ibb.xsd'>ibb.xsd</a></td>
<td><a href='/extensions/xep-0047.html'>XEP-0047</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/mood</td>
<td><a href='mood.xsd'>mood.xsd</a></td>
<td><a href='/extensions/xep-0107.html'>XEP-0107</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/muc</td>
<td><a href='muc.xsd'>muc.xsd</a></td>
<td><a href='/extensions/xep-0045.html'>XEP-0045</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/muc#admin</td>
<td><a href='muc-admin.xsd'>muc-admin.xsd</a></td>
<td><a href='/extensions/xep-0045.html'>XEP-0045</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/muc#owner</td>
<td><a href='muc-owner.xsd'>muc-owner.xsd</a></td>
<td><a href='/extensions/xep-0045.html'>XEP-0045</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/muc#user</td>
<td><a href='muc-user.xsd'>muc-user.xsd</a></td>
<td><a href='/extensions/xep-0045.html'>XEP-0045</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/nick</td>
<td><a href='nick.xsd'>nick.xsd</a></td>
<td><a href='/extensions/xep-0172.html'>XEP-0172</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/offline</td>
<td><a href='offline.xsd'>offline.xsd</a></td>
<td><a href='/extensions/xep-0013.html'>XEP-0013</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/pubsub</td>
<td><a href='pubsub.xsd'>pubsub.xsd</a></td>
<td><a href='/extensions/xep-0060.html'>XEP-0060</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/pubsub#errors</td>
<td><a href='pubsub-errors.xsd'>pubsub-errors.xsd</a></td>
<td><a href='/extensions/xep-0060.html'>XEP-0060</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/pubsub#event</td>
<td><a href='pubsub-event.xsd'>pubsub-event.xsd</a></td>
<td><a href='/extensions/xep-0060.html'>XEP-0060</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/pubsub#owner</td>
<td><a href='pubsub-owner.xsd'>pubsub-owner.xsd</a></td>
<td><a href='/extensions/xep-0060.html'>XEP-0060</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/rosterx</td>
<td><a href='rosterx.xsd'>rosterx.xsd</a></td>
<td><a href='/extensions/xep-0144.html'>XEP-0144</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/rsm</td>
<td><a href='rsm.xsd'>rsm.xsd</a></td>
<td><a href='/extensions/xep-0059.html'>XEP-0059</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/si</td>
<td><a href='si.xsd'>si.xsd</a></td>
<td><a href='/extensions/xep-0095.html'>XEP-0095</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/si/profile/file-transfer</td>
<td><a href='file-transfer.xsd'>file-transfer.xsd</a></td>
<td><a href='/extensions/xep-0096.html'>XEP-0096</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/sipub</td>
<td><a href='sipub.xsd'>sipub.xsd</a></td>
<td><a href='/extensions/xep-0137.html'>XEP-0137</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/soap#fault</td>
<td><a href='soap-fault.xsd'>soap-fault.xsd</a></td>
<td><a href='/extensions/xep-0072.html'>XEP-0072</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/tune</td>
<td><a href='tune.xsd'>tune.xsd</a></td>
<td><a href='/extensions/xep-0095.html'>XEP-0095</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/waitinglist</td>
<td><a href='waitinglist.xsd'>waitinglist.xsd</a></td>
<td><a href='/extensions/xep-0130.html'>XEP-0130</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/xhtml-im</td>
<td><a href='xhtml-im-driver.xsd'>xhtml-im-driver.xsd</a></td>
<td><a href='/extensions/xep-0071.html'>XEP-0071</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/xhtml-im</td>
<td><a href='xhtml-im-model.xsd'>xhtml-im-model.xsd</a></td>
<td><a href='/extensions/xep-0071.html'>XEP-0071</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/xhtml-im</td>
<td><a href='xhtml-im-wrapper.xsd'>xhtml-im-wrapper.xsd</a></td>
<td><a href='/extensions/xep-0071.html'>XEP-0071</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/xdata-layout</td>
<td><a href='xdata-layout.xsd'>xdata-layout.xsd</a></td>
<td><a href='/extensions/xep-0141.html'>XEP-0141</a></td>
</tr>
<tr class='tablebody'>
<td>http://jabber.org/protocol/xdata-validate</td>
<td><a href='xdata-validate.xsd'>xdata-validate.xsd</a></td>
<td><a href='/extensions/xep-0122.html'>XEP-0122</a></td>
</tr>
<!-- old-style jabber: namespaces -->
<tr class='tablebody'>
<td>jabber:client</td>
<td><a href='jabber-client.xsd'>jabber-client.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>jabber:component:accept</td>
<td><a href='component-accept.xsd'>component-accept.xsd</a></td>
<td><a href='/extensions/xep-0114.html'>XEP-0114</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:component:connect</td>
<td><a href='component-connect.xsd'>component-connect.xsd</a></td>
<td><a href='/extensions/xep-0114.html'>XEP-0114</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:auth</td>
<td><a href='iq-auth.xsd'>iq-auth.xsd</a></td>
<td><a href='/extensions/xep-0078.html'>XEP-0078</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:gateway</td>
<td><a href='iq-gateway.xsd'>iq-gateway.xsd</a></td>
<td><a href='/extensions/xep-0100.html'>XEP-0100</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:last</td>
<td><a href='iq-last.xsd'>iq-last.xsd</a></td>
<td><a href='/extensions/xep-0012.html'>XEP-0012</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:oob</td>
<td><a href='iq-oob.xsd'>iq-oob.xsd</a></td>
<td><a href='/extensions/xep-0066.html'>XEP-0066</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:pass</td>
<td><a href='iq-pass.xsd'>iq-pass.xsd</a></td>
<td><a href='/extensions/xep-0003.html'>XEP-0003</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:privacy</td>
<td><a href='privacy.xsd'>privacy.xsd</a></td>
<td><a href='/rfcs/rfc3921.html'>RFC 3921</a> *</td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:private</td>
<td><a href='iq-private.xsd'>iq-private.xsd</a></td>
<td><a href='/extensions/xep-0049.html'>XEP-0049</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:register</td>
<td><a href='iq-register.xsd'>iq-register.xsd</a></td>
<td><a href='/extensions/xep-0077.html'>XEP-0077</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:roster</td>
<td><a href='roster.xsd'>roster.xsd</a></td>
<td><a href='/rfcs/rfc3921.html'>RFC 3921</a> *</td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:rpc</td>
<td><a href='jabber-rpc.xsd'>jabber-rpc.xsd</a></td>
<td><a href='/extensions/xep-0009.html'>XEP-0009</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:search</td>
<td><a href='iq-search.xsd'>iq-search.xsd</a></td>
<td><a href='/extensions/xep-0055.html'>XEP-0055</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:time</td>
<td><a href='iq-time.xsd'>iq-time.xsd</a></td>
<td><a href='/extensions/xep-0090.html'>XEP-0090</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:iq:version</td>
<td><a href='iq-version.xsd'>iq-version.xsd</a></td>
<td><a href='/extensions/xep-0092.html'>XEP-0092</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:server</td>
<td><a href='jabber-server.xsd'>jabber-server.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>jabber:server:dialback</td>
<td><a href='dialback.xsd'>dialback.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>jabber:x:data</td>
<td><a href='x-data.xsd'>x-data.xsd</a></td>
<td><a href='/extensions/xep-0004.html'>XEP-0004</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:delay</td>
<td><a href='x-delay.xsd'>x-delay.xsd</a></td>
<td><a href='/extensions/xep-0091.html'>XEP-0091</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:encrypted</td>
<td><a href='x-encrypted.xsd'>x-encrypted.xsd</a></td>
<td><a href='/extensions/xep-0027.html'>XEP-0027</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:event</td>
<td><a href='x-event.xsd'>x-event.xsd</a></td>
<td><a href='/extensions/xep-0022.html'>XEP-0022</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:expire</td>
<td><a href='x-expire.xsd'>x-expire.xsd</a></td>
<td><a href='/extensions/xep-0023.html'>XEP-0023</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:oob</td>
<td><a href='x-oob.xsd'>x-oob.xsd</a></td>
<td><a href='/extensions/xep-0066.html'>XEP-0066</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:roster</td>
<td><a href='x-roster.xsd'>x-roster.xsd</a></td>
<td><a href='/extensions/xep-0093.html'>XEP-0093</a></td>
</tr>
<tr class='tablebody'>
<td>jabber:x:signed</td>
<td><a href='x-signed.xsd'>x-signed.xsd</a></td>
<td><a href='/extensions/xep-0027.html'>XEP-0027</a></td>
</tr>
<tr class='tablebody'>
<td>roster:delimiter</td>
<td><a href='delimiter.xsd'>delimiter.xsd</a></td>
<td><a href='/extensions/xep-0083.html'>XEP-0083</a></td>
</tr>
<tr class='tablebody'>
<td>storage:bookmarks</td>
<td><a href='bookmarks.xsd'>bookmarks.xsd</a></td>
<td><a href='/extensions/xep-0048.html'>XEP-0048</a></td>
</tr>
<tr class='tablebody'>
<td>storage:rosternotes</td>
<td><a href='rosternotes.xsd'>rosternotes.xsd</a></td>
<td><a href='/extensions/xep-0045.html'>XEP-0045</a></td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-bind</td>
<td><a href='bind.xsd'>bind.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-e2e</td>
<td><a href='e2e.xsd'>e2e.xsd</a></td>
<td><a href='/rfcs/rfc3923.html'>RFC 3923</a></td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-sasl</td>
<td><a href='sasl.xsd'>sasl.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-session</td>
<td><a href='session.xsd'>session.xsd</a></td>
<td><a href='/rfcs/rfc3921.html'>RFC 3921</a> *</td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-stanzas</td>
<td><a href='stanzaerror.xsd'>stanzaerror.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-streams</td>
<td><a href='streamerror.xsd'>streamerror.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>urn:ietf:params:xml:ns:xmpp-tls</td>
<td><a href='tls.xsd'>tls.xsd</a></td>
<td><a href='/rfcs/rfc3920.html'>RFC 3920</a> *</td>
</tr>
<tr class='tablebody'>
<td>vcard-temp:x:update</td>
<td><a href='vcard-avatar.xsd'>vcard-avatar.xsd</a></td>
<td><a href='/extensions/xep-0153.html'>XEP-0153</a></td>
</tr>
</table>
<p>* Note: The schemas provided here are the latest versions from the <a href="http://www.jabberstudio.org/cgi-bin/viewcvs.cgi/cvs/xmpp/schemas/">CVS repository</a>, incorporating expected changes as reflected in <a href='/internet-drafts/draft-saintandre-rfc3920bis-00.html'>rfc3920bis</a> and <a href='/internet-drafts/draft-saintandre-rfc3921bis-00.html'>rfc3921bis</a>.</p>
<!--#include virtual="/includes/foot.txt" -->

View File

@ -0,0 +1,63 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:register'
xmlns='jabber:iq:register'
elementFormDefault='qualified'>
<xs:import
namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:import
namespace='jabber:x:oob'
schemaLocation='http://jabber.org/protocol/oob/x-oob.xsd'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0077: http://www.jabber.org/jeps/jep-0077.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence xmlns:xdata='jabber:x:data'
xmlns:xoob='jabber:x:oob'>
<xs:choice minOccurs='0'>
<xs:sequence minOccurs='0'>
<xs:element name='registered' type='empty' minOccurs='0'/>
<xs:element name='instructions' type='xs:string' minOccurs='0'/>
<xs:element name='username' type='xs:string' minOccurs='0'/>
<xs:element name='nick' type='xs:string' minOccurs='0'/>
<xs:element name='password' type='xs:string' minOccurs='0'/>
<xs:element name='name' type='xs:string' minOccurs='0'/>
<xs:element name='first' type='xs:string' minOccurs='0'/>
<xs:element name='last' type='xs:string' minOccurs='0'/>
<xs:element name='email' type='xs:string' minOccurs='0'/>
<xs:element name='address' type='xs:string' minOccurs='0'/>
<xs:element name='city' type='xs:string' minOccurs='0'/>
<xs:element name='state' type='xs:string' minOccurs='0'/>
<xs:element name='zip' type='xs:string' minOccurs='0'/>
<xs:element name='phone' type='xs:string' minOccurs='0'/>
<xs:element name='url' type='xs:string' minOccurs='0'/>
<xs:element name='date' type='xs:string' minOccurs='0'/>
<xs:element name='misc' type='xs:string' minOccurs='0'/>
<xs:element name='text' type='xs:string' minOccurs='0'/>
<xs:element name='key' type='xs:string' minOccurs='0'/>
</xs:sequence>
<xs:element name='remove' type='empty' minOccurs='0'/>
</xs:choice>
<xs:element ref='xdata:x' minOccurs='0'/>
<xs:element ref='xoob:x' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,47 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:search'
xmlns='jabber:iq:search'
elementFormDefault='qualified'>
<xs:import namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0055: http://www.jabber.org/jeps/jep-0055.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:choice>
<xs:all xmlns:xdata='jabber:x:data'>
<xs:element name='instructions' type='xs:string'/>
<xs:element name='first' type='xs:string'/>
<xs:element name='last' type='xs:string'/>
<xs:element name='nick' type='xs:string'/>
<xs:element name='email' type='xs:string'/>
<xs:element ref='xdata:x' minOccurs='0'/>
</xs:all>
<xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:all>
<xs:element name='first' type='xs:string'/>
<xs:element name='last' type='xs:string'/>
<xs:element name='nick' type='xs:string'/>
<xs:element name='email' type='xs:string'/>
</xs:all>
<xs:attribute name='jid' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,152 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:rpc'
xmlns='jabber:iq:rpc'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0009: http://www.jabber.org/jeps/jep-0009.html
There is no official XML schema for XML-RPC. The main body
of this schema has been borrowed from an unofficial schema
representation contained in the book "Processing XML With
Java" by Elliotte Rusty Harold, as located at:
http://www.ibiblio.org/xml/books/xmljava/chapters/ch02s05.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='1'>
<xs:element ref='methodCall'/>
<xs:element ref='methodResponse'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="methodCall">
<xs:complexType>
<xs:all>
<xs:element name="methodName">
<xs:simpleType>
<xs:restriction base="ASCIIString">
<xs:pattern value="([A-Za-z0-9]|/|\.|:|_)*" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="params" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="param" type="ParamType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="methodResponse">
<xs:complexType>
<xs:choice>
<xs:element name="params">
<xs:complexType>
<xs:sequence>
<xs:element name="param" type="ParamType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="fault">
<!-- What can appear inside a fault is very restricted -->
<xs:complexType>
<xs:sequence>
<xs:element name="value">
<xs:complexType>
<xs:sequence>
<xs:element name="struct">
<xs:complexType>
<xs:sequence>
<xs:element name="member"
type="MemberType">
</xs:element>
<xs:element name="member"
type="MemberType">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name="ParamType">
<xs:sequence>
<xs:element name="value" type="ValueType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ValueType" mixed="true">
<xs:choice>
<xs:element name="i4" type="xs:int"/>
<xs:element name="int" type="xs:int"/>
<xs:element name="string" type="ASCIIString"/>
<xs:element name="double" type="xs:decimal"/>
<xs:element name="Base64" type="xs:base64Binary"/>
<xs:element name="boolean" type="NumericBoolean"/>
<xs:element name="dateTime.iso8601" type="xs:dateTime"/>
<xs:element name="array" type="ArrayType"/>
<xs:element name="struct" type="StructType"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="StructType">
<xs:sequence>
<xs:element name="member" type="MemberType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="MemberType">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="value" type="ValueType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayType">
<xs:sequence>
<xs:element name="data">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="ValueType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ASCIIString">
<xs:restriction base="xs:string">
<xs:pattern value="([ -~]|\n|\r|\t)*" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NumericBoolean">
<xs:restriction base="xs:boolean">
<xs:pattern value="0|1" />
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,93 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/mood'
xmlns='http://jabber.org/protocol/mood'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0107: http://www.jabber.org/jeps/jep-0107.html
</xs:documentation>
</xs:annotation>
<xs:element name='mood'>
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name='afraid' type='empty'/>
<xs:element name='amazed' type='empty'/>
<xs:element name='angry' type='empty'/>
<xs:element name='annoyed' type='empty'/>
<xs:element name='anxious' type='empty'/>
<xs:element name='aroused' type='empty'/>
<xs:element name='ashamed' type='empty'/>
<xs:element name='bored' type='empty'/>
<xs:element name='brave' type='empty'/>
<xs:element name='calm' type='empty'/>
<xs:element name='cold' type='empty'/>
<xs:element name='confused' type='empty'/>
<xs:element name='contented' type='empty'/>
<xs:element name='cranky' type='empty'/>
<xs:element name='curious' type='empty'/>
<xs:element name='depressed' type='empty'/>
<xs:element name='disappointed' type='empty'/>
<xs:element name='disgusted' type='empty'/>
<xs:element name='distracted' type='empty'/>
<xs:element name='embarrassed' type='empty'/>
<xs:element name='excited' type='empty'/>
<xs:element name='flirtatious' type='empty'/>
<xs:element name='frustrated' type='empty'/>
<xs:element name='grumpy' type='empty'/>
<xs:element name='guilty' type='empty'/>
<xs:element name='happy' type='empty'/>
<xs:element name='hot' type='empty'/>
<xs:element name='humbled' type='empty'/>
<xs:element name='humiliated' type='empty'/>
<xs:element name='hungry' type='empty'/>
<xs:element name='hurt' type='empty'/>
<xs:element name='impressed' type='empty'/>
<xs:element name='in_awe' type='empty'/>
<xs:element name='in_love' type='empty'/>
<xs:element name='indignant' type='empty'/>
<xs:element name='interested' type='empty'/>
<xs:element name='intoxicated' type='empty'/>
<xs:element name='invincible' type='empty'/>
<xs:element name='jealous' type='empty'/>
<xs:element name='lonely' type='empty'/>
<xs:element name='mean' type='empty'/>
<xs:element name='moody' type='empty'/>
<xs:element name='nervous' type='empty'/>
<xs:element name='neutral' type='empty'/>
<xs:element name='offended' type='empty'/>
<xs:element name='playful' type='empty'/>
<xs:element name='proud' type='empty'/>
<xs:element name='relieved' type='empty'/>
<xs:element name='remorseful' type='empty'/>
<xs:element name='restless' type='empty'/>
<xs:element name='sad' type='empty'/>
<xs:element name='sarcastic' type='empty'/>
<xs:element name='serious' type='empty'/>
<xs:element name='shocked' type='empty'/>
<xs:element name='shy' type='empty'/>
<xs:element name='sick' type='empty'/>
<xs:element name='sleepy' type='empty'/>
<xs:element name='stressed' type='empty'/>
<xs:element name='surprised' type='empty'/>
<xs:element name='thirsty' type='empty'/>
<xs:element name='worried' type='empty'/>
</xs:choice>
<xs:element name='text' minOccurs='0' type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,45 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/muc#owner'
xmlns='http://jabber.org/protocol/muc#owner'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
</xs:documentation>
</xs:annotation>
<xs:import
namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:element name='query'>
<xs:complexType>
<xs:choice xmlns:xdata='jabber:x:data' minOccurs='0'>
<xs:element ref='xdata:x'/>
<xs:element ref='destroy'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='destroy'>
<xs:complexType>
<xs:sequence>
<xs:element name='password' type='xs:string' minOccurs='0'/>
<xs:element name='reason' type='xs:string' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='jid' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/nick'
xmlns='http://jabber.org/protocol/nick'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0172: http://www.jabber.org/jeps/jep-0172.html
</xs:documentation>
</xs:annotation>
<xs:element name='nick' type='xs:string'/>
</xs:schema>

View File

@ -0,0 +1,39 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/offline'
xmlns='http://jabber.org/protocol/offline'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0013: http://www.jabber.org/jeps/jep-0013.html
</xs:documentation>
</xs:annotation>
<xs:element name='offline'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:attribute name='action' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='remove'/>
<xs:enumeration value='view'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='optional'/>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,108 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:privacy'
xmlns='jabber:iq:privacy'
elementFormDefault='qualified'>
<xs:element name='query'>
<xs:complexType>
<xs:sequence>
<xs:element ref='active'
minOccurs='0'/>
<xs:element ref='default'
minOccurs='0'/>
<xs:element ref='list'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='active'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:NMTOKEN'>
<xs:attribute name='name'
type='xs:string'
use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='default'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:NMTOKEN'>
<xs:attribute name='name'
type='xs:string'
use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='list'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='name'
type='xs:string'
use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element name='iq'
minOccurs='0'
type='empty'/>
<xs:element name='message'
minOccurs='0'
type='empty'/>
<xs:element name='presence-in'
minOccurs='0'
type='empty'/>
<xs:element name='presence-out'
minOccurs='0'
type='empty'/>
</xs:sequence>
<xs:attribute name='action' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='allow'/>
<xs:enumeration value='deny'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='order'
type='xs:unsignedInt'
use='required'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='group'/>
<xs:enumeration value='jid'/>
<xs:enumeration value='subscription'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='value'
type='xs:string'
use='optional'/>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/pubsub#errors'
xmlns='http://jabber.org/protocol/pubsub#errors'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
This namespace is used for error reporting only, as
defined in JEP-0060:
http://www.jabber.org/jeps/jep-0060.html
</xs:documentation>
</xs:annotation>
<xs:element name='closed-node' type='empty'/>
<xs:element name='configuration-required' type='empty'/>
<xs:element name='invalid-jid' type='empty'/>
<xs:element name='invalid-options' type='empty'/>
<xs:element name='invalid-payload' type='empty'/>
<xs:element name='invalid-subid' type='empty'/>
<xs:element name='item-forbidden' type='empty'/>
<xs:element name='item-required' type='empty'/>
<xs:element name='jid-required' type='empty'/>
<xs:element name='max-nodes-exceeded' type='empty'/>
<xs:element name='nodeid-required' type='empty'/>
<xs:element name='not-in-roster-group' type='empty'/>
<xs:element name='not-subscribed' type='empty'/>
<xs:element name='payload-too-big' type='empty'/>
<xs:element name='payload-required' type='empty'/>
<xs:element name='pending-subscription' type='empty'/>
<xs:element name='presence-subscription-required' type='empty'/>
<xs:element name='subid-required' type='empty'/>
<xs:element name='unsupported'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='feature' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='collections'/>
<xs:enumeration value='config-node'/>
<xs:enumeration value='create-and-configure'/>
<xs:enumeration value='create-nodes'/>
<xs:enumeration value='delete-any'/>
<xs:enumeration value='delete-nodes'/>
<xs:enumeration value='get-pending'/>
<xs:enumeration value='instant-nodes'/>
<xs:enumeration value='item-ids'/>
<xs:enumeration value='leased-subscription'/>
<xs:enumeration value='manage-subscriptions'/>
<xs:enumeration value='meta-data'/>
<xs:enumeration value='modify-affiliations'/>
<xs:enumeration value='multi-collection'/>
<xs:enumeration value='multi-subscribe'/>
<xs:enumeration value='outcast-affiliation'/>
<xs:enumeration value='persistent-items'/>
<xs:enumeration value='presence-notifications'/>
<xs:enumeration value='publish'/>
<xs:enumeration value='publisher-affiliation'/>
<xs:enumeration value='purge-nodes'/>
<xs:enumeration value='retract-items'/>
<xs:enumeration value='retrieve-affiliations'/>
<xs:enumeration value='retrieve-default'/>
<xs:enumeration value='retrieve-items'/>
<xs:enumeration value='retrieve-subscriptions'/>
<xs:enumeration value='subscribe'/>
<xs:enumeration value='subscription-options'/>
<xs:enumeration value='subscription-notifications'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='unsupported-access-model' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,139 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/pubsub#event'
xmlns='http://jabber.org/protocol/pubsub#event'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0060: http://www.jabber.org/jeps/jep-0060.html
</xs:documentation>
</xs:annotation>
<xs:import
namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:element name='event'>
<xs:complexType>
<xs:choice minOccurs='0'>
<xs:element ref='collection'/>
<xs:element ref='configuration'/>
<xs:element ref='delete'/>
<xs:element ref='items'/>
<xs:element ref='purge'/>
<xs:element ref='subscription'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='collection'>
<xs:complexType>
<xs:sequence minOccurs='1'>
<xs:element ref='node'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='configuration'>
<xs:complexType>
<xs:sequence minOccurs='0' xmlns:xdata='jabber:x:data'>
<xs:element ref='xdata:x'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='delete'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='items'>
<xs:complexType>
<xs:choice>
<xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='retract' minOccurs='0' maxOccurs='unbounded'/>
</xs:choice>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:choice minOccurs='0'>
<xs:any namespace='##other'/>
</xs:choice>
<xs:attribute name='id' type='xs:string' use='optional'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='node'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='id' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='purge'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='retract'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='id' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subscription'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
<xs:attribute name='subid' type='xs:string' use='optional'/>
<xs:attribute name='subscription' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='none'/>
<xs:enumeration value='pending'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unconfigured'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,127 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/pubsub#owner'
xmlns='http://jabber.org/protocol/pubsub#owner'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0060: http://www.jabber.org/jeps/jep-0060.html
</xs:documentation>
</xs:annotation>
<xs:import
namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:element name='pubsub'>
<xs:complexType>
<xs:choice>
<xs:element ref='affiliations'/>
<xs:element ref='configure'/>
<xs:element ref='delete'/>
<xs:element ref='purge'/>
<xs:element ref='subscriptions'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='affiliations'>
<xs:complexType>
<xs:sequence>
<xs:element ref='affiliation' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='affiliation'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='affiliation' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='none'/>
<xs:enumeration value='outcast'/>
<xs:enumeration value='owner'/>
<xs:enumeration value='publisher'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='configure'>
<xs:complexType>
<xs:choice minOccurs='0' xmlns:xdata='jabber:x:data'>
<xs:element ref='xdata:x'/>
</xs:choice>
<xs:attribute name='node' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='default'>
<xs:complexType>
<xs:choice minOccurs='0' xmlns:xdata='jabber:x:data'>
<xs:element ref='xdata:x'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='delete'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='purge'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subscriptions'>
<xs:complexType>
<xs:sequence>
<xs:element ref='subscription' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='subscription'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='subscription' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='none'/>
<xs:enumeration value='pending'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unconfigured'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,203 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/pubsub'
xmlns='http://jabber.org/protocol/pubsub'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0060: http://www.jabber.org/jeps/jep-0060.html
</xs:documentation>
</xs:annotation>
<xs:import
namespace='jabber:x:data'
schemaLocation='http://jabber.org/protocol/x-data/x-data.xsd'/>
<xs:element name='pubsub'>
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element ref='create'/>
<xs:element ref='configure' minOccurs='0'/>
</xs:sequence>
<xs:sequence>
<xs:element ref='subscribe' minOccurs='0'/>
<xs:element ref='options' minOccurs='0'/>
</xs:sequence>
<xs:choice minOccurs='0'>
<xs:element ref='affiliations'/>
<xs:element ref='items'/>
<xs:element ref='publish'/>
<xs:element ref='retract'/>
<xs:element ref='subscription'/>
<xs:element ref='subscriptions'/>
<xs:element ref='unsubscribe'/>
</xs:choice>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='affiliations'>
<xs:complexType>
<xs:sequence>
<xs:element ref='affiliation' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='affiliation'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='affiliation' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='outcast'/>
<xs:enumeration value='owner'/>
<xs:enumeration value='publisher'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='configure'>
<xs:complexType>
<xs:choice minOccurs='0' xmlns:xdata='jabber:x:data'>
<xs:element ref='xdata:x'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='create'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='items'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='max_items' type='xs:positiveInteger' use='optional'/>
<xs:attribute name='node' type='xs:string' use='required'/>
<xs:attribute name='subid' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:any namespace='##other'/>
</xs:sequence>
<xs:attribute name='id' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='options'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:any namespace='jabber:x:data'/>
</xs:sequence>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
<xs:attribute name='subid' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='publish'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='retract'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='required'/>
<xs:attribute name='notify' type='xs:boolean' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='subscribe-options'>
<xs:complexType>
<xs:sequence>
<xs:element name='required' type='empty' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='subscribe'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subscriptions'>
<xs:complexType>
<xs:element ref='subscription' minOccurs='0' maxOccurs='unbounded'/>
</xs:complexType>
</xs:element>
<xs:element name='subscription'>
<xs:complexType>
<xs:sequence>
<xs:element ref='subscribe-options' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
<xs:attribute name='subid' type='xs:string' use='optional'/>
<xs:attribute name='subscription' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='none'/>
<xs:enumeration value='pending'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unconfigured'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='unsubscribe'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
<xs:attribute name='subid' type='xs:string' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,40 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/rsm'
xmlns='http://jabber.org/protocol/rsm'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0059: http://www.jabber.org/jeps/jep-0059.html
</xs:documentation>
</xs:annotation>
<xs:element name='set'>
<xs:complexType>
<xs:sequence>
<xs:element name='after' type='xs:string' minOccurs='0' maxOccurs='1'/>
<xs:element name='before' type='xs:string' minOccurs='0' maxOccurs='1'/>
<xs:element name='count' type='xs:int' minOccurs='0' maxOccurs='1'/>
<xs:element ref='first' minOccurs='0' maxOccurs='1'/>
<xs:element name='index' type='xs:int' minOccurs='0' maxOccurs='1'/>
<xs:element name='last' type='xs:string' minOccurs='0' maxOccurs='1'/>
<xs:element name='max' type='xs:int' minOccurs='0' maxOccurs='1'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='first'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='index' type='xs:int' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/shim'
xmlns='http://jabber.org/protocol/shim'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0131: http://www.jabber.org/jeps/jep-0131.html
</xs:documentation>
</xs:annotation>
<xs:element name='headers'>
<xs:complexType>
<xs:sequence>
<xs:element ref='header' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='header'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='name' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,47 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/si'
xmlns='http://jabber.org/protocol/si'
elementFormDefault='qualified'>
<xs:import
namespace='http://jabber.org/protocol/feature-neg'
schemaLocation='http://jabber.org/protocol/feature-neg/feature-neg.xsd'/>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0095: http://www.jabber.org/jeps/jep-0095.html
</xs:documentation>
</xs:annotation>
<xs:element name='si'>
<xs:annotation>
<xs:documentation>
This is the root content element. All other elements in
this namespace are for communicating error information.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice xmlns:fneg='http://jabber.org/protocol/feature-neg'>
<xs:element ref='fneg:feature' minOccurs='0'/>
<xs:any namespace='##other' minOccurs='0'/>
</xs:choice>
<xs:attribute name='id' type='xs:string' use='optional'/>
<xs:attribute name='mime-type' type='xs:string' use='optional'/>
<xs:attribute name='profile' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='bad-profile' type='empty'/>
<xs:element name='no-valid-streams' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,49 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/sipub'
xmlns='http://jabber.org/protocol/sipub'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0137: http://www.jabber.org/jeps/jep-0137.html
</xs:documentation>
</xs:annotation>
<xs:element name='sipub'>
<xs:annotation>
<xs:documentation>This is the root content element for advertising a stream.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice>
<xs:any namespace='##other' minOccurs='1' maxOccurs='1'/>
</xs:choice>
<xs:attribute name='id' type='xs:string' use='required'/>
<xs:attribute name='from' type='xs:string' use='optional'/>
<xs:attribute name='mime-type' type='xs:string' use='optional'/>
<xs:attribute name='profile' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='start'>
<xs:annotation>
<xs:documentation>This is the element for requesting retrieval of a stream.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name='id' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='starting'>
<xs:annotation>
<xs:documentation>This is the element for specifying the stream to be retrieved.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name='sid' type='xs:string' use='required'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/soap#fault'
xmlns='http://jabber.org/protocol/soap#fault'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0072: http://www.jabber.org/jeps/jep-0072.html
</xs:documentation>
</xs:annotation>
<xs:element name='DataEncodingUnknown' type='empty'/>
<xs:element name='MustUnderstand' type='empty'/>
<xs:element name='Receiver' type='empty'/>
<xs:element name='Sender' type='empty'/>
<xs:element name='VersionMismatch' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/tune'
xmlns='http://jabber.org/protocol/tune'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0118: http://www.jabber.org/jeps/jep-0118.html
</xs:documentation>
</xs:annotation>
<xs:element name='tune'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:element name='artist' type='xs:string' minOccurs='0'/>
<xs:element name='title' type='xs:string' minOccurs='0'/>
<xs:element name='source' type='xs:string' minOccurs='0'/>
<xs:element name='track' type='xs:string' minOccurs='0'/>
<xs:element name='length' type='xs:unsignedShort' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='vcard-temp:x:update'
xmlns='vcard-temp:x:update'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0153: http://www.jabber.org/jeps/jep-0153.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element name='photo' minOccurs='0' type='xs:base64Binary'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,79 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/waitinglist'
xmlns='http://jabber.org/protocol/waitinglist'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0130: http://www.jabber.org/jeps/jep-0130.html
</xs:documentation>
</xs:annotation>
<xs:import namespace='jabber:client'/>
<xs:element name='waitlist'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='1'>>
<xs:all xmlns:xmpp='jabber:client'>
<xs:element ref='uri'/>
<xs:element ref='name' minOccurs='0'/>
<xs:element ref='xmpp:error' minOccurs='0'/>
</xs:all>
<xs:element ref='remove'/>
</xs:choice>
<xs:attribute name='id'
type='xs:string'
use='optional'/>
<xs:attribute name='jid'
type='xs:string'
use='optional'/>
<xs:attribute name='type'
use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='error'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='uri' type='xs:string'>
<xs:complexType>
<xs:attribute name='scheme'
type='xs:NCNAME'
use='required'/>
</xs:complexType>
</xs:element>
<xs:element name='name' type='string1023'/>
<xs:element name='remove' type='empty'/>
<xs:simpleType name='string1023'>
<xs:restriction base='xs:string'>
<xs:maxLength value='1023'/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,111 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:data'
xmlns='jabber:x:data'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0004: http://www.jabber.org/jeps/jep-0004.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element name='instructions'
minOccurs='0'
maxOccurs='unbounded'
type='xs:string'/>
<xs:element name='title' minOccurs='0' type='xs:string'/>
<xs:element ref='field' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='reported' minOccurs='0' maxOccurs='1'/>
<xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='cancel'/>
<xs:enumeration value='form'/>
<xs:enumeration value='result'/>
<xs:enumeration value='submit'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='field'>
<xs:complexType>
<xs:sequence>
<xs:element name='desc' minOccurs='0' type='xs:string'/>
<xs:element name='required' minOccurs='0' type='empty'/>
<xs:element ref='value' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='option' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='label' type='xs:string' use='optional'/>
<xs:attribute name='type' use='optional' default='text-single'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='boolean'/>
<xs:enumeration value='fixed'/>
<xs:enumeration value='hidden'/>
<xs:enumeration value='jid-multi'/>
<xs:enumeration value='jid-single'/>
<xs:enumeration value='list-multi'/>
<xs:enumeration value='list-single'/>
<xs:enumeration value='text-multi'/>
<xs:enumeration value='text-private'/>
<xs:enumeration value='text-single'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='var' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='option'>
<xs:complexType>
<xs:sequence>
<xs:element ref='value'/>
</xs:sequence>
<xs:attribute name='label' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='value' type='xs:string'/>
<xs:element name='reported'>
<xs:complexType>
<xs:sequence>
<xs:element ref='field' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
<!--
<xs:annotation>
<xs:documentation>
When contained in a "reported" element, the "field" element
SHOULD NOT contain a "value" child.
</xs:documentation>
</xs:annotation>
-->
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element ref='field' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,27 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:delay'
xmlns='jabber:x:delay'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0091: http://www.jabber.org/jeps/jep-0091.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='from' type='xs:string' use='optional'/>
<xs:attribute name='stamp' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:encrypted'
xmlns='jabber:x:encrypted'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0027: http://www.jabber.org/jeps/jep-0027.html
</xs:documentation>
</xs:annotation>
<xs:element name='x' type='xs:string'/>
</xs:schema>

View File

@ -0,0 +1,34 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:event'
xmlns='jabber:x:event'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0022: http://www.jabber.org/jeps/jep-0022.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element name='offline' minOccurs='0' type='empty'/>
<xs:element name='delivered' minOccurs='0' type='empty'/>
<xs:element name='displayed' minOccurs='0' type='empty'/>
<xs:element name='composing' minOccurs='0' type='empty'/>
<xs:element name='id' minOccurs='0' type='xs:NMTOKEN'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:expire'
xmlns='jabber:x:expire'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0023: http://www.jabber.org/jeps/jep-0023.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='seconds' type='xs:unsignedLong' use='required'/>
<xs:attribute name='stored' type='xs:unsignedLong' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,25 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:oob'
xmlns='jabber:x:oob'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0066: http://www.jabber.org/jeps/jep-0066.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element name='url' type='xs:string' minOccurs='1'/>
<xs:element name='desc' type='xs:string' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,37 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:roster'
xmlns='jabber:x:roster'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0093: http://www.jabber.org/jeps/jep-0093.html
NOTE WELL: This protocol has been superseded by JEP-0144:
http://www.jabber.org/jeps/jep-0144.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element name='group' type='xs:string' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='name' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:x:signed'
xmlns='jabber:x:signed'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0027: http://www.jabber.org/jeps/jep-0027.html
</xs:documentation>
</xs:annotation>
<xs:element name='x' type='xs:string'/>
</xs:schema>

View File

@ -0,0 +1,60 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/xdata-layout'
xmlns='http://jabber.org/protocol/xdata-layout'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0141: http://www.jabber.org/jeps/jep-0141.html
</xs:documentation>
</xs:annotation>
<xs:element name='page'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='text' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='section' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='fieldref' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='reportedref' minOccurs='0' maxOccurs='unbounded'/>
</xs:choice>
<xs:attribute name='label' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='section'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='text' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='section' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='fieldref' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='reportedref' minOccurs='0' maxOccurs='unbounded'/>
</xs:choice>
<xs:attribute name='label' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='fieldref'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='var' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='reportedref' type='empty'/>
<xs:element name='text' type='xs:string'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,65 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/xdata-validate'
xmlns='http://jabber.org/protocol/xdata-validate'
elementFormDefault='qualified'>
<xs:element name='validate'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='1'>
<xs:element ref='basic'/>
<xs:element ref='open'/>
<xs:element ref='range'/>
<xs:element ref='regex'/>
</xs:choice>
<xs:element ref='list-range' minOccurs='0' maxOccurs='1'/>
</xs:sequence>
<xs:attribute name='datatype'
type='xs:string'
use='optional'
default='xs:string'/>
</xs:complexType>
</xs:element>
<xs:element name='basic' type='empty'/>
<xs:element name='open' type='empty'/>
<xs:element name='range'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='min' use='optional'/>
<xs:attribute name='max' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='regex' type='xs:string'/>
<xs:element name='list-range'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='min'
type='xs:unsignedInteger'
use='optional'/>
<xs:attribute name='max'
type='xs:unsignedInteger'
use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
This is the XML Schema Block Phrasal support module for XHTML
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
</xs:annotation>
<xs:annotation>
<xs:documentation>
Block Phrasal
This module declares the elements and their attributes used to
support block-level phrasal markup.
This is the XML Schema block phrasal elements module for XHTML
* address, blockquote, pre, h1, h2, h3, h4, h5, h6
</xs:documentation>
<xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_textmodule"/>
</xs:annotation>
<xs:import namespace="http://www.w3.org/XML/1998/namespace">
<xs:annotation>
<xs:documentation>
This import brings in the XML namespace attributes
The module itself does not provide the schemaLocation
and expects the driver schema to provide the
actual SchemaLocation.
</xs:documentation>
</xs:annotation>
</xs:import>
<!-- address -->
<xs:attributeGroup name="address.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="address.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="address.type" mixed="true">
<xs:group ref="address.content"/>
<xs:attributeGroup ref="address.attlist"/>
</xs:complexType>
<xs:element name="address" type="address.type"/>
<!-- blockquote -->
<xs:attributeGroup name="blockquote.attlist">
<xs:attributeGroup ref="Common.attrib"/>
<xs:attribute name="cite" type="URI"/>
</xs:attributeGroup>
<xs:group name="blockquote.content">
<xs:sequence>
<xs:group ref="Block.mix" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="blockquote.type">
<xs:group ref="blockquote.content"/>
<xs:attributeGroup ref="blockquote.attlist"/>
</xs:complexType>
<xs:element name="blockquote" type="blockquote.type"/>
<!-- pre -->
<xs:attributeGroup name="pre.attlist">
<xs:attribute ref="xml:space"/>
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="pre.content">
<xs:sequence>
<xs:group ref="InlinePre.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="pre.type" mixed="true">
<xs:group ref="pre.content"/>
<xs:attributeGroup ref="pre.attlist"/>
</xs:complexType>
<xs:element name="pre" type="pre.type"/>
<!-- Heading Elements -->
<xs:attributeGroup name="heading.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:complexType name="heading.type" mixed="true">
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
<xs:attributeGroup ref="heading.attlist"/>
</xs:complexType>
<xs:attributeGroup name="h1.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="h1.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="h1.type" mixed="true">
<xs:group ref="h1.content"/>
<xs:attributeGroup ref="h1.attlist"/>
</xs:complexType>
<xs:element name="h1" type="h1.type"/>
<xs:attributeGroup name="h2.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="h2.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="h2.type" mixed="true">
<xs:group ref="h2.content"/>
<xs:attributeGroup ref="h2.attlist"/>
</xs:complexType>
<xs:element name="h2" type="h2.type"/>
<xs:attributeGroup name="h3.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="h3.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="h3.type" mixed="true">
<xs:group ref="h3.content"/>
<xs:attributeGroup ref="h3.attlist"/>
</xs:complexType>
<xs:element name="h3" type="h3.type"/>
<xs:attributeGroup name="h4.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="h4.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="h4.type" mixed="true">
<xs:group ref="h4.content"/>
<xs:attributeGroup ref="h4.attlist"/>
</xs:complexType>
<xs:element name="h4" type="h4.type"/>
<xs:attributeGroup name="h5.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="h5.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="h5.type" mixed="true">
<xs:group ref="h5.content"/>
<xs:attributeGroup ref="h5.attlist"/>
</xs:complexType>
<xs:element name="h5" type="h5.type"/>
<xs:attributeGroup name="h6.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="h6.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="h6.type" mixed="true">
<xs:group ref="h6.content"/>
<xs:attributeGroup ref="h6.attlist"/>
</xs:complexType>
<xs:element name="h6" type="h6.type"/>
</xs:schema>

View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
Block Structural
* div, p
This module declares the elements and their attributes used to
support block-level structural markup.
This is the XML Schema Block Structural module for XHTML
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
</xs:annotation>
<!-- div -->
<xs:attributeGroup name="div.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="div.content">
<xs:sequence>
<xs:group ref="Flow.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="div.type" mixed="true">
<xs:group ref="div.content"/>
<xs:attributeGroup ref="div.attlist"/>
</xs:complexType>
<xs:element name="div" type="div.type"/>
<!-- p -->
<xs:attributeGroup name="p.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="p.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="p.type" mixed="true">
<xs:group ref="p.content"/>
<xs:attributeGroup ref="p.attlist"/>
</xs:complexType>
<xs:element name="p" type="p.type"/>
</xs:schema>

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
Hypertext Module
This is the XML Schema Hypertext module for XHTML
* a
This module declares the anchor ('a') element type, which
defines the source of a hypertext link. The destination
(or link 'target') is identified via its 'id' attribute
rather than the 'name' attribute as was used in HTML.
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
<xs:documentation
source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_hypertextmodule"/>
</xs:annotation>
<xs:attributeGroup name="a.attlist">
<xs:attributeGroup ref="Common.attrib"/>
<xs:attribute name="href" type="URI"/>
<xs:attribute name="charset" type="Charset"/>
<xs:attribute name="type" type="ContentType"/>
<xs:attribute name="hreflang" type="LanguageCode"/>
<xs:attribute name="rel" type="LinkTypes"/>
<xs:attribute name="rev" type="LinkTypes"/>
<xs:attribute name="accesskey" type="Character"/>
<xs:attribute name="tabindex" type="Number"/>
</xs:attributeGroup>
<xs:group name="a.content">
<xs:sequence>
<xs:group ref="InlNoAnchor.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="a.type" mixed="true">
<xs:group ref="a.content"/>
<xs:attributeGroup ref="a.attlist"/>
</xs:complexType>
<xs:element name="a" type="a.type"/>
</xs:schema>

View File

@ -0,0 +1,220 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
This is the XML Schema module of named XHTML 1.0 content models
for XHTML-IM, an XHTML 1.0 Integration Set for use in exchanging
marked-up instant messages between entities that conform to
the Extensible Messaging and Presence Protocol (XMPP). This
Integration Set includes a subset of the modules defined for
XHTML 1.0 but does not redefine any existing modules, nor
does it define any new modules. Specifically, it includes the
following modules only:
- Structure
- Text
- Hypertext
- List
- Image
- Style Attribute
Therefore XHTML-IM uses the following content models:
Block.mix; Block-like elements, e.g., paragraphs
Flow.mix; Any block or inline elements
Inline.mix; Character-level elements
InlineNoAnchor.class; Anchor element
InlinePre.mix; Pre element
XHTML-IM also uses the following Attribute Groups:
Core.extra.attrib
I18n.extra.attrib
Common.extra
Full documentation of this Integration Set is contained in
"JEP-0071: XHTML-IM", a specification published by the
Jabber Software Foundation.
http://www.jabber.org/jeps/jep-0071.html
</xs:documentation>
<xs:documentation source="http://www.jabber.org/jeps/jep-0071.html"/>
</xs:annotation>
<!-- BEGIN ATTRIBUTE GROUPS -->
<xs:attributeGroup name="Core.extra.attrib"/>
<xs:attributeGroup name="I18n.extra.attrib"/>
<xs:attributeGroup name="Common.extra">
<xs:attributeGroup ref="style.attrib"/>
</xs:attributeGroup>
<!-- END ATTRIBUTE GROUPS -->
<!-- BEGIN HYPERTEXT MODULE "PRIMITIVES" -->
<xs:group name="Anchor.class">
<xs:sequence>
<xs:element ref="a"/>
</xs:sequence>
</xs:group>
<!-- END HYPERTEXT MODULE "PRIMITIVES" -->
<!-- BEGIN IMAGE MODULE "PRIMITIVES" -->
<xs:group name="Image.class">
<xs:choice>
<xs:element ref="img"/>
</xs:choice>
</xs:group>
<!-- END IMAGE MODULE "PRIMITIVES" -->
<!-- BEGIN LIST MODULE "PRIMITIVES" -->
<xs:group name="List.class">
<xs:choice>
<xs:element ref="ul"/>
<xs:element ref="ol"/>
<xs:element ref="dl"/>
</xs:choice>
</xs:group>
<!-- END LIST MODULE "PRIMITIVES" -->
<!-- BEGIN TEXT MODULE "PRIMITIVES" -->
<xs:group name="BlkPhras.class">
<xs:choice>
<xs:element ref="address"/>
<xs:element ref="blockquote"/>
<xs:element ref="pre"/>
</xs:choice>
</xs:group>
<xs:group name="BlkStruct.class">
<xs:choice>
<xs:element ref="div"/>
<xs:element ref="p"/>
</xs:choice>
</xs:group>
<xs:group name="Heading.class">
<xs:choice>
<xs:element ref="h1"/>
<xs:element ref="h2"/>
<xs:element ref="h3"/>
<xs:element ref="h4"/>
<xs:element ref="h5"/>
<xs:element ref="h6"/>
</xs:choice>
</xs:group>
<xs:group name="InlPhras.class">
<xs:choice>
<xs:element ref="abbr"/>
<xs:element ref="acronym"/>
<xs:element ref="cite"/>
<xs:element ref="code"/>
<xs:element ref="dfn"/>
<xs:element ref="em"/>
<xs:element ref="kbd"/>
<xs:element ref="q"/>
<xs:element ref="samp"/>
<xs:element ref="strong"/>
<xs:element ref="var"/>
</xs:choice>
</xs:group>
<xs:group name="InlStruct.class">
<xs:choice>
<xs:element ref="br"/>
<xs:element ref="span"/>
</xs:choice>
</xs:group>
<!-- END TEXT MODULE "PRIMITIVES" -->
<!-- BEGIN BLOCK COMBINATIONS -->
<xs:group name="Block.class">
<xs:choice>
<xs:group ref="BlkPhras.class"/>
<xs:group ref="BlkStruct.class"/>
</xs:choice>
</xs:group>
<!-- END BLOCK COMBINATIONS -->
<!-- BEGIN INLINE COMBINATIONS -->
<!-- Any inline content -->
<xs:group name="Inline.class">
<xs:choice>
<xs:group ref="Anchor.class"/>
<xs:group ref="Image.class"/>
<xs:group ref="InlPhras.class"/>
<xs:group ref="InlStruct.class"/>
</xs:choice>
</xs:group>
<!-- Inline content contained in a hyperlink -->
<xs:group name="InlNoAnchor.class">
<xs:choice>
<xs:group ref="Image.class"/>
<xs:group ref="InlStruct.class"/>
<xs:group ref="InlPhras.class"/>
</xs:choice>
</xs:group>
<!-- END INLINE COMBINATIONS -->
<!-- BEGIN TOP-LEVEL MIXES -->
<xs:group name="Block.mix">
<xs:choice>
<xs:group ref="Block.class"/>
<xs:group ref="Heading.class"/>
<xs:group ref="List.class"/>
</xs:choice>
</xs:group>
<xs:group name="Flow.mix">
<xs:choice>
<xs:group ref="Block.class"/>
<xs:group ref="Heading.class"/>
<xs:group ref="Inline.class"/>
<xs:group ref="List.class"/>
</xs:choice>
</xs:group>
<xs:group name="Inline.mix">
<xs:choice>
<xs:group ref="Inline.class"/>
</xs:choice>
</xs:group>
<xs:group name="InlNoAnchor.mix">
<xs:choice>
<xs:group ref="InlNoAnchor.class"/>
</xs:choice>
</xs:group>
<xs:group name="InlinePre.mix">
<xs:choice>
<xs:group ref="Anchor.class"/>
<xs:group ref="InlPhras.class"/>
<xs:group ref="InlStruct.class"/>
</xs:choice>
</xs:group>
<!-- END TOP-LEVEL MIXES -->
</xs:schema>

View File

@ -0,0 +1,220 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
This is the XML Schema module of named XHTML 1.0 content models
for XHTML-IM, an XHTML 1.0 Integration Set for use in exchanging
marked-up instant messages between entities that conform to
the Extensible Messaging and Presence Protocol (XMPP). This
Integration Set includes a subset of the modules defined for
XHTML 1.0 but does not redefine any existing modules, nor
does it define any new modules. Specifically, it includes the
following modules only:
- Structure
- Text
- Hypertext
- List
- Image
- Style Attribute
Therefore XHTML-IM uses the following content models:
Block.mix; Block-like elements, e.g., paragraphs
Flow.mix; Any block or inline elements
Inline.mix; Character-level elements
InlineNoAnchor.class; Anchor element
InlinePre.mix; Pre element
XHTML-IM also uses the following Attribute Groups:
Core.extra.attrib
I18n.extra.attrib
Common.extra
Full documentation of this Integration Set is contained in
"JEP-0071: XHTML-IM", a specification published by the
Jabber Software Foundation.
http://www.jabber.org/jeps/jep-0071.html
</xs:documentation>
<xs:documentation source="http://www.jabber.org/jeps/jep-0071.html"/>
</xs:annotation>
<!-- BEGIN ATTRIBUTE GROUPS -->
<xs:attributeGroup name="Core.extra.attrib"/>
<xs:attributeGroup name="I18n.extra.attrib"/>
<xs:attributeGroup name="Common.extra">
<xs:attributeGroup ref="style.attrib"/>
</xs:attributeGroup>
<!-- END ATTRIBUTE GROUPS -->
<!-- BEGIN HYPERTEXT MODULE "PRIMITIVES" -->
<xs:group name="Anchor.class">
<xs:sequence>
<xs:element ref="a"/>
</xs:sequence>
</xs:group>
<!-- END HYPERTEXT MODULE "PRIMITIVES" -->
<!-- BEGIN IMAGE MODULE "PRIMITIVES" -->
<xs:group name="Image.class">
<xs:choice>
<xs:element ref="img"/>
</xs:choice>
</xs:group>
<!-- END IMAGE MODULE "PRIMITIVES" -->
<!-- BEGIN LIST MODULE "PRIMITIVES" -->
<xs:group name="List.class">
<xs:choice>
<xs:element ref="ul"/>
<xs:element ref="ol"/>
<xs:element ref="dl"/>
</xs:choice>
</xs:group>
<!-- END LIST MODULE "PRIMITIVES" -->
<!-- BEGIN TEXT MODULE "PRIMITIVES" -->
<xs:group name="BlkPhras.class">
<xs:choice>
<xs:element ref="address"/>
<xs:element ref="blockquote"/>
<xs:element ref="pre"/>
</xs:choice>
</xs:group>
<xs:group name="BlkStruct.class">
<xs:choice>
<xs:element ref="div"/>
<xs:element ref="p"/>
</xs:choice>
</xs:group>
<xs:group name="Heading.class">
<xs:choice>
<xs:element ref="h1"/>
<xs:element ref="h2"/>
<xs:element ref="h3"/>
<xs:element ref="h4"/>
<xs:element ref="h5"/>
<xs:element ref="h6"/>
</xs:choice>
</xs:group>
<xs:group name="InlPhras.class">
<xs:choice>
<xs:element ref="abbr"/>
<xs:element ref="acronym"/>
<xs:element ref="cite"/>
<xs:element ref="code"/>
<xs:element ref="dfn"/>
<xs:element ref="em"/>
<xs:element ref="kbd"/>
<xs:element ref="q"/>
<xs:element ref="samp"/>
<xs:element ref="strong"/>
<xs:element ref="var"/>
</xs:choice>
</xs:group>
<xs:group name="InlStruct.class">
<xs:choice>
<xs:element ref="br"/>
<xs:element ref="span"/>
</xs:choice>
</xs:group>
<!-- END TEXT MODULE "PRIMITIVES" -->
<!-- BEGIN BLOCK COMBINATIONS -->
<xs:group name="Block.class">
<xs:choice>
<xs:group ref="BlkPhras.class"/>
<xs:group ref="BlkStruct.class"/>
</xs:choice>
</xs:group>
<!-- END BLOCK COMBINATIONS -->
<!-- BEGIN INLINE COMBINATIONS -->
<!-- Any inline content -->
<xs:group name="Inline.class">
<xs:choice>
<xs:group ref="Anchor.class"/>
<xs:group ref="Image.class"/>
<xs:group ref="InlPhras.class"/>
<xs:group ref="InlStruct.class"/>
</xs:choice>
</xs:group>
<!-- Inline content contained in a hyperlink -->
<xs:group name="InlNoAnchor.class">
<xs:choice>
<xs:group ref="Image.class"/>
<xs:group ref="InlStruct.class"/>
<xs:group ref="InlPhras.class"/>
</xs:choice>
</xs:group>
<!-- END INLINE COMBINATIONS -->
<!-- BEGIN TOP-LEVEL MIXES -->
<xs:group name="Block.mix">
<xs:choice>
<xs:group ref="Block.class"/>
<xs:group ref="Heading.class"/>
<xs:group ref="List.class"/>
</xs:choice>
</xs:group>
<xs:group name="Flow.mix">
<xs:choice>
<xs:group ref="Block.class"/>
<xs:group ref="Heading.class"/>
<xs:group ref="Inline.class"/>
<xs:group ref="List.class"/>
</xs:choice>
</xs:group>
<xs:group name="Inline.mix">
<xs:choice>
<xs:group ref="Inline.class"/>
</xs:choice>
</xs:group>
<xs:group name="InlNoAnchor.mix">
<xs:choice>
<xs:group ref="InlNoAnchor.class"/>
</xs:choice>
</xs:group>
<xs:group name="InlinePre.mix">
<xs:choice>
<xs:group ref="Anchor.class"/>
<xs:group ref="InlPhras.class"/>
<xs:group ref="InlStruct.class"/>
</xs:choice>
</xs:group>
<!-- END TOP-LEVEL MIXES -->
</xs:schema>

View File

@ -0,0 +1,42 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:xhtml='http://www.w3.org/1999/xhtml'
targetNamespace='http://jabber.org/protocol/xhtml-im'
xmlns='http://jabber.org/protocol/xhtml-im'
elementFormDefault='qualified'>
<xs:import namespace='http://www.w3.org/1999/xhtml'/>
<xs:annotation>
<xs:documentation>
This schema defines the <html/> element qualified by
the 'http://jabber.org/protocol/xhtml-im' namespace.
The only allowable child is a <body/> element qualified
by the 'http://www.w3.org/1999/xhtml' namespace. Refer
to the XHTML-IM schema driver for the definition of the
XHTML 1.0 Integration Set.
Full documentation of this Integration Set is contained in
"JEP-0071: XHTML-IM", a specification published by the
Jabber Software Foundation.
http://www.jabber.org/jeps/jep-0071.html
</xs:documentation>
<xs:documentation source="http://www.jabber.org/jeps/jep-0071.html"/>
</xs:annotation>
<xs:element name='html'>
<xs:complexType>
<xs:sequence>
<xs:element ref='xhtml:body'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,48 @@
<xs:schema targetNamespace="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
Images
This is the XML Schema Images module for XHTML
* img
This module provides markup to support basic image embedding.
To avoid problems with text-only UAs as well as to make
image content understandable and navigable to users of
non-visual UAs, you need to provide a description with
the 'alt' attribute, and avoid server-side image maps.
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
<xs:documentation
source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_imagemodule"/>
</xs:annotation>
<xs:attributeGroup name="img.attlist">
<xs:attributeGroup ref="Common.attrib"/>
<xs:attribute name="src" type="URI" use="required"/>
<xs:attribute name="alt" type="Text" use="required"/>
<xs:attribute name="longdesc" type="URI"/>
<xs:attribute name="height" type="Length"/>
<xs:attribute name="width" type="Length"/>
</xs:attributeGroup>
<xs:group name="img.content">
<xs:sequence/>
</xs:group>
<xs:complexType name="img.type">
<xs:group ref="img.content"/>
<xs:attributeGroup ref="img.attlist"/>
</xs:complexType>
<xs:element name="img" type="img.type"/>
</xs:schema>

View File

@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
This is the XML Schema Inline Phrasal support module for XHTML
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
</xs:annotation>
<xs:annotation>
<xs:documentation>
Inline Phrasal.
This module declares the elements and their attributes used to
support inline-level phrasal markup.
This is the XML Schema Inline Phrasal module for XHTML
* abbr, acronym, cite, code, dfn, em, kbd, q, samp, strong, var
$Id$
</xs:documentation>
<xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_textmodule"/>
</xs:annotation>
<xs:attributeGroup name="abbr.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="abbr.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="abbr.type" mixed="true">
<xs:group ref="abbr.content"/>
<xs:attributeGroup ref="abbr.attlist"/>
</xs:complexType>
<xs:element name="abbr" type="abbr.type"/>
<xs:attributeGroup name="acronym.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="acronym.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="acronym.type" mixed="true">
<xs:group ref="acronym.content"/>
<xs:attributeGroup ref="acronym.attlist"/>
</xs:complexType>
<xs:element name="acronym" type="acronym.type"/>
<xs:attributeGroup name="cite.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="cite.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="cite.type" mixed="true">
<xs:group ref="cite.content"/>
<xs:attributeGroup ref="cite.attlist"/>
</xs:complexType>
<xs:element name="cite" type="cite.type"/>
<xs:attributeGroup name="code.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="code.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="code.type" mixed="true">
<xs:group ref="code.content"/>
<xs:attributeGroup ref="code.attlist"/>
</xs:complexType>
<xs:element name="code" type="code.type"/>
<xs:attributeGroup name="dfn.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="dfn.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="dfn.type" mixed="true">
<xs:group ref="dfn.content"/>
<xs:attributeGroup ref="dfn.attlist"/>
</xs:complexType>
<xs:element name="dfn" type="dfn.type"/>
<xs:attributeGroup name="em.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="em.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="em.type" mixed="true">
<xs:group ref="em.content"/>
<xs:attributeGroup ref="em.attlist"/>
</xs:complexType>
<xs:element name="em" type="em.type"/>
<xs:attributeGroup name="kbd.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="kbd.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="kbd.type" mixed="true">
<xs:group ref="kbd.content"/>
<xs:attributeGroup ref="kbd.attlist"/>
</xs:complexType>
<xs:element name="kbd" type="kbd.type"/>
<xs:attributeGroup name="samp.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="samp.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="samp.type" mixed="true">
<xs:group ref="samp.content"/>
<xs:attributeGroup ref="samp.attlist"/>
</xs:complexType>
<xs:element name="samp" type="samp.type"/>
<xs:attributeGroup name="strong.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="strong.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="strong.type" mixed="true">
<xs:group ref="strong.content"/>
<xs:attributeGroup ref="strong.attlist"/>
</xs:complexType>
<xs:element name="strong" type="strong.type"/>
<xs:attributeGroup name="var.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="var.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="var.type" mixed="true">
<xs:group ref="var.content"/>
<xs:attributeGroup ref="var.attlist"/>
</xs:complexType>
<xs:element name="var" type="var.type"/>
<xs:attributeGroup name="q.attlist">
<xs:attributeGroup ref="Common.attrib"/>
<xs:attribute name="cite" type="URI"/>
</xs:attributeGroup>
<xs:group name="q.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="q.type" mixed="true">
<xs:group ref="q.content"/>
<xs:attributeGroup ref="q.attlist"/>
</xs:complexType>
<xs:element name="q" type="q.type"/>
</xs:schema>

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
This is the XML Schema Inline Structural support module for XHTML
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
</xs:annotation>
<xs:annotation>
<xs:documentation>
Inline Structural.
This module declares the elements and their attributes
used to support inline-level structural markup.
This is the XML Schema Inline Structural element module for XHTML
* br, span
</xs:documentation>
<xs:documentation source="http://www.w3.org/TR/xhtml-modularization/abstract_modules.html#s_textmodule"/>
</xs:annotation>
<xs:attributeGroup name="br.attlist">
<xs:attributeGroup ref="Core.attrib"/>
</xs:attributeGroup>
<xs:group name="br.content">
<xs:sequence/>
</xs:group>
<xs:complexType name="br.type">
<xs:group ref="br.content"/>
<xs:attributeGroup ref="br.attlist"/>
</xs:complexType>
<xs:element name="br" type="br.type"/>
<xs:attributeGroup name="span.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="span.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="span.type" mixed="true">
<xs:group ref="span.content"/>
<xs:attributeGroup ref="span.attlist"/>
</xs:complexType>
<xs:element name="span" type="span.type"/>
</xs:schema>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
Inline Style module
This is the XML Schema Inline Style module for XHTML
* styloe attribute
This module declares the 'style' attribute, used to support inline
style markup.
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
<xs:documentation
source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_styleattributemodule"/>
</xs:annotation>
<xs:attributeGroup name="style.attrib">
<xs:attribute name="style" type="CDATA"/>
</xs:attributeGroup>
</xs:schema>

View File

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml">
<xs:annotation>
<xs:documentation>
List Module
This is the XML Schema Lists module for XHTML
List Module Elements
* dl, dt, dd, ol, ul, li
This module declares the list-oriented element types
and their attributes.
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
<xs:documentation
source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_listmodule"/>
</xs:annotation>
<xs:attributeGroup name="dt.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="dt.content">
<xs:sequence>
<xs:group ref="Inline.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="dt.type" mixed="true">
<xs:group ref="dt.content"/>
<xs:attributeGroup ref="dt.attlist"/>
</xs:complexType>
<xs:element name="dt" type="dt.type"/>
<xs:attributeGroup name="dd.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="dd.content">
<xs:sequence>
<xs:group ref="Flow.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="dd.type" mixed="true">
<xs:group ref="dd.content"/>
<xs:attributeGroup ref="dd.attlist"/>
</xs:complexType>
<xs:element name="dd" type="dd.type"/>
<xs:attributeGroup name="dl.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="dl.content">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element ref="dt"/>
<xs:element ref="dd"/>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:complexType name="dl.type">
<xs:group ref="dl.content"/>
<xs:attributeGroup ref="dl.attlist"/>
</xs:complexType>
<xs:element name="dl" type="dl.type"/>
<xs:attributeGroup name="li.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="li.content">
<xs:sequence>
<xs:group ref="Flow.mix" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="li.type" mixed="true">
<xs:group ref="li.content"/>
<xs:attributeGroup ref="li.attlist"/>
</xs:complexType>
<xs:element name="li" type="li.type"/>
<xs:attributeGroup name="ol.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="ol.content">
<xs:sequence>
<xs:element ref="li" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="ol.type">
<xs:group ref="ol.content"/>
<xs:attributeGroup ref="ol.attlist"/>
</xs:complexType>
<xs:element name="ol" type="ol.type"/>
<xs:attributeGroup name="ul.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="ul.content">
<xs:sequence>
<xs:element ref="li" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="ul.type">
<xs:group ref="ul.content"/>
<xs:attributeGroup ref="ul.attlist"/>
</xs:complexType>
<xs:element name="ul" type="ul.type"/>
</xs:schema>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:annotation>
<xs:documentation>
This is the XML Schema Document Structure module for XHTML
Document Structure
* title, head, body, html
The Structure Module defines the major structural elements and
their attributes.
$Id$
</xs:documentation>
<xs:documentation source="xhtml-copyright-1.xsd"/>
<xs:documentation
source="http://www.w3.org/TR/2001/REC-xhtml-modularization-20010410/abstract_modules.html#s_structuremodule"/>
</xs:annotation>
<xs:attributeGroup name="title.attlist">
<xs:attributeGroup ref="I18n.attrib"/>
</xs:attributeGroup>
<xs:group name="title.content">
<xs:sequence/>
</xs:group>
<xs:complexType name="title.type" mixed="true">
<xs:group ref="title.content"/>
<xs:attributeGroup ref="title.attlist"/>
</xs:complexType>
<xs:element name="title" type="title.type"/>
<xs:group name="head.content">
<xs:sequence>
<xs:element ref="title"/>
</xs:sequence>
</xs:group>
<xs:attributeGroup name="profile.attrib">
<xs:attribute name="profile" type="URI"/>
</xs:attributeGroup>
<xs:attributeGroup name="head.attlist">
<xs:attributeGroup ref="profile.attrib"/>
<xs:attributeGroup ref="I18n.attrib"/>
</xs:attributeGroup>
<xs:complexType name="head.type">
<xs:group ref="head.content"/>
<xs:attributeGroup ref="head.attlist"/>
</xs:complexType>
<xs:element name="head" type="head.type"/>
<xs:attributeGroup name="body.attlist">
<xs:attributeGroup ref="Common.attrib"/>
</xs:attributeGroup>
<xs:group name="body.content">
<xs:sequence>
<xs:group ref="Block.mix" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="body.type">
<xs:group ref="body.content"/>
<xs:attributeGroup ref="body.attlist"/>
</xs:complexType>
<xs:element name="body" type="body.type"/>
<xs:attributeGroup name="version.attrib">
<xs:attribute name="version" type="FPI"/>
</xs:attributeGroup>
<xs:attributeGroup name="html.attlist">
<xs:attributeGroup ref="version.attrib"/>
<xs:attributeGroup ref="I18n.attrib"/>
</xs:attributeGroup>
<xs:group name="html.content">
<xs:sequence>
<xs:element ref="head"/>
<xs:element ref="body"/>
</xs:sequence>
</xs:group>
<xs:complexType name="html.type">
<xs:group ref="html.content"/>
<xs:attributeGroup ref="html.attlist"/>
</xs:complexType>
<xs:element name="html" type="html.type"/>
</xs:schema>

View File

@ -0,0 +1,476 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp;
import ietf.params.xml.ns.xmpp_sasl.Auth;
import ietf.params.xml.ns.xmpp_sasl.Challenge;
import ietf.params.xml.ns.xmpp_sasl.Success;
import ietf.params.xml.ns.xmpp_tls.Proceed;
import ietf.params.xml.ns.xmpp_tls.Starttls;
import jabber.client.Body;
import jabber.client.Error;
import jabber.client.Iq;
import jabber.client.Message;
import jabber.client.Presence;
import jabber.iq.auth.Query;
import org.apache.activemq.command.*;
import org.apache.activemq.transport.xmpp.command.Handler;
import org.apache.activemq.transport.xmpp.command.HandlerRegistry;
import org.apache.activemq.util.IdGenerator;
import org.apache.activemq.util.LongSequenceGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jabber.protocol.disco_info.Feature;
import org.jabber.protocol.disco_info.Identity;
import org.jabber.protocol.disco_items.Item;
import org.jabber.protocol.muc_user.X;
import org.w3c.dom.Element;
import javax.jms.JMSException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* TODO lots of this code could be shared with Stomp
*/
public class ProtocolConverter {
private static final transient Log log = LogFactory.getLog(ProtocolConverter.class);
private HandlerRegistry registry = new HandlerRegistry();
private XmppTransport transport;
private static final IdGenerator connectionIdGenerator = new IdGenerator();
private static final IdGenerator clientIdGenerator = new IdGenerator("xmpp");
private final ConnectionId connectionId = new ConnectionId(connectionIdGenerator.generateId());
private final SessionId sessionId = new SessionId(connectionId, -1);
private final ProducerId producerId = new ProducerId(sessionId, 1);
private final ConnectionInfo connectionInfo = new ConnectionInfo(connectionId);
private final SessionInfo sessionInfo = new SessionInfo(sessionId);
private final ProducerInfo producerInfo = new ProducerInfo(producerId);
private final LongSequenceGenerator consumerIdGenerator = new LongSequenceGenerator();
private final LongSequenceGenerator messageIdGenerator = new LongSequenceGenerator();
private final LongSequenceGenerator transactionIdGenerator = new LongSequenceGenerator();
private final Map<Integer, Handler<Response>> resposeHandlers = new ConcurrentHashMap<Integer, Handler<Response>>();
private final Map<ConsumerId, Handler<MessageDispatch>> subscriptionsByConsumerId = new ConcurrentHashMap<ConsumerId, Handler<MessageDispatch>>();
private final Map transactions = new ConcurrentHashMap();
private final Object commnadIdMutex = new Object();
private int lastCommandId;
private final AtomicBoolean connected = new AtomicBoolean(false);
public ProtocolConverter(XmppTransport transport) {
this.transport = transport;
initialiseRegistry();
}
protected int generateCommandId() {
synchronized (commnadIdMutex) {
return lastCommandId++;
}
}
protected void initialiseRegistry() {
// this kinda wiring muck is soooo much cleaner in C# :(
registry.registerHandler(Message.class, new Handler<Message>() {
public void handle(Message event) throws Exception {
onMessage(event);
}
});
registry.registerHandler(Auth.class, new Handler<Auth>() {
public void handle(Auth event) throws Exception {
onAuth(event);
}
});
registry.registerHandler(Starttls.class, new Handler<Starttls>() {
public void handle(Starttls event) throws Exception {
onStarttls(event);
}
});
registry.registerHandler(Iq.class, new Handler<Iq>() {
public void handle(Iq event) throws Exception {
onIq(event);
}
});
registry.registerHandler(Presence.class, new Handler<Presence>() {
public void handle(Presence event) throws Exception {
onPresence(event);
}
});
}
public void onXmppCommand(Object command) throws Exception {
// TODO we could do some nice code generation to boost performance
// by autogenerating the bytecode to statically lookup a handler from a registry maybe?
Handler handler = registry.getHandler(command.getClass());
if (handler == null) {
unknownCommand(command);
}
else {
handler.handle(command);
}
}
public void onActiveMQCommad(Command command) throws Exception {
if (command.isResponse()) {
Response response = (Response) command;
Handler<Response> handler = resposeHandlers.remove(new Integer(response.getCorrelationId()));
if (handler != null) {
handler.handle(response);
}
}
else if (command.isMessageDispatch()) {
MessageDispatch md = (MessageDispatch) command;
Handler<MessageDispatch> handler = subscriptionsByConsumerId.get(md.getConsumerId());
if (handler != null) {
handler.handle(md);
}
}
}
protected void unknownCommand(Object command) throws Exception {
log.warn("Unkown command: " + command + " of type: " + command.getClass().getName());
}
protected void onIq(final Iq iq) throws Exception {
Object any = iq.getAny();
if (any instanceof Query) {
Query query = (Query) any;
if (log.isDebugEnabled()) {
log.debug("Iq Auth Query " + debugString(iq) + " resource: " + query.getResource() + " username: " + query.getUsername());
}
if (query.getPassword() == null) {
Iq result = createResult(iq);
Query required = new Query();
required.setPassword("");
required.setUsername("");
result.setAny(required);
transport.marshall(result);
return;
}
//connectionInfo.setClientId(query.getResource());
connectionInfo.setUserName(query.getUsername());
connectionInfo.setPassword(query.getPassword());
// TODO support digest?
if (connectionInfo.getClientId() == null) {
connectionInfo.setClientId(clientIdGenerator.generateId());
}
sendToActiveMQ(connectionInfo, new Handler<Response>() {
public void handle(Response response) throws Exception {
Iq result = createResult(iq);
if (response instanceof ExceptionResponse) {
ExceptionResponse exceptionResponse = (ExceptionResponse) response;
jabber.client.Error error = new jabber.client.Error();
result.setError(error);
StringWriter buffer = new StringWriter();
exceptionResponse.getException().printStackTrace(new PrintWriter(buffer));
error.setInternalServerError(buffer.toString());
}
else {
connected.set(true);
}
transport.marshall(result);
sendToActiveMQ(sessionInfo, null);
sendToActiveMQ(producerInfo, null);
}
});
}
else if (any instanceof jabber.iq._private.Query) {
jabber.iq._private.Query query = (jabber.iq._private.Query) any;
if (log.isDebugEnabled()) {
log.debug("Iq Private " + debugString(iq) + " any: " + query.getAny());
}
Iq result = createResult(iq);
jabber.iq._private.Query answer = new jabber.iq._private.Query();
result.setAny(answer);
transport.marshall(result);
}
else if (any instanceof jabber.iq.roster.Query) {
jabber.iq.roster.Query query = (jabber.iq.roster.Query) any;
if (log.isDebugEnabled()) {
log.debug("Iq Roster " + debugString(iq) + " item: " + query.getItem());
}
Iq result = createResult(iq);
jabber.iq.roster.Query roster = new jabber.iq.roster.Query();
result.setAny(roster);
transport.marshall(result);
}
else if (any instanceof org.jabber.protocol.disco_items.Query) {
onDiscoItems(iq, (org.jabber.protocol.disco_items.Query) any);
}
else if (any instanceof org.jabber.protocol.disco_info.Query) {
onDiscoInfo(iq, (org.jabber.protocol.disco_info.Query) any);
}
else {
if (any instanceof Element) {
Element element = (Element) any;
log.warn("Iq Unknown " + debugString(iq) + " element namespace: " + element.getNamespaceURI() + " localName: " + element.getLocalName());
}
else {
log.warn("Iq Unknown " + debugString(iq) + " any: " + any + " of type: " + any.getClass().getName());
}
Iq result = createResult(iq);
jabber.client.Error error = new Error();
error.setUnexpectedRequest("Don't understand: " + any.toString());
result.setAny(error);
transport.marshall(result);
}
}
protected String debugString(Iq iq) {
return " to: " + iq.getTo() + " type: " + iq.getType() + " from: " + iq.getFrom() + " id: " + iq.getId();
}
protected void onDiscoItems(Iq iq, org.jabber.protocol.disco_items.Query query) throws IOException {
String to = iq.getTo();
if (log.isDebugEnabled()) {
log.debug("Iq Disco Items query " + debugString(iq) + " node: " + query.getNode() + " item: " + query.getItem());
}
Iq result = createResult(iq);
org.jabber.protocol.disco_items.Query answer = new org.jabber.protocol.disco_items.Query();
if (to == null || to.length() == 0) {
answer.getItem().add(createItem("queues", "Queues", "queues"));
answer.getItem().add(createItem("topics", "Topics", "topics"));
}
else {
// lets not add anything?
}
result.setAny(answer);
transport.marshall(result);
}
protected void onDiscoInfo(Iq iq, org.jabber.protocol.disco_info.Query query) throws IOException {
String to = iq.getTo();
// TODO lets create the topic 'to'
if (log.isDebugEnabled()) {
log.debug("Iq Disco Info query " + debugString(iq) + " node: " + query.getNode() + " features: " + query.getFeature() + " identity: " + query.getIdentity());
}
Iq result = createResult(iq);
org.jabber.protocol.disco_info.Query answer = new org.jabber.protocol.disco_info.Query();
answer.setNode(to);
answer.getFeature().add(createFeature("http://jabber.org/protocol/disco#info"));
answer.getFeature().add(createFeature("http://jabber.org/protocol/disco#items"));
if (to == null || to.length() == 0) {
answer.getIdentity().add(createIdentity("directory", "chatroom", "queues"));
answer.getIdentity().add(createIdentity("directory", "chatroom", "topics"));
/*
answer.getIdentity().add(createIdentity("hierarchy", "queues", "branch"));
answer.getIdentity().add(createIdentity("hierarchy", "topics", "branch"));
*/
}
else {
// for queues/topics
if (to.equals("queues")) {
answer.getIdentity().add(createIdentity("conference", "queue.a", "text"));
answer.getIdentity().add(createIdentity("conference", "queue.b", "text"));
}
else if (to.equals("topics")) {
answer.getIdentity().add(createIdentity("conference", "topic.x", "text"));
answer.getIdentity().add(createIdentity("conference", "topic.y", "text"));
answer.getIdentity().add(createIdentity("conference", "topic.z", "text"));
}
else {
// lets reply to an actual room
answer.getIdentity().add(createIdentity("conference", to, "text"));
answer.getFeature().add(createFeature("http://jabber.org/protocol/muc"));
answer.getFeature().add(createFeature("muc-open"));
}
}
result.setAny(answer);
transport.marshall(result);
}
protected void onPresence(Presence presence) throws IOException {
if (log.isDebugEnabled()) {
log.debug("Presence: " + presence.getFrom() + " id: " + presence.getId() + " to: " + presence.getTo() + " type: " + presence.getType()
+ " showOrStatusOrPriority: " + presence.getShowOrStatusOrPriority() + " any: " + presence.getAny());
}
Presence answer = new Presence();
answer.setFrom(presence.getTo());
answer.setType(presence.getType());
answer.setTo(presence.getFrom());
X x = new X();
org.jabber.protocol.muc_user.Item item = new org.jabber.protocol.muc_user.Item();
item.setAffiliation("owner");
item.setRole("moderator");
item.setNick("broker");
x.getDeclineOrDestroyOrInvite().add(item);
answer.getShowOrStatusOrPriority().add(x);
transport.marshall(answer);
}
protected Item createItem(String jid, String name, String node) {
Item answer = new Item();
answer.setJid(jid);
answer.setName(name);
answer.setNode(node);
return answer;
}
protected Identity createIdentity(String category, String type, String name) {
Identity answer = new Identity();
answer.setCategory(category);
answer.setName(name);
answer.setType(type);
return answer;
}
protected Feature createFeature(String var) {
Feature feature = new Feature();
feature.setVar(var);
return feature;
}
/**
* Creates a result command from the input
*/
protected Iq createResult(Iq iq) {
Iq result = new Iq();
result.setId(iq.getId());
result.setFrom(transport.getFrom());
result.setTo(iq.getFrom());
result.setLang(iq.getLang());
result.setType("result");
return result;
}
protected void sendToActiveMQ(Command command, Handler<Response> handler) {
command.setCommandId(generateCommandId());
if (handler != null) {
command.setResponseRequired(true);
resposeHandlers.put(command.getCommandId(), handler);
}
transport.getTransportListener().onCommand(command);
}
protected void onStarttls(Starttls starttls) throws Exception {
log.debug("Starttls");
transport.marshall(new Proceed());
}
protected void onMessage(Message message) throws Exception {
if (log.isDebugEnabled()) {
log.debug("Message from: " + message.getFrom() + " to: " + message.getTo() + " subjectOrBodyOrThread: " + message.getSubjectOrBodyOrThread());
}
ActiveMQMessage activeMQMessage = createActiveMQMessage(message);
ActiveMQDestination destination = createActiveMQDestination(message.getTo());
activeMQMessage.setMessageId(new MessageId(producerInfo, messageIdGenerator.getNextSequenceId()));
activeMQMessage.setDestination(destination);
addActiveMQMessageHeaders(activeMQMessage, message);
MessageDispatch dispatch = new MessageDispatch();
dispatch.setDestination(destination);
dispatch.setMessage(activeMQMessage);
sendToActiveMQ(dispatch, null);
}
/**
* Converts the Jabber destination name into a destination in ActiveMQ
*/
protected ActiveMQDestination createActiveMQDestination(String jabberDestination) throws JMSException {
if (jabberDestination == null) {
return null;
}
String name = jabberDestination;
int idx = jabberDestination.indexOf('@');
if (idx > 0) {
name = name.substring(0, idx);
}
return new ActiveMQTopic(name);
}
protected ActiveMQMessage createActiveMQMessage(Message message) throws JMSException {
ActiveMQTextMessage answer = new ActiveMQTextMessage();
String text = "";
List<Object> list = message.getSubjectOrBodyOrThread();
for (Object object : list) {
if (object instanceof Body) {
Body body = (Body) object;
text = body.getValue();
break;
}
}
answer.setText(text);
return answer;
}
protected void addActiveMQMessageHeaders(ActiveMQMessage answer, Message message) throws JMSException {
answer.setStringProperty("XMPPFrom", message.getFrom());
answer.setStringProperty("XMPPID", message.getId());
answer.setStringProperty("XMPPLang", message.getLang());
answer.setStringProperty("XMPPTo", message.getTo());
answer.setJMSType(message.getType());
answer.setJMSReplyTo(createActiveMQDestination(message.getFrom()));
}
protected void onAuth(Auth auth) throws Exception {
if (log.isDebugEnabled()) {
log.debug("Auth mechanism: " + auth.getMechanism() + " value: " + auth.getValue());
}
String value = createChallengeValue(auth);
if (value != null) {
Challenge challenge = new Challenge();
challenge.setValue(value);
transport.marshall(challenge);
}
else {
transport.marshall(new Success());
}
}
protected String createChallengeValue(Auth auth) {
// TODO implement the challenge
return null;
}
}

View File

@ -0,0 +1,291 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp;
import ietf.params.xml.ns.xmpp_sasl.Mechanisms;
import org.apache.activemq.command.BrokerInfo;
import org.apache.activemq.command.Command;
import org.apache.activemq.transport.tcp.TcpBufferedInputStream;
import org.apache.activemq.transport.tcp.TcpBufferedOutputStream;
import org.apache.activemq.transport.tcp.TcpTransport;
import org.apache.activemq.util.IOExceptionSupport;
import org.apache.activemq.util.ServiceStopper;
import org.apache.activemq.wireformat.WireFormat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jabber.etherx.streams.Features;
import javax.net.SocketFactory;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import javax.xml.stream.Location;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLReporter;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.URI;
/**
* @version $Revision$
*/
public class XmppTransport extends TcpTransport {
protected static final QName ATTRIBUTE_TO = new QName("to");
private static final transient Log log = LogFactory.getLog(XmppTransport.class);
private JAXBContext context;
private XMLEventReader xmlReader;
private Unmarshaller unmarshaller;
private Marshaller marshaller;
private XMLStreamWriter xmlWriter;
private String to = "client";
protected OutputStream outputStream;
protected InputStream inputStream;
private ProtocolConverter converter;
private String from;
public XmppTransport(WireFormat wireFormat, Socket socket) throws IOException {
super(wireFormat, socket);
init();
}
public XmppTransport(WireFormat wireFormat, SocketFactory socketFactory, URI uri, URI uri1) throws IOException {
super(wireFormat, socketFactory, uri, uri1);
init();
}
private void init() {
converter = new ProtocolConverter(this);
}
@Override
public void oneway(Object object) throws IOException {
if (object instanceof Command) {
Command command = (Command) object;
if (command instanceof BrokerInfo) {
BrokerInfo brokerInfo = (BrokerInfo) command;
String id = brokerInfo.getBrokerId().toString();
from = brokerInfo.getBrokerName();
try {
writeOpenStream(id, from);
// now lets write the features
Features features = new Features();
//features.getAny().add(new Starttls());
Mechanisms mechanisms = new Mechanisms();
//mechanisms.getMechanism().add("DIGEST-MD5");
//mechanisms.getMechanism().add("PLAIN");
features.getAny().add(mechanisms);
marshall(features);
/*
xmlWriter.flush();
outputStream.flush();
*/
}
catch (XMLStreamException e) {
throw IOExceptionSupport.create(e);
}
}
else {
try {
converter.onActiveMQCommad(command);
}
catch (IOException e) {
throw e;
}
catch (Exception e) {
throw IOExceptionSupport.create(e);
}
}
}
else {
log.warn("Unkown command: " + object);
}
}
/**
* Marshalls the given POJO to the client
*/
public void marshall(Object command) throws IOException {
try {
marshaller.marshal(command, xmlWriter);
xmlWriter.flush();
}
catch (JAXBException e) {
throw IOExceptionSupport.create(e);
}
catch (XMLStreamException e) {
throw IOExceptionSupport.create(e);
}
}
@Override
public void run() {
log.debug("XMPP consumer thread starting");
try {
XMLInputFactory xif = XMLInputFactory.newInstance();
xif.setXMLReporter(new XMLReporter() {
public void report(String message, String errorType, Object relatedInformation, Location location) throws XMLStreamException {
log.warn(message + " errorType: " + errorType + " relatedInfo: " + relatedInformation);
}
});
xmlReader = xif.createXMLEventReader(inputStream);
XMLEvent docStart = xmlReader.nextEvent();
XMLEvent rootElement = xmlReader.nextTag();
if (rootElement instanceof StartElement) {
StartElement startElement = (StartElement) rootElement;
Attribute toAttribute = startElement.getAttributeByName(ATTRIBUTE_TO);
if (toAttribute != null) {
to = toAttribute.getValue();
}
}
while (true) {
if (isStopped()) {
break;
}
XMLEvent event = xmlReader.peek();
if (event.isStartElement()) {
// unmarshal a new object
Object object = unmarshaller.unmarshal(xmlReader);
if (object != null) {
converter.onXmppCommand(object);
}
}
else {
if (event.getEventType() == XMLEvent.END_ELEMENT) {
break;
}
else if (event.getEventType() == XMLEvent.END_ELEMENT || event.getEventType() == XMLEvent.END_DOCUMENT) {
break;
}
else {
xmlReader.nextEvent();
}
}
}
}
catch (XMLStreamException e) {
log.error("XMPP Reader thread caught: " + e, e);
}
catch (Exception e) {
log.error("XMPP Reader thread caught: " + e, e);
}
try {
stop();
}
catch (Exception e) {
log.error("Failed to stop XMPP transport: " + e, e);
}
}
public String getFrom() {
return from;
}
@Override
protected void doStop(ServiceStopper stopper) throws Exception {
if (xmlWriter != null) {
try {
xmlWriter.writeEndElement();
xmlWriter.writeEndDocument();
xmlWriter.close();
}
catch (XMLStreamException e) {
// the client may have closed first so ignore this
log.info("Caught trying to close transport: " + e, e);
}
}
if (xmlReader != null) {
try {
xmlReader.close();
}
catch (XMLStreamException e) {
// the client may have closed first so ignore this
log.info("Caught trying to close transport: " + e, e);
}
}
super.doStop(stopper);
}
@Override
protected void initializeStreams() throws Exception {
// TODO it would be preferable to use class discovery here!
context = JAXBContext.newInstance("jabber.client" + ":jabber.server"
+ ":jabber.iq._private" + ":jabber.iq.auth" + ":jabber.iq.gateway" + ":jabber.iq.last" + ":jabber.iq.oob"
+ ":jabber.iq.pass" + ":jabber.iq.roster" + ":jabber.iq.time" + ":jabber.iq.version"
+ ":org.jabber.etherx.streams" + ":org.jabber.protocol.activity" + ":org.jabber.protocol.address"
+ ":org.jabber.protocol.amp" + ":org.jabber.protocol.amp_errors"
+ ":org.jabber.protocol.disco_info" + ":org.jabber.protocol.disco_items"
+ ":org.jabber.protocol.muc" + ":org.jabber.protocol.muc_admin"
+ ":org.jabber.protocol.muc_unique" + ":org.jabber.protocol.muc_user"
+ ":ietf.params.xml.ns.xmpp_sasl" + ":ietf.params.xml.ns.xmpp_stanzas"
+ ":ietf.params.xml.ns.xmpp_streams" + ":ietf.params.xml.ns.xmpp_tls");
inputStream = new TcpBufferedInputStream(socket.getInputStream(), 8 * 1024);
outputStream = new TcpBufferedOutputStream(socket.getOutputStream(), 16 * 1024);
unmarshaller = context.createUnmarshaller();
marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
}
protected void writeOpenStream(String id, String from) throws IOException, XMLStreamException {
XMLOutputFactory factory = XMLOutputFactory.newInstance();
//factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
xmlWriter = factory.createXMLStreamWriter(outputStream);
// write the dummy start tag
xmlWriter.writeStartDocument();
xmlWriter.writeStartElement("stream", "stream", "http://etherx.jabber.org/streams");
xmlWriter.writeDefaultNamespace("jabber:client");
xmlWriter.writeNamespace("stream", "http://etherx.jabber.org/streams");
xmlWriter.writeAttribute("version", "1.0");
xmlWriter.writeAttribute("id", id);
if (to == null) {
to = "client";
}
xmlWriter.writeAttribute("to", to);
xmlWriter.writeAttribute("from", from);
xmlWriter.writeCharacters("\n");
}
}

View File

@ -0,0 +1,57 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp;
import org.apache.activemq.transport.Transport;
import org.apache.activemq.transport.tcp.TcpTransport;
import org.apache.activemq.transport.tcp.TcpTransportFactory;
import org.apache.activemq.transport.tcp.TcpTransportServer;
import org.apache.activemq.wireformat.WireFormat;
import javax.net.SocketFactory;
import javax.net.ServerSocketFactory;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
/**
* @version $Revision$
*/
public class XmppTransportFactory extends TcpTransportFactory {
protected String getDefaultWireFormatType() {
return "xmpp";
}
@Override
public Transport compositeConfigure(Transport transport, WireFormat format, Map options) {
//transport = new StompTransportFilter(transport, new LegacyFrameTranslator());
return super.compositeConfigure(transport, format, options);
}
@Override
protected TcpTransport createTcpTransport(WireFormat wf, SocketFactory socketFactory, URI location, URI localLocation) throws IOException {
return new XmppTransport(wf, socketFactory, location, localLocation);
}
@Override
protected TcpTransportServer createTcpTransportServer(final URI location, ServerSocketFactory serverSocketFactory) throws IOException, URISyntaxException {
return new XmppTransportServer(this, location, serverSocketFactory);
}
}

View File

@ -0,0 +1,44 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp;
import org.apache.activemq.transport.tcp.TcpTransportServer;
import org.apache.activemq.transport.tcp.TcpTransportFactory;
import org.apache.activemq.transport.Transport;
import org.apache.activemq.wireformat.WireFormat;
import javax.net.ServerSocketFactory;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.Socket;
import java.io.IOException;
/**
* @version $Revision$
*/
public class XmppTransportServer extends TcpTransportServer {
public XmppTransportServer(TcpTransportFactory transportFactory, URI location, ServerSocketFactory serverSocketFactory) throws IOException, URISyntaxException {
super(transportFactory, location, serverSocketFactory);
}
@Override
protected Transport createTransport(Socket socket, WireFormat format) throws IOException {
return new XmppTransport(format, socket);
}
}

View File

@ -0,0 +1,219 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp;
import org.apache.activemq.util.ByteArrayInputStream;
import org.apache.activemq.util.ByteArrayOutputStream;
import org.apache.activemq.util.ByteSequence;
import org.apache.activemq.wireformat.WireFormat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
/**
* A wire format which uses XMPP format of messages
*
* @version $Revision$
*/
public class XmppWireFormat implements WireFormat {
private static final Log log = LogFactory.getLog(XmppWireFormat.class);
private int version = 1;
public WireFormat copy() {
return new XmppWireFormat();
}
/*
public Packet readPacket(DataInput in) throws IOException {
return null;
}
public Packet readPacket(int firstByte, DataInput in) throws IOException {
return null;
}
public Packet writePacket(Packet packet, DataOutput out) throws IOException, JMSException {
switch (packet.getPacketType()) {
case Packet.ACTIVEMQ_MESSAGE:
writeMessage((ActiveMQMessage) packet, "", out);
break;
case Packet.ACTIVEMQ_TEXT_MESSAGE:
writeTextMessage((ActiveMQTextMessage) packet, out);
break;
case Packet.ACTIVEMQ_BYTES_MESSAGE:
writeBytesMessage((ActiveMQBytesMessage) packet, out);
break;
case Packet.ACTIVEMQ_OBJECT_MESSAGE:
writeObjectMessage((ActiveMQObjectMessage) packet, out);
break;
case Packet.ACTIVEMQ_MAP_MESSAGE:
case Packet.ACTIVEMQ_STREAM_MESSAGE:
case Packet.ACTIVEMQ_BROKER_INFO:
case Packet.ACTIVEMQ_CONNECTION_INFO:
case Packet.ACTIVEMQ_MSG_ACK:
case Packet.CONSUMER_INFO:
case Packet.DURABLE_UNSUBSCRIBE:
case Packet.INT_RESPONSE_RECEIPT_INFO:
case Packet.PRODUCER_INFO:
case Packet.RECEIPT_INFO:
case Packet.RESPONSE_RECEIPT_INFO:
case Packet.SESSION_INFO:
case Packet.TRANSACTION_INFO:
case Packet.XA_TRANSACTION_INFO:
default:
log.warn("Ignoring message type: " + packet.getPacketType() + " packet: " + packet);
}
return null;
}
*/
// /**
// * Can this wireformat process packets of this version
// * @param version the version number to test
// * @return true if can accept the version
// */
// public boolean canProcessWireFormatVersion(int version){
// return true;
// }
//
// /**
// * @return the current version of this wire format
// */
// public int getCurrentWireFormatVersion(){
// return 1;
// }
//
// // Implementation methods
// //-------------------------------------------------------------------------
// protected void writeObjectMessage(ActiveMQObjectMessage message, DataOutput out) throws JMSException, IOException {
// Serializable object = message.getObject();
// String text = (object != null) ? object.toString() : "";
// writeMessage(message, text, out);
// }
//
// protected void writeTextMessage(ActiveMQTextMessage message, DataOutput out) throws JMSException, IOException {
// writeMessage(message, message.getText(), out);
// }
//
// protected void writeBytesMessage(ActiveMQBytesMessage message, DataOutput out) throws IOException {
// ByteArray data = message.getBodyAsBytes();
// String text = encodeBinary(data.getBuf(),data.getOffset(),data.getLength());
// writeMessage(message, text, out);
// }
//
// protected void writeMessage(ActiveMQMessage message, String body, DataOutput out) throws IOException {
// String type = getXmppType(message);
//
// StringBuffer buffer = new StringBuffer("<");
// buffer.append(type);
// buffer.append(" to='");
// buffer.append(message.getJMSDestination().toString());
// buffer.append("' from='");
// buffer.append(message.getJMSReplyTo().toString());
// String messageID = message.getJMSMessageID();
// if (messageID != null) {
// buffer.append("' id='");
// buffer.append(messageID);
// }
//
// HashMap properties = message.getProperties();
// if (properties != null) {
// for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
// Map.Entry entry = (Map.Entry) iter.next();
// Object key = entry.getKey();
// Object value = entry.getValue();
// if (value != null) {
// buffer.append("' ");
// buffer.append(key.toString());
// buffer.append("='");
// buffer.append(value.toString());
// }
// }
// }
//
// buffer.append("'>");
//
// String id = message.getJMSCorrelationID();
// if (id != null) {
// buffer.append("<thread>");
// buffer.append(id);
// buffer.append("</thread>");
// }
// buffer.append(body);
// buffer.append("</");
// buffer.append(type);
// buffer.append(">");
//
// out.write(buffer.toString().getBytes());
// }
//
// protected String encodeBinary(byte[] data,int offset,int length) {
// // TODO
// throw new RuntimeException("Not implemented yet!");
// }
//
// protected String getXmppType(ActiveMQMessage message) {
// String type = message.getJMSType();
// if (type == null) {
// type = "message";
// }
// return type;
// }
public ByteSequence marshal(Object command) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
marshal(command, dos);
dos.close();
return baos.toByteSequence();
}
public Object unmarshal(ByteSequence packet) throws IOException {
ByteArrayInputStream stream = new ByteArrayInputStream(packet);
DataInputStream dis = new DataInputStream(stream);
return unmarshal(dis);
}
public void marshal(Object object, DataOutputStream dataOutputStream) throws IOException {
/** TODO */
}
public Object unmarshal(DataInputStream dataInputStream) throws IOException {
return null; /** TODO */
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
}

View File

@ -0,0 +1,30 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp;
import org.apache.activemq.wireformat.WireFormat;
import org.apache.activemq.wireformat.WireFormatFactory;
/**
* @version $Revision$
*/
public class XmppWireFormatFactory implements WireFormatFactory {
public WireFormat createWireFormat() {
return new XmppWireFormat();
}
}

View File

@ -0,0 +1,27 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp.command;
/**
* Represents a handler of a type of event
*
* @version $Revision$
*/
public interface Handler<T> {
void handle(T event) throws Exception;
}

View File

@ -0,0 +1,42 @@
/**
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.transport.xmpp.command;
import java.util.HashMap;
import java.util.Map;
/**
* A registry of handlers
*
* @version $Revision$
*/
public class HandlerRegistry {
private Map<Class, Handler> map = new HashMap<Class, Handler>();
public Handler getHandler(Class eventType) {
synchronized (map) {
return map.get(eventType);
}
}
public void registerHandler(Class eventType, Handler handler) {
synchronized (map) {
map.put(eventType, handler);
}
}
}

View File

@ -0,0 +1 @@
class=org.apache.activemq.transport.xmpp.XmppTransportFactory

View File

@ -0,0 +1 @@
class=org.apache.activemq.transport.xmpp.XmppWireFormatFactory

View File

@ -0,0 +1,111 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/activity'
xmlns='http://jabber.org/protocol/activity'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0108: http://www.jabber.org/jeps/jep-0108.html
</xs:documentation>
</xs:annotation>
<xs:element name='activity'>
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name='doing_chores' type='general'/>
<xs:element name='drinking' type='general'/>
<xs:element name='eating' type='general'/>
<xs:element name='exercising' type='general'/>
<xs:element name='grooming' type='general'/>
<xs:element name='having_appointment' type='general'/>
<xs:element name='inactive' type='general'/>
<xs:element name='relaxing' type='general'/>
<xs:element name='talking' type='general'/>
<xs:element name='traveling' type='general'/>
<xs:element name='working' type='general'/>
</xs:choice>
<xs:element name='text' minOccurs='0' type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name='general'>
<xs:choice minOccurs='0'>
<xs:choice minOccurs='0'>
<xs:element name='at_the_spa' type='specific'/>
<xs:element name='brushing_teeth' type='specific'/>
<xs:element name='buying_groceries' type='specific'/>
<xs:element name='cleaning' type='specific'/>
<xs:element name='coding' type='specific'/>
<xs:element name='commuting' type='specific'/>
<xs:element name='cooking' type='specific'/>
<xs:element name='cycling' type='specific'/>
<xs:element name='day_off' type='specific'/>
<xs:element name='doing_maintenance' type='specific'/>
<xs:element name='doing_the_dishes' type='specific'/>
<xs:element name='doing_the_laundry' type='specific'/>
<xs:element name='driving' type='specific'/>
<xs:element name='gaming' type='specific'/>
<xs:element name='gardening' type='specific'/>
<xs:element name='getting_a_haircut' type='specific'/>
<xs:element name='going_out' type='specific'/>
<xs:element name='hanging_out' type='specific'/>
<xs:element name='having_a_beer' type='specific'/>
<xs:element name='having_a_snack' type='specific'/>
<xs:element name='having_breakfast' type='specific'/>
<xs:element name='having_coffee' type='specific'/>
<xs:element name='having_dinner' type='specific'/>
<xs:element name='having_lunch' type='specific'/>
<xs:element name='having_tea' type='specific'/>
<xs:element name='hiking' type='specific'/>
<xs:element name='in_a_car' type='specific'/>
<xs:element name='in_a_meeting' type='specific'/>
<xs:element name='in_real_life' type='specific'/>
<xs:element name='jogging' type='specific'/>
<xs:element name='on_a_bus' type='specific'/>
<xs:element name='on_a_plane' type='specific'/>
<xs:element name='on_a_train' type='specific'/>
<xs:element name='on_a_trip' type='specific'/>
<xs:element name='on_the_phone' type='specific'/>
<xs:element name='on_vacation' type='specific'/>
<xs:element name='other' type='specific'/>
<xs:element name='partying' type='specific'/>
<xs:element name='playing_sports' type='specific'/>
<xs:element name='reading' type='specific'/>
<xs:element name='rehearsing' type='specific'/>
<xs:element name='running' type='specific'/>
<xs:element name='running_an_errand' type='specific'/>
<xs:element name='scheduled_holiday' type='specific'/>
<xs:element name='shaving' type='specific'/>
<xs:element name='shopping' type='specific'/>
<xs:element name='skiing' type='specific'/>
<xs:element name='sleeping' type='specific'/>
<xs:element name='socializing' type='specific'/>
<xs:element name='studying' type='specific'/>
<xs:element name='sunbathing' type='specific'/>
<xs:element name='swimming' type='specific'/>
<xs:element name='taking_a_bath' type='specific'/>
<xs:element name='taking_a_shower' type='specific'/>
<xs:element name='walking' type='specific'/>
<xs:element name='walking_the_dog' type='specific'/>
<xs:element name='watching_tv' type='specific'/>
<xs:element name='watching_a_movie' type='specific'/>
<xs:element name='working_out' type='specific'/>
<xs:element name='writing' type='specific'/>
</xs:choice>
<xs:any namespace='##other'/>
</xs:choice>
</xs:complexType>
<xs:complexType name='specific'>
<xs:sequence minOccurs='0'>
<xs:any namespace='##other'/>
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,58 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/address'
xmlns='http://jabber.org/protocol/address'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0033: http://www.jabber.org/jeps/jep-0033.html
</xs:documentation>
</xs:annotation>
<xs:element name='addresses'>
<xs:complexType>
<xs:sequence>
<xs:element ref='address'
minOccurs='1'
maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='address'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='delivered' use='optional' fixed='true'/>
<xs:attribute name='desc' use='optional' type='xs:string'/>
<xs:attribute name='jid' use='optional' type='xs:string'/>
<xs:attribute name='node' use='optional' type='xs:string'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='bcc'/>
<xs:enumeration value='cc'/>
<xs:enumeration value='noreply'/>
<xs:enumeration value='replyroom'/>
<xs:enumeration value='replyto'/>
<xs:enumeration value='to'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='uri' use='optional' type='xs:string'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,32 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/amp#errors'
xmlns='http://jabber.org/protocol/amp#errors'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0079: http://www.jabber.org/jeps/jep-0079.html
</xs:documentation>
</xs:annotation>
<xs:element name='failed-rules'>
<xs:complexType>
<xs:sequence>
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='rule'>
<xs:complexType>
<xs:attribute name='action' use='required' type='xs:NCName'/>
<xs:attribute name='condition' use='required' type='xs:NCName'/>
<xs:attribute name='value' use='required' type='xs:string'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/features/amp'
xmlns='http://jabber.org/features/amp'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0079: http://www.jabber.org/jeps/jep-0079.html
</xs:documentation>
</xs:annotation>
<xs:element name='amp' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,60 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/amp'
xmlns='http://jabber.org/protocol/amp'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0079: http://www.jabber.org/jeps/jep-0079.html
</xs:documentation>
</xs:annotation>
<xs:element name='amp'>
<xs:complexType>
<xs:sequence>
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='from' usage='optional' type='xs:string'/>
<xs:attribute name='per-hop' use='optional' type='xs:boolean' default='false'/>
<xs:attribute name='status' usage='optional' type='xs:NCName'/>
<xs:attribute name='to' usage='optional' type='xs:string'/>
</xs:complexType>
</xs:element>
<xs:element name='invalid-rules'>
<xs:complexType>
<xs:sequence>
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='unsupported-actions'>
<xs:complexType>
<xs:sequence>
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='unsupported-conditions'>
<xs:complexType>
<xs:sequence>
<xs:element ref='rule' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='rule'>
<xs:complexType>
<xs:attribute name='action' use='required' type='xs:NCName'/>
<xs:attribute name='condition' use='required' type='xs:NCName'/>
<xs:attribute name='value' use='required' type='xs:string'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,48 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:server:dialback'
xmlns='jabber:server:dialback'
elementFormDefault='qualified'>
<xs:element name='result'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:token'>
<xs:attribute name='from' type='xs:string' use='required'/>
<xs:attribute name='to' type='xs:string' use='required'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='invalid'/>
<xs:enumeration value='valid'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='verify'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:token'>
<xs:attribute name='from' type='xs:string' use='required'/>
<xs:attribute name='id' type='xs:NMTOKEN' use='required'/>
<xs:attribute name='to' type='xs:string' use='required'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='invalid'/>
<xs:enumeration value='valid'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,54 @@
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/disco#info'
xmlns='http://jabber.org/protocol/disco#info'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0030: http://www.jabber.org/jeps/jep-0030.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:element ref='identity' maxOccurs='unbounded'/>
<xs:element ref='feature' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='identity'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='category' type='xs:string' use='required'/>
<xs:attribute name='name' type='xs:string' use='optional'/>
<xs:attribute name='type' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='feature'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='var' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,51 @@
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/disco#items'
xmlns='http://jabber.org/protocol/disco#items'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0030: http://www.jabber.org/jeps/jep-0030.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:element ref='item' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='action' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='remove'/>
<xs:enumeration value='update'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='name' type='xs:string' use='optional'/>
<xs:attribute name='node' type='xs:string' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,29 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:auth'
xmlns='jabber:iq:auth'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0078: http://www.jabber.org/jeps/jep-0078.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence>
<xs:element name='username' type='xs:string' minOccurs='0'/>
<xs:choice>
<xs:element name='password' type='xs:string' minOccurs='0'/>
<xs:element name='digest' type='xs:string' minOccurs='0'/>
</xs:choice>
<xs:element name='resource' type='xs:string' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,28 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:gateway'
xmlns='jabber:iq:gateway'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0100: http://www.jabber.org/jeps/jep-0100.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name='desc' minOccurs='0' type='xs:string'/>
<xs:element name='prompt' type='xs:string'/>
</xs:sequence>
<xs:element name='jid' type='xs:string'/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:last'
xmlns='jabber:iq:last'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0012: http://www.jabber.org/jeps/jep-0012.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='seconds' type='xs:unsignedLong' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:oob'
xmlns='jabber:iq:oob'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0066: http://www.jabber.org/jeps/jep-0066.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence>
<xs:element name='url' type='xs:string' minOccurs='1'/>
<xs:element name='desc' type='xs:string' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='sid' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:pass'
xmlns='jabber:iq:pass'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0003: http://www.jabber.org/jeps/jep-0003.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element name='client' type='PassEntity'/>
<xs:element name='close' type='empty'/>
<xs:element name='expire' type='xs:unsignedLong'/>
<xs:element name='oneshot' type='empty'/>
<xs:element name='proxy' type='PassEntity'/>
<xs:element name='server' type='PassEntity'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:complexType name='PassEntity'>
<xs:simpleContent>
<xs:extension base='xs:NMTOKEN'>
<xs:attribute name='port' type='xs:short' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,24 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:private'
xmlns='jabber:iq:private'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0049: http://www.jabber.org/jeps/jep-0049.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:any namespace='##other'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:time'
xmlns='jabber:iq:time'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0090: http://www.jabber.org/jeps/jep-0090.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:element name='utc' type='xs:string' minOccurs='1'/>
<xs:element name='tz' type='xs:string' minOccurs='0'/>
<xs:element name='display' type='xs:string' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:version'
xmlns='jabber:iq:version'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0092: http://www.jabber.org/jeps/jep-0092.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence minOccurs='0'>
<xs:element name='name' type='xs:string' minOccurs='1'/>
<xs:element name='version' type='xs:string' minOccurs='1'/>
<xs:element name='os' type='xs:string' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,212 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:client'
xmlns='jabber:client'
elementFormDefault='qualified'>
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'
schemaLocation='stanzaerror.xsd'/>
<xs:element name='message'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='subject'/>
<xs:element ref='body'/>
<xs:element ref='thread'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='optional'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='optional'/>
<xs:attribute name='type' use='optional' default='normal'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='chat'/>
<xs:enumeration value='error'/>
<xs:enumeration value='groupchat'/>
<xs:enumeration value='headline'/>
<xs:enumeration value='normal'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='body'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='nonEmptyString'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subject'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='thread'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:NMTOKEN'/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!--
<xs:element name='thread' type='xs:NMTOKEN'/>
-->
<xs:element name='presence'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='show'/>
<xs:element ref='status'/>
<xs:element ref='priority'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='optional'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='optional'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='error'/>
<xs:enumeration value='probe'/>
<xs:enumeration value='subscribe'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unavailable'/>
<xs:enumeration value='unsubscribe'/>
<xs:enumeration value='unsubscribed'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='show'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='away'/>
<xs:enumeration value='chat'/>
<xs:enumeration value='dnd'/>
<xs:enumeration value='xa'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name='status'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='statusType'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='priority' type='xs:byte'/>
<xs:element name='iq'>
<xs:complexType>
<xs:sequence>
<xs:any namespace='##other'
minOccurs='0'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='optional'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='required'/>
<xs:attribute name='to'
type='xs:string'
use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='error'/>
<xs:enumeration value='get'/>
<xs:enumeration value='result'/>
<xs:enumeration value='set'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='error'>
<xs:complexType>
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-stanzas'>
<xs:group ref='err:stanzaErrorGroup'/>
<xs:element ref='err:text'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='code' type='xs:unsignedShort' use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='auth'/>
<xs:enumeration value='cancel'/>
<xs:enumeration value='continue'/>
<xs:enumeration value='modify'/>
<xs:enumeration value='wait'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:simpleType name='statusType'>
<xs:restriction base='xs:string'>
<xs:minLength value='1'/>
<xs:maxLength value='1024'/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name='nonEmptyString'>
<xs:restriction base='xs:string'>
<xs:minLength value='1'/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,201 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:server'
xmlns='jabber:server'
elementFormDefault='qualified'>
<xs:import namespace='urn:ietf:params:xml:ns:xmpp-stanzas'
schemaLocation='stanzaerror.xsd'/>
<xs:element name='message'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='subject'/>
<xs:element ref='body'/>
<xs:element ref='thread'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='optional' default='normal'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='chat'/>
<xs:enumeration value='error'/>
<xs:enumeration value='groupchat'/>
<xs:enumeration value='headline'/>
<xs:enumeration value='normal'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='body'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='nonEmptyString'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='subject'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='thread' type='xs:NMTOKEN'/>
<xs:element name='presence'>
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='show'/>
<xs:element ref='status'/>
<xs:element ref='priority'/>
</xs:choice>
<xs:any namespace='##other'
minOccurs='0'
maxOccurs='unbounded'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='optional'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='error'/>
<xs:enumeration value='probe'/>
<xs:enumeration value='subscribe'/>
<xs:enumeration value='subscribed'/>
<xs:enumeration value='unavailable'/>
<xs:enumeration value='unsubscribe'/>
<xs:enumeration value='unsubscribed'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='show'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='away'/>
<xs:enumeration value='chat'/>
<xs:enumeration value='dnd'/>
<xs:enumeration value='xa'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name='status'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='statusType'>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='priority' type='xs:byte'/>
<xs:element name='iq'>
<xs:complexType>
<xs:sequence>
<xs:any namespace='##other'
minOccurs='0'/>
<xs:element ref='error'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from'
type='xs:string'
use='required'/>
<xs:attribute name='id'
type='xs:NMTOKEN'
use='required'/>
<xs:attribute name='to'
type='xs:string'
use='required'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='error'/>
<xs:enumeration value='get'/>
<xs:enumeration value='result'/>
<xs:enumeration value='set'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref='xml:lang' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='error'>
<xs:complexType>
<xs:sequence xmlns:err='urn:ietf:params:xml:ns:xmpp-stanzas'>
<xs:group ref='err:stanzaErrorGroup'/>
<xs:element ref='err:text'
minOccurs='0'/>
</xs:sequence>
<xs:attribute name='code' type='xs:unsignedShort' use='optional'/>
<xs:attribute name='type' use='required'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='auth'/>
<xs:enumeration value='cancel'/>
<xs:enumeration value='continue'/>
<xs:enumeration value='modify'/>
<xs:enumeration value='wait'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:simpleType name='statusType'>
<xs:restriction base='xs:string'>
<xs:minLength value='1'/>
<xs:maxLength value='1024'/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name='nonEmptyString'>
<xs:restriction base='xs:string'>
<xs:minLength value='1'/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,74 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/muc#admin'
xmlns='http://jabber.org/protocol/muc#admin'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
</xs:documentation>
</xs:annotation>
<xs:element name='query'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element ref='actor' minOccurs='0'/>
<xs:element ref='reason' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='affiliation' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='admin'/>
<xs:enumeration value='member'/>
<xs:enumeration value='none'/>
<xs:enumeration value='outcast'/>
<xs:enumeration value='owner'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='optional'/>
<xs:attribute name='nick' type='xs:string' use='optional'/>
<xs:attribute name='role' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='moderator'/>
<xs:enumeration value='none'/>
<xs:enumeration value='participant'/>
<xs:enumeration value='visitor'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='actor'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='reason' type='xs:string'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,18 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/muc#unique'
xmlns='http://jabber.org/protocol/muc#unique'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
XEP-0045: http://www.xmpp.org/extensions/xep-0045.html
</xs:documentation>
</xs:annotation>
<xs:element name='unique' type='xs:string'/>
</xs:schema>

View File

@ -0,0 +1,121 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/muc#user'
xmlns='http://jabber.org/protocol/muc#user'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:choice minOccurs='0' maxOccurs='unbounded'>
<xs:element ref='decline' minOccurs='0'/>
<xs:element ref='destroy' minOccurs='0'/>
<xs:element ref='invite' minOccurs='0' maxOccurs='unbounded'/>
<xs:element ref='item' minOccurs='0'/>
<xs:element name='password' type='xs:string' minOccurs='0'/>
<xs:element ref='status' minOccurs='0'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name='decline'>
<xs:complexType>
<xs:sequence>
<xs:element ref='reason' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from' type='xs:string' use='optional'/>
<xs:attribute name='to' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='destroy'>
<xs:complexType>
<xs:sequence>
<xs:element ref='reason' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='jid' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='invite'>
<xs:complexType>
<xs:sequence>
<xs:element ref='reason' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='from' type='xs:string' use='optional'/>
<xs:attribute name='to' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element ref='actor' minOccurs='0'/>
<xs:element ref='reason' minOccurs='0'/>
<xs:element name='continue' type='empty' minOccurs='0'/>
</xs:sequence>
<xs:attribute name='affiliation' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='admin'/>
<xs:enumeration value='member'/>
<xs:enumeration value='none'/>
<xs:enumeration value='outcast'/>
<xs:enumeration value='owner'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='optional'/>
<xs:attribute name='nick' type='xs:string' use='optional'/>
<xs:attribute name='role' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='moderator'/>
<xs:enumeration value='none'/>
<xs:enumeration value='participant'/>
<xs:enumeration value='visitor'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='actor'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='jid' type='xs:string' use='required'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='status'>
<xs:complexType>
<xs:attribute name='code' use='required'>
<xs:simpleType>
<xs:restriction base='xs:int'>
<xs:length value='3'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='reason' type='xs:string'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,44 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/muc'
xmlns='http://jabber.org/protocol/muc'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element ref='history' minOccurs='0'/>
<xs:element name='password' type='xs:string' minOccurs='0'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='history'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='empty'>
<xs:attribute name='maxchars' type='xs:int' use='optional'/>
<xs:attribute name='maxstanzas' type='xs:int' use='optional'/>
<xs:attribute name='seconds' type='xs:int' use='optional'/>
<xs:attribute name='since' type='xs:dateTime' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,51 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='jabber:iq:roster'
xmlns='jabber:iq:roster'
elementFormDefault='qualified'>
<xs:element name='query'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element ref='group'
minOccurs='0'
maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='ask' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='subscribe'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='name' type='xs:string' use='optional'/>
<xs:attribute name='subscription' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName'>
<xs:enumeration value='both'/>
<xs:enumeration value='from'/>
<xs:enumeration value='none'/>
<xs:enumeration value='remove'/>
<xs:enumeration value='to'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name='group' type='xs:string'/>
</xs:schema>

View File

@ -0,0 +1,36 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='storage:rosternotes'
xmlns='storage:rosternotes'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0045: http://www.jabber.org/jeps/jep-0045.html
</xs:documentation>
</xs:annotation>
<xs:element name='storage'>
<xs:complexType>
<xs:sequence>
<xs:element ref='note' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='note'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='cdate' type='xs:dateTime' use='optional'/>
<xs:attribute name='mdate' type='xs:dateTime' use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,43 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://jabber.org/protocol/rosterx'
xmlns='http://jabber.org/protocol/rosterx'
elementFormDefault='qualified'>
<xs:annotation>
<xs:documentation>
The protocol documented by this schema is defined in
JEP-0144: http://www.jabber.org/jeps/jep-0144.html
</xs:documentation>
</xs:annotation>
<xs:element name='x'>
<xs:complexType>
<xs:sequence>
<xs:element ref='item' minOccurs='1' maxOccurs='unbounded'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='item'>
<xs:complexType>
<xs:sequence>
<xs:element name='group' type='xs:string' minOccurs='0' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='action' use='optional'>
<xs:simpleType>
<xs:restriction base='xs:NCName' default='add'>
<xs:enumeration value='add'/>
<xs:enumeration value='delete'/>
<xs:enumeration value='modify'/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name='jid' type='xs:string' use='required'/>
<xs:attribute name='name' type='xs:string' use='optional'/>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:ietf:params:xml:ns:xmpp-sasl'
xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
elementFormDefault='qualified'>
<xs:element name='mechanisms'>
<xs:complexType>
<xs:sequence>
<xs:element name='mechanism'
maxOccurs='unbounded'
type='xs:string'/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='auth'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'>
<xs:attribute name='mechanism'
type='xs:string'
use='optional'/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='challenge'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='response'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='success'>
<xs:complexType>
<xs:simpleContent>
<xs:extension base='xs:string'/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name='abort'>
<xs:complexType>
</xs:complexType>
</xs:element>
<!--
<xs:element name='challenge' type='xs:string'/>
<xs:element name='response' type='xs:string'/>
<xs:element name='abort' type='empty'/>
<xs:element name='success' type='xs:string'/>
-->
<xs:element name='failure'>
<xs:complexType>
<xs:choice minOccurs='0'>
<xs:element name='aborted' type='empty'/>
<xs:element name='incorrect-encoding' type='empty'/>
<xs:element name='invalid-authzid' type='empty'/>
<xs:element name='invalid-mechanism' type='empty'/>
<xs:element name='mechanism-too-weak' type='empty'/>
<xs:element name='not-authorized' type='empty'/>
<xs:element name='temporary-auth-failure' type='empty'/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

View File

@ -0,0 +1,17 @@
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema
xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='urn:ietf:params:xml:ns:xmpp-session'
xmlns='urn:ietf:params:xml:ns:xmpp-session'
elementFormDefault='qualified'>
<xs:element name='session' type='empty'/>
<xs:simpleType name='empty'>
<xs:restriction base='xs:string'>
<xs:enumeration value=''/>
</xs:restriction>
</xs:simpleType>
</xs:schema>

Some files were not shown because too many files have changed in this diff Show More