Appendix A. Non-Normative RELAX NG Schema in XML Syntax
<?xml version="1.0" encoding="UTF-8" ?> <grammar ns="urn:ietf:params:xml:ns:conference-info" xmlns="http://relaxng.org/ns/structure/1.0" xmlns:xcon="urn:ietf:params:xml:ns:xcon-conference-info" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> <start> <element name="conference-info"> <ref name="conference-type"/> </element> </start> <!-- CONFERENCE TYPE --> <define name="conference-type"> <interleave> <attribute name="entity"> <text/> </attribute> <ref name="anyAttribute"/> <optional> <ref name="conference-description-type"/> </optional> <optional> <element name="host-info"> <ref name="host-type"/> </element> </optional> <optional> <element name="conference-state"> <ref name="conference-state-type"/> </element> </optional> <optional> <element name="users"> <ref name="users-type"/> </element> </optional> <optional> <element name="sidebars-by-ref"> <ref name="uris-type"/> </element> </optional> <optional> <element name="sidebars-by-val">
<ref name="sidebars-by-val-type"/> </element> </optional> <optional> <element name="xcon:floor-information"> <ref name="floor-information-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- CONFERENCE DESCRIPTION TYPE --> <define name="conference-description-type"> <element name="conference-description"> <interleave> <optional> <attribute name="xml:lang"> <data type="language"/> </attribute> </optional> <ref name="anyAttribute"/> <optional> <element name="display-text"> <text/> </element> </optional> <optional> <element name="subject"> <text/> </element> </optional> <optional> <element name="free-text"> <text/> </element> </optional> <optional> <element name="keywords"> <list> <zeroOrMore> <data type="string"/> </zeroOrMore> </list> </element>
</optional> <optional> <element name="conf-uris"> <ref name="uris-type"/> </element> </optional> <optional> <element name="service-uris"> <ref name="uris-type"/> </element> </optional> <optional> <element name="maximum-user-count"> <data type="int"/> </element> </optional> <optional> <element name="available-media"> <ref name="conference-media-type"/> </element> </optional> <optional> <element name="xcon:language"> <data type="language"/> </element> </optional> <optional> <element name="xcon:allow-sidebars"> <data type="boolean"/> </element> </optional> <optional> <element name="xcon:cloning-parent"> <data type="anyURI"/> </element> </optional> <optional> <element name="xcon:sidebar-parent"> <data type="anyURI"/> </element> </optional> <optional> <element name="xcon:conference-time"> <ref name="conferencetime-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/>
</zeroOrMore> </interleave> </element> </define> <!-- HOST TYPE --> <define name="host-type"> <interleave> <optional> <element name="display-text"> <text/> </element> </optional> <optional> <element name="web-page"> <data type="anyURI"/> </element> </optional> <optional> <element name="uris"> <ref name="uris-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> <ref name="anyAttribute"/> </interleave> </define> <!-- CONFERENCE STATE TYPE --> <define name="conference-state-type"> <interleave> <ref name="anyAttribute"/> <optional> <element name="user-count"> <data type="unsignedInt"/> </element> </optional> <optional> <element name="active"> <data type="boolean"/> </element> </optional> <optional> <element name="locked">
<data type="boolean"/> </element> </optional> <optional> <element name="xcon:allow-conference-event-subscription"> <data type="boolean"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- CONFERENCE MEDIA TYPE --> <define name="conference-media-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="entry"> <ref name="conference-medium-type"/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- CONFERENCE MEDIUM TYPE --> <define name="conference-medium-type"> <interleave> <attribute name="label"> <text/> </attribute> <ref name="anyAttribute"/> <optional> <element name="display-text"> <text/> </element> </optional> <optional> <element name="type"> <text/> </element> </optional>
<optional> <element name="status"> <ref name="media-status-type"/> </element> </optional> <optional> <element name="xcon:mixing-mode"> <ref name="mixing-mode-type"/> </element> </optional> <optional> <element name="xcon:codecs"> <ref name="codecs-type"/> </element> </optional> <optional> <element name="xcon:controls"> <ref name="control-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- URIs TYPE --> <define name="uris-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="entry"> <ref name="uri-type"/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- URI TYPE --> <define name="uri-type"> <interleave> <element name="uri"> <data type="anyURI"/>
</element> <optional> <element name="display-text"> <text/> </element> </optional> <optional> <element name="purpose"> <text/> </element> </optional> <optional> <element name="modified"> <ref name="execution-type"/> </element> </optional> <zeroOrMore> <element name="xcon:conference-password"> <text/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> <ref name="anyAttribute"/> </interleave> </define> <!-- USERS TYPE --> <define name="users-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="user"> <ref name="user-type"/> </element> </zeroOrMore> <optional> <element name="xcon:join-handling"> <ref name="join-handling-type"/> </element> </optional> <optional> <element name="xcon:user-admission-policy"> <ref name="user-admission-policy-type"/> </element>
</optional> <optional> <element name="xcon:allowed-users-list"> <ref name="allowed-users-list-type"/> </element> </optional> <optional> <element name="xcon:deny-users-list"> <ref name="deny-user-list-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- USER TYPE --> <define name="user-type"> <interleave> <attribute name="entity"> <data type="anyURI"/> </attribute> <ref name="anyAttribute"/> <optional> <element name="display-text"> <text/> </element> </optional> <optional> <element name="associated-aors"> <ref name="uris-type"/> </element> </optional> <optional> <element name="roles"> <oneOrMore> <element name="entry"> <ref name="single-role-type"/> </element> </oneOrMore> </element> </optional> <optional> <element name="languages"> <list> <data type="language"/>
</list> </element> </optional> <optional> <element name="cascaded-focus"> <data type="anyURI"/> </element> </optional> <zeroOrMore> <element name="endpoint"> <ref name="endpoint-type"/> </element> </zeroOrMore> <optional> <element name="xcon:provide-anonymity"> <ref name="provide-anonymity-type"/> </element> </optional> <optional> <element name="xcon:allow-refer-users-dynamically"> <data type="boolean"/> </element> </optional> <optional> <element name="xcon:allow-invite-users-dynamically"> <data type="boolean"/> </element> </optional> <optional> <element name="xcon:allow-remove-users-dynamically"> <data type="boolean"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- ENDPOINT TYPE --> <define name="endpoint-type"> <interleave> <attribute name="entity"> <text/> </attribute> <ref name="anyAttribute"/> <optional>
<element name="display-text"> <text/> </element> </optional> <optional> <element name="referred"> <ref name="execution-type"/> </element> </optional> <optional> <element name="status"> <ref name="endpoint-status-type"/> </element> </optional> <optional> <element name="joining-method"> <ref name="joining-type"/> </element> </optional> <optional> <element name="joining-info"> <ref name="execution-type"/> </element> </optional> <optional> <element name="disconnection-method"> <ref name="disconnection-type"/> </element> </optional> <optional> <element name="disconnection-info"> <ref name="execution-type"/> </element> </optional> <zeroOrMore> <element name="media"> <ref name="media-type"/> </element> </zeroOrMore> <optional> <element name="call-info"> <ref name="call-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave>
</define> <!-- ENDPOINT STATUS TYPE --> <define name="endpoint-status-type"> <choice> <value>pending</value> <value>dialing-out</value> <value>dialing-in</value> <value>alerting</value> <value>on-hold</value> <value>connected</value> <value>muted-via-focus</value> <value>disconnecting</value> <value>disconnected</value> <ref name="free-text-extension"/> </choice> </define> <!-- JOINING TYPE --> <define name="joining-type"> <choice> <value>dialed-in</value> <value>dialed-out</value> <value>focus-owner</value> <ref name="free-text-extension"/> </choice> </define> <!-- DISCONNECTION TYPE --> <define name="disconnection-type"> <choice> <value>departed</value> <value>booted</value> <value>failed</value> <value>busy</value> <ref name="free-text-extension"/> </choice> </define> <!-- EXECUTION TYPE --> <define name="execution-type"> <interleave> <optional> <element name="when">
<data type="dateTime"/> </element> </optional> <optional> <element name="reason"> <text/> </element> </optional> <optional> <element name="by"> <data type="anyURI"/> </element> </optional> <ref name="anyAttribute"/> </interleave> </define> <!-- CALL TYPE --> <define name="call-type"> <interleave> <element name="sip"> <ref name="sip-dialog-id-type"/> </element> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> <ref name="anyAttribute"/> </interleave> </define> <!-- SIP DIALOG ID TYPE --> <define name="sip-dialog-id-type"> <interleave> <optional> <element name="display-text"> <text/> </element> </optional> <element name="call-id"> <text/> </element> <element name="from-tag"> <text/> </element>
<element name="to-tag"> <text/> </element> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> <ref name="anyAttribute"/> </interleave> </define> <!-- MEDIA TYPE --> <define name="media-type"> <interleave> <attribute name="id"> <data type="int"/> </attribute> <ref name="anyAttribute"/> <optional> <element name="display-text"> <text/> </element> </optional> <optional> <element name="type"> <text/> </element> </optional> <optional> <element name="label"> <text/> </element> </optional> <optional> <element name="src-id"> <text/> </element> </optional> <optional> <element name="status"> <ref name="media-status-type"/> </element> </optional> <optional> <element name="xcon:to-mixer"> <ref name="mixer-type"/> </element> </optional>
<optional> <element name="xcon:from-mixer"> <ref name="mixer-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- MEDIA STATUS TYPE --> <define name="media-status-type"> <choice> <value>recvonly</value> <value>sendonly</value> <value>sendrecv</value> <value>inactive</value> <ref name="free-text-extension"/> </choice> </define> <!-- SIDEBARS-BY-VAL TYPE --> <define name="sidebars-by-val-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="entry"> <ref name="conference-type"/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- CONFERENCE TIME --> <define name="conferencetime-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="xcon:entry"> <element name="xcon:base"> <text/>
</element> <optional> <element name="xcon:mixing-start-offset"> <ref name="time-type"/> <attribute name="required-participant"> <ref name="single-role-type"/> </attribute> <ref name="anyAttribute"/> </element> </optional> <optional> <element name="xcon:mixing-end-offset"> <ref name="time-type"/> <attribute name="required-participant"> <ref name="single-role-type"/> </attribute> <ref name="anyAttribute"/> </element> </optional> <optional> <element name="xcon:can-join-after-offset"> <ref name="time-type"/> </element> </optional> <optional> <element name="xcon:must-join-before-offset"> <ref name="time-type"/> </element> </optional> <optional> <element name="xcon:request-user"> <ref name="time-type"/> </element> </optional> <optional> <element name="xcon:notify-end-of-conference"> <data type="nonNegativeInteger"/> </element> </optional> <optional> <element name="xcon:allowed-extend-mixing-end-offset"> <data type="boolean"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </element>
</zeroOrMore> </interleave> </define> <!-- TIME TYPE --> <define name="time-type"> <data type="dateTime"> <param name="pattern">.+T.+Z.*</param> </data> </define> <!-- SINGLE ROLE TYPE --> <define name="single-role-type"> <choice> <value type="string">none</value> <value type="string">administrator</value> <value type="string">moderator</value> <value type="string">user</value> <value type="string">observer</value> <value type="string">participant</value> <ref name="free-text-extension"/> </choice> </define> <!-- MIXING MODE TYPE --> <define name="mixing-mode-type"> <choice> <value type="string">moderator-controlled</value> <value type="string">FCFS</value> <value type="string">automatic</value> <ref name="free-text-extension"/> </choice> </define> <!-- CODECS TYPE --> <define name="codecs-type"> <interleave> <attribute name="decision"> <ref name="decision-type"/> </attribute> <ref name="anyAttribute"/> <zeroOrMore> <element name="xcon:codec"> <ref name="codec-type"/>
</element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- CODEC TYPE --> <define name="codec-type"> <interleave> <attribute name="name"> <text/> </attribute> <attribute name="policy"> <ref name="policy-type"/> </attribute> <ref name="anyAttribute"/> <optional> <element name="xcon:subtype"> <text/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- DECISION TYPE --> <define name="decision-type"> <choice> <value type="string">automatic</value> <value type="string">moderator-controlled</value> <ref name="free-text-extension"/> </choice> </define> <!-- POLICY TYPE --> <define name="policy-type"> <choice> <value type="string">allowed</value> <value type="string">disallowed</value> <ref name="free-text-extension"/> </choice>
</define> <!-- CONTROL TYPE --> <define name="control-type"> <interleave> <ref name="anyAttribute"/> <optional> <element name="xcon:mute"> <data type="boolean"/> </element> </optional> <optional> <element name="xcon:pause-video"> <data type="boolean"/> </element> </optional> <optional> <element name="xcon:gain"> <ref name="gain-type"/> </element> </optional> <optional> <element name="xcon:video-layout"> <ref name="video-layout-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- GAIN TYPE --> <define name="gain-type"> <data type="int"> <param name="minInclusive">-127</param> <param name="maxInclusive">127</param> </data> </define> <!-- VIDEO LAYOUT TYPE -->
<define name="video-layout-type"> <choice> <value type="string">single-view</value> <value type="string">dual-view</value> <value type="string">dual-view-crop</value> <value type="string">dual-view-2x1</value> <value type="string">dual-view-2x1-crop</value> <value type="string">quad-view</value> <value type="string">multiple-3x3</value> <value type="string">multiple-4x4</value> <value type="string">multiple-5x1</value> <value type="string">automatic</value> <ref name="free-text-extension"/> </choice> </define> <!-- FLOOR INFORMATION TYPE --> <define name="floor-information-type"> <interleave> <ref name="anyAttribute"/> <optional> <element name="xcon:conference-ID"> <data type="unsignedLong"/> </element> </optional> <optional> <element name="xcon:allow-floor-events"> <data type="boolean"/> </element> </optional> <optional> <element name="xcon:floor-request-handling"> <ref name="floor-request-type"/> </element> </optional> <optional> <element name="xcon:conference-floor-policy"> <ref name="conference-floor-policy"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- FLOOR REQUEST TYPE
--> <define name="floor-request-type"> <choice> <value type="string">block</value> <value type="string">confirm</value> <ref name="free-text-extension"/> </choice> </define> <!-- CONFERENCE FLOOR POLICY --> <define name="conference-floor-policy"> <interleave> <ref name="anyAttribute"/> <oneOrMore> <element name="xcon:floor"> <interleave> <attribute name="id"> <text/> </attribute> <ref name="anyAttribute"/> <oneOrMore> <element name="xcon:media-label"> <data type="nonNegativeInteger"/> </element> </oneOrMore> <optional> <element name="xcon:algorithm"> <ref name="algorithm-type"/> </element> </optional> <optional> <element name="xcon:max-floor-users"> <data type="nonNegativeInteger"/> </element> </optional> <optional> <element name="xcon:moderator-id"> <data type="nonNegativeInteger"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </element> </oneOrMore> </interleave>
</define> <!-- ALGORITHM POLICY --> <define name="algorithm-type"> <choice> <value type="string">moderator-controlled</value> <value type="string">FCFS</value> <value type="string">random</value> <ref name="free-text-extension"/> </choice> </define> <!-- USERS ADMISSION POLICY --> <define name="user-admission-policy-type"> <choice> <value type="string">closedAuthenticated</value> <value type="string">openAuthenticated</value> <value type="string">anonymous</value> <ref name="free-text-extension"/> </choice> </define> <!-- JOIN HANDLING TYPE --> <define name="join-handling-type"> <choice> <value type="string">block</value> <value type="string">confirm</value> <value type="string">allow</value> <value type="string">authenticate</value> <value type="string">directed-operator</value> <ref name="free-text-extension"/> </choice> </define> <!-- DENY USERLIST --> <define name="deny-user-list-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="xcon:target"> <attribute name="uri"> <data type="anyURI"/> </attribute>
<ref name="anyAttribute"/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- ALLOWED USERS LIST TYPE --> <define name="allowed-users-list-type"> <interleave> <ref name="anyAttribute"/> <zeroOrMore> <element name="xcon:target"> <ref name="target-type"/> </element> </zeroOrMore> <optional> <element name="xcon:persistent-list"> <ref name="persistent-list-type"/> </element> </optional> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- PERSISTENT LIST TYPE --> <define name="persistent-list-type"> <interleave> <zeroOrMore> <element name="xcon:user"> <interleave> <attribute name="name"> <text/> </attribute> <attribute name="nickname"> <text/> </attribute> <attribute name="id"> <text/> </attribute> <ref name="anyAttribute"/> <zeroOrMore>
<element name="xcon:e-mail"> <text/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- TARGET TYPE --> <define name="target-type"> <attribute name="uri"> <data type="anyURI"/> </attribute> <attribute name="method"> <ref name="method-type"/> </attribute> <ref name="anyAttribute"/> </define> <!-- METHOD TYPE --> <define name="method-type"> <choice> <value type="string">dial-in</value> <value type="string">dial-out</value> <value type="string">refer</value> <ref name="free-text-extension"/> </choice> </define> <!-- ANONYMITY TYPE --> <define name="provide-anonymity-type"> <choice> <value>private</value> <value>semi-private</value> <value>hidden</value> <ref name="free-text-extension"/> </choice>
</define> <!-- MIXER TYPE --> <define name="mixer-type"> <interleave> <attribute name="name"> <ref name="mixer-name-type"/> </attribute> <ref name="anyAttribute"/> <zeroOrMore> <element name="xcon:floor"> <attribute name="id"> <text/> </attribute> <ref name="anyAttribute"/> <data type="boolean"/> </element> </zeroOrMore> <zeroOrMore> <element name="xcon:controls"> <ref name="control-type"/> </element> </zeroOrMore> <zeroOrMore> <ref name="anyElement"/> </zeroOrMore> </interleave> </define> <!-- MIXER NAME TYPE --> <define name="mixer-name-type"> <choice> <value>VideoIn</value> <value>VideoOut</value> <value>AudioOut</value> <value>AudioIn</value> <ref name="free-text-extension"/> </choice> </define> <!-- FREE TEXT EXTENSION --> <define name="free-text-extension"> <text/> </define>
<!-- ********************************* EXTENSIBILITY OF THE SCHEMA ********************************* --> <!-- EXTENSIBILITY ELEMENTS --> <define name="anyElement"> <element> <anyName> <except> <name>conference-description</name> <name>host-info</name> <name>conference-state</name> <name>users</name> <name>sidebars-by-ref</name> <name>sidebars-by-val</name> <name>display-text</name> <name>subject</name> <name>free-text</name> <name>keywords</name> <name>conf-uris</name> <name>service-uris</name> <name>maximum-user-count</name> <name>available-media</name> <name>web-page</name> <name>uris</name> <name>uri</name> <name>user-count</name> <name>active</name> <name>locked</name> <name>entry</name> <name>type</name> <name>status</name> <name>purpose</name> <name>modified</name> <name>user</name> <name>associated-aors</name> <name>roles</name> <name>languages</name> <name>cascaded-focus</name> <name>endpoint</name> <name>referred</name> <name>joining-method</name> <name>joining-info</name> <name>disconnection-method</name> <name>disconnection-info</name>
<name>media</name> <name>call-info</name> <name>when</name> <name>reason</name> <name>by</name> <name>sip</name> <name>call-id</name> <name>from-tag</name> <name>to-tag</name> <name>label</name> <name>src-id</name> <name>xcon:conference-password</name> <name>xcon:mixing-mode</name> <name>xcon:codecs</name> <name>xcon:controls</name> <name>xcon:language</name> <name>xcon:allow-sidebars</name> <name>xcon:cloning-parent</name> <name>xcon:sidebar-parent</name> <name>xcon:allow-conference-event-subscription</name> <name>xcon:to-mixer</name> <name>xcon:provide-anonymity</name> <name>xcon:allow-refer-users-dynamically</name> <name>xcon:allow-invite-users-dynamically</name> <name>xcon:allow-remove-users-dynamically</name> <name>xcon:from-mixer</name> <name>xcon:join-handling</name> <name>xcon:user-admission-policy</name> <name>xcon:allowed-users-list</name> <name>xcon:deny-users-list</name> <name>xcon:floor-information</name> <name>xcon:conference-time</name> <name>xcon:provide-anonymity</name> <name>xcon:floor</name> <name>xcon:entry</name> <name>xcon:mixing-start-offset</name> <name>xcon:mixing-end-offset</name> <name>xcon:can-join-after-offset</name> <name>xcon:must-join-before-offset</name> <name>xcon:request-user</name> <name>xcon:notify-end-of-conference</name> <name>xcon:allowed-extend-mixing-end-offset</name> <name>xcon:codec</name> <name>xcon:subtype</name> <name>xcon:mute</name> <name>xcon:pause-video</name> <name>xcon:gain</name> <name>xcon:video-layout</name>
<name>xcon:conference-ID</name> <name>xcon:allow-floor-events</name> <name>xcon:floor-request-handling</name> <name>xcon:conference-floor-policy</name> <name>xcon:media-label</name> <name>xcon:algorithm</name> <name>xcon:max-floor-users</name> <name>xcon:moderator-id</name> <name>xcon:target</name> <name>xcon:persistent-list</name> <name>xcon:e-mail</name> <name>xcon:user</name> </except> </anyName> <ref name="anyExtension"/> </element> </define> <define name="anyExtension"> <zeroOrMore> <choice> <attribute> <anyName/> </attribute> <ref name="any"/> </choice> </zeroOrMore> </define> <define name="any"> <element> <anyName/> <zeroOrMore> <choice> <attribute> <anyName/> </attribute> <text/> <ref name="any"/> </choice> </zeroOrMore> </element> </define> <!-- EXTENSIBILITY ATTRIBUTES -->
<define name="anyAttribute"> <zeroOrMore> <attribute> <anyName> <except> <name ns="http://www.w3.org/XML/1998/namespace">lang </name> <name ns="">entity</name> <name ns="">required-participant</name> <name ns="">label</name> <name ns="">decision</name> <name ns="">name</name> <name ns="">policy</name> <name ns="">uri</name> <name ns="">method</name> <name ns="">id</name> <name ns="">nickname</name> </except> </anyName> </attribute> </zeroOrMore> </define> </grammar>
Appendix B. Non-Normative W3C XML Schema
The non-normative W3C XML schema defines extension elements in the "urn:ietf:params:xml:ns:xcon-conference-info" namespace. Note that <xs:any> extensions in this schema are stricter than in the normative RELAX NG schema [RELAX], and the normative RELAX NG schema [RELAX] allows unordered child elements unlike this schema (and the [RFC4575] schema). Also, note that this schema allows otherwise valid extension elements to appear in the non-allowed positions. Likewise, the cardinalities of these extension elements cannot be constrained with this schema. <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns="urn:ietf:params:xml:ns:xcon-conference-info" xmlns:info="urn:ietf:params:xml:ns:conference-info" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:ietf:params:xml:ns:xcon-conference-info"> <xs:import namespace="urn:ietf:params:xml:ns:conference-info" schemaLocation="rfc4575.xsd"/> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/> <xs:element name="mixing-mode" type="mixing-mode-type"/> <xs:element name="codecs" type="codecs-type"/> <xs:element name="conference-password" type="xs:string"/> <xs:element name="controls" type="controls-type"/> <xs:element name="language" type="xs:language"/> <xs:element name="allow-sidebars" type="xs:boolean"/> <xs:element name="cloning-parent" type="xs:anyURI"/> <xs:element name="sidebar-parent" type="xs:anyURI"/> <xs:element name="conference-time" type="conference-time-type"/> <xs:element name="allow-conference-event-subscription" type="xs:boolean"/> <xs:element name="to-mixer" type="mixer-type"/> <xs:element name="provide-anonymity" type="provide-anonymity-type"/> <xs:element name="allow-refer-users-dynamically" type="xs:boolean"/> <xs:element name="allow-invite-users-dynamically" type="xs:boolean"/> <xs:element name="allow-remove-users-dynamically" type="xs:boolean"/> <xs:element name="from-mixer" type="mixer-type"/> <xs:element name="join-handling" type="join-handling-type"/>
<xs:element name="user-admission-policy" type="user-admission-policy-type"/> <xs:element name="allowed-users-list" type="allowed-users-list-type"/> <xs:element name="deny-users-list" type="deny-users-list-type"/> <xs:element name="floor-information" type="floor-information-type"/> <!-- CONFERENCE TIME --> <xs:complexType name="conference-time-type"> <xs:sequence> <xs:element name="entry" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="base" type="xs:string" minOccurs="1"/> <xs:element name="mixing-start-offset" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:extension base="time-type"> <xs:attribute name="required-participant" type="role-type" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="mixing-end-offset" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:extension base="time-type"> <xs:attribute name="required-participant" type="role-type" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="can-join-after-offset" type="time-type" minOccurs="0"/> <xs:element name="must-join-before-offset" type="time-type" minOccurs="0"/> <xs:element name="request-user" type="time-type" minOccurs="0"/> <xs:element name="notify-end-of-conference"
type="xs:nonNegativeInteger" minOccurs="0"/> <xs:element name="allowed-extend-mixing-end-offset" type="xs:boolean" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- TIME TYPE --> <xs:simpleType name="time-type"> <xs:restriction base="xs:dateTime"> <xs:pattern value=".+T.+Z.*"/> </xs:restriction> </xs:simpleType> <!-- ROLE-TYPE --> <xs:simpleType name="role-type"> <xs:restriction base="xs:string"> <xs:pattern value="none"/> <xs:pattern value="administrator"/> <xs:pattern value="moderator"/> <xs:pattern value="user"/> <xs:pattern value="observer"/> <xs:pattern value="participant"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- MIXING MODE TYPE --> <xs:simpleType name="mixing-mode-type"> <xs:restriction base="xs:string"> <xs:pattern value="moderator-controlled"/> <xs:pattern value="FCFS"/> <xs:pattern value="automatic"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- CODECS TYPE -->
<xs:complexType name="codecs-type"> <xs:sequence> <xs:element name="codec" type="codec-type"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="decision" type="decision-type" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- CODEC TYPE --> <xs:complexType name="codec-type"> <xs:sequence> <xs:element name="subtype" type="xs:string" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="policy" type="policy-type" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- DECISION TYPE --> <xs:simpleType name="decision-type"> <xs:restriction base="xs:string"> <xs:pattern value="automatic"/> <xs:pattern value="moderator-controlled"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- POLICY TYPE --> <xs:simpleType name="policy-type"> <xs:restriction base="xs:string"> <xs:pattern value="allowed"/> <xs:pattern value="disallowed"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- CONTROL TYPE -->
<xs:complexType name="controls-type"> <xs:sequence> <xs:element name="mute" type="xs:boolean" minOccurs="0"/> <xs:element name="pause-video" type="xs:boolean" minOccurs="0"/> <xs:element name="gain" type="gain-type" minOccurs="0"/> <xs:element name="video-layout" type="video-layout-type" default="single-view" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- GAIN TYPE --> <xs:simpleType name="gain-type"> <xs:restriction base="xs:integer"> <xs:minInclusive value="-127"/> <xs:maxInclusive value="127"/> </xs:restriction> </xs:simpleType> <!-- VIDEO LAYOUT TYPE --> <xs:simpleType name="video-layout-type"> <xs:restriction base="xs:string"> <xs:pattern value="single-view"/> <xs:pattern value="dual-view"/> <xs:pattern value="dual-view-crop"/> <xs:pattern value="dual-view-2x1"/> <xs:pattern value="dual-view-2x1-crop"/> <xs:pattern value="quad-view"/> <xs:pattern value="multiple-3x3"/> <xs:pattern value="multiple-4x4"/> <xs:pattern value="multiple-5x1"/> <xs:pattern value="automatic"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- FLOOR INFORMATION TYPE -->
<xs:complexType name="floor-information-type"> <xs:sequence> <xs:element name="conference-ID" type="xs:unsignedLong" minOccurs="0"/> <xs:element name="allow-floor-events" type="xs:boolean" default="false" minOccurs="0"/> <xs:element name="floor-request-handling" type="floor-request-handling-type" minOccurs="0"/> <xs:element name="conference-floor-policy" type="conference-floor-policy" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- FLOOR REQUEST TYPE --> <xs:simpleType name="floor-request-handling-type"> <xs:restriction base="xs:string"> <xs:pattern value="block"/> <xs:pattern value="confirm"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- CONFERENCE FLOOR POLICY --> <xs:complexType name="conference-floor-policy"> <xs:sequence> <xs:element name="floor" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="media-label" type="xs:string" minOccurs="1" maxOccurs="unbounded"/> <xs:element name="algorithm" type="algorithm-type" minOccurs="0"/> <xs:element name="max-floor-users" type="xs:nonNegativeInteger" minOccurs="0"/> <xs:element name="moderator-id" type="xs:nonNegativeInteger" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> </xs:element>
</xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- ALGORITHM TYPE --> <xs:simpleType name="algorithm-type"> <xs:restriction base="xs:string"> <xs:pattern value="moderator-controlled"/> <xs:pattern value="FCFS"/> <xs:pattern value="random"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- USER ADMISSION POLICY TYPE --> <xs:simpleType name="user-admission-policy-type"> <xs:restriction base="xs:string"> <xs:pattern value="closedAuthenticated"/> <xs:pattern value="openAuthenticated"/> <xs:pattern value="anonymous"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- JOIN HANDLING TYPE --> <xs:simpleType name="join-handling-type"> <xs:restriction base="xs:string"> <xs:pattern value="block"/> <xs:pattern value="confirm"/> <xs:pattern value="allow"/> <xs:pattern value="authenticate"/> <xs:pattern value="directed-operator"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- DENY USER LIST TYPE --> <xs:complexType name="deny-users-list-type"> <xs:sequence> <xs:element name="target" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="uri" use="required" type="xs:anyURI"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType>
</xs:element> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- ALLOWED USERS LIST TYPE --> <xs:complexType name="allowed-users-list-type"> <xs:sequence> <xs:element name="target" type="target-type" minOccurs="0" maxOccurs="unbounded"> </xs:element> <xs:element name="persistent-list" type="persistent-list-type" minOccurs="0"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- PERSISTENT LIST TYPE --> <xs:complexType name="persistent-list-type"> <xs:sequence> <xs:element name="user" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="email" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" use="required" type="xs:anyURI"/> <xs:attribute name="nickname" use="required" type="xs:string"/> <xs:attribute name="id" use="required" type="xs:string"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> </xs:element> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType> <!-- TARGET TYPE --> <xs:complexType name="target-type"> <xs:attribute name="uri" use="required" type="xs:anyURI"/> <xs:attribute name="method" use="required" type="method-type"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- METHOD TYPE --> <xs:simpleType name="method-type"> <xs:restriction base="xs:string"> <xs:pattern value="dial-in"/> <xs:pattern value="dial-out"/> <xs:pattern value="refer"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- ANONYMITY TYPE --> <xs:simpleType name="provide-anonymity-type"> <xs:restriction base="xs:string"> <xs:pattern value="private"/> <xs:pattern value="semi-private"/> <xs:pattern value="hidden"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> <!-- MIXER TYPE --> <xs:complexType name="mixer-type"> <xs:sequence> <xs:element name="floor"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:boolean"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:extension> </xs:simpleContent>
</xs:complexType> </xs:element> <xs:element name="controls" type="controls-type" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="mixer-name-type" use="required"/> <xs:anyAttribute namespace="##any" processContents="lax"/> </xs:complexType> <!-- MIXER NAME TYPE --> <xs:simpleType name="mixer-name-type"> <xs:restriction base="xs:string"> <xs:pattern value="VideoIn"/> <xs:pattern value="VideoOut"/> <xs:pattern value="AudioOut"/> <xs:pattern value="AudioIn"/> <xs:pattern value=".+"/> </xs:restriction> </xs:simpleType> </xs:schema>
Authors' Addresses
Oscar Novo Ericsson Hirsalantie 11 Jorvas 02420 Finland EMail: Oscar.Novo@ericsson.com Gonzalo Camarillo Ericsson Hirsalantie 11 Jorvas 02420 Finland EMail: Gonzalo.Camarillo@ericsson.com David P. Morgan Fidelity Investments 82 Devonshire St, MZ V3C Boston, MA 02109-3614 USA EMail: Dave.Morgan@fmr.com Jari Urpalainen Nokia Itamerenkatu 11-13 Helsinki 00180 Finland Phone: +358 7180 37686 EMail: jari.urpalainen@nokia.com