tech-invite   World Map     

IETF     RFCs     Groups     SIP     ABNFs    |    3GPP     Specs     Glossaries     Architecture     IMS     UICC    |    search     info

RFC 5707

 
 
 

Media Server Markup Language (MSML)

Part 5 of 6, p. 113 to 148
Prev RFC Part       Next RFC Part

 


prevText      Top      Up      ToC       Page 113 
12.  MSML Conference Examples

   These examples focus on the MSML Conference Core Package used by a
   control agent (CA) to control services on a media server (MS).  They
   show the relationship between SIP signaling to establish media
   sessions and MSML service control commands.  For brevity, only the
   content of MSML messages is shown.  The examples assumes that the CA
   and MS use the IPv4 address and UDP port number of the audio stream
   (on the MS) to identify the MSML connection.

12.1.  Establishing a Dial-In Conference

      UA                   Control Agent             Media Server
      |                         |                           |
      |                         |        INVITE F1          |
      |                         |-------------------------->|
      |                         |           200 F2          |
      |                         |<--------------------------|
      |                         |           ACK F3          |
      |                         |-------------------------->|
      |                         |                           |
      |                         |     createconference> F4  |
      |                         |-------------------------->|
      |                         |           200 F5          |
      |                         |<--------------------------|
      |    INVITE (SDP UA) F6   |                           |
      |------------------------>|                           |
      |                         |      INVITE (SDP UA) F7   |
      |                         |-------------------------->|
      |                         |        200 (SDP MS) F8    |
      |                         |<--------------------------|
      |                         |           ACK F9          |
      |                         |-------------------------->|
      |     200 (SDP MS) F10    |                           |
      |<------------------------|                           |
      |        ACK F11          |                           |

Top      Up      ToC       Page 114 
      |------------------------>|                           |
      |                         |     <dialogstart> F12     |
      |                         |-------------------------->|
      |                         |           200 F13         |
      |                         |<--------------------------|
      |                         |    HTTP interactions F14  |
      |                         |<------------------------->|
      |                         |  <event>(dialog.exit) F15 |
      |                         |<--------------------------|
      |                         |         <join> F16        |
      |                         |-------------------------->|
      |                         |           200 F17         |
      |                         |<--------------------------|
      |         ...             |            ...            |
      |                         |                           |
      |                         |     <dialogstart> F18     |
      |                         |-------------------------->|
      |                         |           200 F19         |
      |                         |-------------------------->|
      |                         |    HTTP interactions F20  |
      |                         |<--------------------------|
      |                         |  <event>(dialog.exit) F21 |
      |                         |-------------------------->|
      |         ...             |            ...            |
      |                         |                           |

   Steps 1-3: establish an MSML control channel for the conference.
   Alternatively, a control channel could already have been established
   that was used for all CA/MS interactions.  A control channel per
   conference is only one possible model.  Currently, MSML uses SIP INFO
   requests and responses on this SIP dialog.  There is a proposal to
   use this message exchange to establish a TCP channel for MSML similar
   to the approach used for the Media Resource Control Protocol v2
   (MRCPv2).  This approach would require that a request identifier be
   added to the <msml> element to correlate requests and responses.
   This currently relies on the SIP INFO request and response for this
   property.  MSML messages are shown without specifying the transport
   in this example, but it assumes a request/response correlation based
   on transport messages.

   Step 4: create a conference that will mix the loudest two speakers
   and report those speakers to the control agent every 10 seconds.  The
   media server will automatically terminate remaining media sessions
   and delete the conference and associated resources and when the
   control channel is terminated.

Top      Up      ToC       Page 115 
      <msml version="1.1">
         <createconference name="exampleConf" deletewhen="nocontrol">
             <audiomix>
                <n-loudest n="3"/>
                <asn ri="10s"/>
             </audiomix>
         </createconference>
      </msml>

   Step 5: conference created successfully

      <msml version="1.1">
         <result response="200"/>
      </msml>

   Steps 6-11: standard 3PCC establishment of a user-initiated media
   session to a media server.  This is the equivalent of a dial-in
   conference participant.  The "To:" header returned by the MS in the
   200 response of Step F8 was:

   To: <sip:msml@ms.example.com>;tag=jd87dfg4h

   Step 12: request an initial dialog with the participant to prompt for
   their name, desired conference, etc.  The dialog completes by
   informing the participant that they are joining the conference.  If
   this was not the first participant, the dialog could also announce
   the other participants.

      <msml version="1.1">
         <dialogstart target="conn:jd87dfg4h" name="12345"
             type="application/vxml+xml"
             src="http://server.example.com/scripts/initial.vxml"/>
      </msml>

   Step 13: dialog started successfully.  The dialog identifier is
   returned.

      <msml version="1.1">
         <result response="200"/>
         <dialogid>conn:jd87dfg4h/dialog:12345</dialogid>
      </msml>

   Step 14: sequence of HTTP VoiceXML dialog interactions.

   Step 15: the VoiceXML browser exits (but does not disconnect).  If a
   namelist had been specified within the VoiceXML <exit> element, it
   would have been included in the <event> sent to the CA.

Top      Up      ToC       Page 116 
      <msml version="1.1">
         <event name="msml.dialog.exit"
                id="conn:jd87dfg4h/dialog:12345"/>
      </msml>

   Step 16: join the participant to the conference and have the volume
   of their contributing audio automatically adjusted to a target level
   of -20 dBm0.

      <msml version="1.1">
         <join id1="conn:jd87dfg4h" id2="conf:exampleConf">
            <stream media="audio" dir="from-id1">
                <gain agc="true" tgtlvl="-20"/>
            </stream>
            <stream media="audio" dir="to-id1"/>
      </msml>

   Step 17: successfully joined to conference

      <msml version="1.1">
         <result response="200"/>
      </msml>

   Steps 6 through 17 are repeated for the second participant.

   Step 18: play a join tone or message announcing the new participant
   to the conference.

      <msml version="1.1">
         <dialogstart target="conf:exampleConf"
             type="application/vxml+xml"
             src="http://server.example.com/scripts/joinmsg.vxml"/>
      </msml>

   Step 19: dialog started successfully.  The dialog identifier is
   returned.  The media server assigned a unique identifier since name
   attribute was not specified in <dialogstart>.

      <msml version="1.1">
         <result response="200"/>
         <dialogid>conf:ExampleConf/dialog:j6fs8745</dialogid>
      </msml>

   Step 20: HTTP VoiceXML dialog interaction(s).

Top      Up      ToC       Page 117 
   Step 21: the VoiceXML browser exits.

      <msml version="1.1">
         <event name="msml.dialog.exit"
                id="conf:ExampleConf/dialog:j6fs8745"/>
      </msml>

   Steps 6 through 21 are repeated for the third and subsequent
   participants.

12.2.  Example of a Sidebar Audio Conference

   This example assumes that a conference has already been established
   as in the previous example.  It creates a sidebar conference that
   hears the main conference as a whisper.  Three participants are moved
   to the sidebar.  After some period of time, the sidebar participants
   are returned to the main conference and the sidebar is deleted.

   Step 1: the sidebar conference is created.  It is joined half-duplex
   to the main conference and a manual gain object is inserted in the
   media stream.  Three participants are then moved from the main
   conference to the sidebar.  Although not shown, a CA could include
   the "mark" attribute in each element to allow recovery in the event
   of a mid- transaction error.

      <msml version="1.1">
         <createconference name="sidebarConf"
                           deletewhen="nomedia">
             <audiomix/>
         </createconference>
         <join id1="conf:sidebarConf" id2="conf:exampleConf">
             <stream media="audio" dir="to-id1">
                 <gain amt="-20"/>
             </stream>
         </join>
         <unjoin id1="conn:gs5s4-1" id2="conf:exampleConf"/>
         <join id1="conn:gs5s4-1" id2="conf:sidebarConf"/>
         <unjoin id1="conn:hd764gr9-2" id2="conf:exampleConf"/>
         <join id1="conn:hd764gr9-2" id2="conf:sidebarConf"/>
         <unjoin id1="conn:h37frdvgs65-3" id2="conf:exampleConf"/>
         <join id1="conn:h37frdvgs65-3" id2="conf:sidebarConf"/>
      </msml>

Top      Up      ToC       Page 118 
   Step 2: sidebar conference created successfully and participants
   joined.

      <msml version="1.1">
         <result response="200"/>
      </msml>

   Step 3: once the sidebar conference has completed, the participants
   are rejoined to the main conference.  The sidebar is destroyed
   automatically by the MS when the last media stream is removed as
   specified when the sidebar conference was created.

      <msml version="1.1">
         <unjoin id1="conn:gs5s4-1" id2="conf:sidebarConf"/>
         <join id1="conn:gs5s4-1" id2="conf:exampleConf"/>
         <unjoin id1="conn:hd764gr9-2" id2="conf:sidebarConf"/>
         <join id1="conn:hd764gr9-2" id2="conf:exampleConf"/>
         <unjoin id1="conn:h37frdvgs65-3" id2="conf:sidebarConf"/>
         <join id1="conn:h37frdvgs65-3" id2="conf:exampleConf"/>
      </msml>

   Step 4: participants successfully moved to main conference and
   sidebar destroyed.

      <msml version="1.1">
         <result response="200"/>
      </msml>

12.3.  Example of Removing a Conference

   This example assumes a conference created similar to the first
   example where there is an MSML control channel specific to the
   conference and the conference has been configured to be deleted when
   that channel is removed (using SIP).

   Steps 1-2: the CA signals BYE for the SIP dialog used to establish
   the conference control channel.

   Steps 3-6: the MS initiates terminating the media sessions for each
   participant remaining in the conference.

   The MS deletes the conference and removes all resources when the last
   participant has been removed.

12.4.  Example of Modifying Video Layout

   Assume that a conference named "example" is created using the
   following mixer descriptions.

Top      Up      ToC       Page 119 
      +---+---+
      | 1 | 2 |
      +---+---+
      | 3 | 4 |
      +---+---+

      <createconference name="quad-split">
         <audiomix>
            <n-loudest n="3"/>
            <asn ri="10s"/>
         </audiomix>
         <videolayout>
            <root size="CIF" background="white" />
            <selector id="default" method="vas" si="500ms">
               <region id="1" left="0" top="0" relativesize="1/4"/>
            </selector>
            <region id="2" left="50%" top="0" relativesize="1/4"/>
            <region id="3" left="0%" top="50%" relativesize="1/4">
            <region id="4" left="50%" top="50%" relativesize="1/4"/>
         </videolayout>
      </createconference>

      The following would change the size of the video window to QCIF
      and the background color to the default "black".

      <modifyconference id="conf:example">
         <videolayout>
            <root size="4CIF"/>
         </videolayout>
      </modifyconference>

   The relative location of the regions does not change.  However, the
   sizes of the regions do change because they are relative to the size
   of the root window.  The result is a layout that looks identical but
   half the size.

   The following would freeze the video displayed in region "2" without
   affecting any other attributes of that region.

      <modifyconference id="conf:example">
         <videolayout>
            <region id="2" left="50%" top="0" relativesize="1/4"
                           freeze="true"/>
         </videolayout>
      </modifyconference>

Top      Up      ToC       Page 120 
13.  MSML Dialog Examples

   These examples focus on the MSML Dialog Base Package and the MSML
   Dialog Group Package.

13.1.  Announcement

   The following is a simple announcement scenario.  Two recorded audio
   files are played in sequence followed by generated speech followed by
   a variable.  The results are reported once media generation
   completes.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogstart target="conn:12345" name="12345">
            <play>
               <audio uri="file://clip1.wav"/>
               <audio uri="http://host1/clip2.wav"/>
               <tts uri="http://host2/text.ssml"/>
               <var type="date" subtype="mdy" value="20030601"/>
            </play>
            <send target="source" event="done" namelist="play.amt
                                               play.end"/>
         </dialogstart>
      </msml>

13.2.  Voice Mail Retrieval

   Below is an example that shows a simple voice mail retrieval
   operation consisting of playing a message and allowing the user to
   pause and resume play using '5' to toggle the state.  The operation
   would terminate when the play completed or the user entered '#'.

   During the play, the user can advance forward and backward through
   the message as well as rewinding to the beginning.

Top      Up      ToC       Page 121 
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
        <dialogstart target="conn:12345" name="12345">
         <group topology="parallel">
            <play>
               <audio uri="file://message.wav"/>
               <playexit>
                  <send target="group" event="terminate"/>
               </playexit>
            </play>
            <dtmf iterate="forever">
               <pattern digits="5">
                  <send target="play" event="toggle-state"/>
               </pattern>
               <pattern digits="6">
                  <send target="play" event="forward"/>
               </pattern>
               <pattern digits="7">
                  <send target="play" event="backward"/>
               </pattern>
               <pattern digits="8">
                  <send target="play" event="restart"/>
               </pattern>
               <pattern digits="#">
                  <send target="play" event="terminate"/>
               </pattern>
            </dtmf>
         </group>
       </dialogstart>
      </msml>

Top      Up      ToC       Page 122 
13.3.  Play and Record

   A more complex example is a play and record operation.  This sources
   and sinks media and uses voice activity DTMF detection and
   recognition to influence behavior.  Any DTMF input or voice activity
   will barge the play and cause the record to begin.  However, if the
   prompt was barged with a DTMF digit of '#', the record terminates
   without starting.  When the play terminates, it send a starttimer
   event to the VAD to allow it to recognize an initial silence
   condition.  The recording will be terminated (without starting) when
   the VAD detects an initial 3 seconds of silence.

   Once resumed (based upon voice detection), the recording may be
   terminated under several conditions.  It will terminate after 5
   seconds of silence or after 60 seconds elapses.  It will also
   terminate if a '#' key is recognized.  Every aspect of this behavior
   can be modified by changing what is recognized and the events that
   are sent.  The following example uses the MSML Dialog Group Package.

Top      Up      ToC       Page 123 
      <?xml version="1.0" encoding="UTF-8"?>
      <msml  version="1.1">
       <dialogstart target="conn:12345" name="12345">
         <group topology="parallel">
            <play>
               <audio uri="file://prompt.wav"/>
               <playexit>
                  <send target="vad" event="starttimer"/>
               </playexit>
            </play>
            <dtmf>
               <pattern digits="#">
                  <send target="record" event="terminate.termkey"/>
               </pattern>
               <detect>
                  <send target="play" event="terminate"/>
               </detect>
            </dtmf>
            <vad>
               <voice len="10ms">
                  <send target="play" event="terminate"/>
                  <send target="record" event="resume"/>
               </voice>
               <silence len="3s">
                  <send target="record" event="nospeech"/>
               </silence>
               <tsilence len="5s">
                  <send target="record" event="terminate.finalsilence"/>
               </tsilence>
            </vad>
            <record initial="suspend" maxtime="60s"
                    dest="file://record.wav" format="g729">
               <recordexit>
                  <send target="group" event="terminate"/>
               </recordexit>
            </record>
            <groupexit>
               <send target="source" event="done"
                     namelist="record.len record.end"/>
            </groupexit>
         </group>
       </dialogstart>
      </msml>

Top      Up      ToC       Page 124 
   The following implements the same functionality, as described above,
   in using the MSML Dialog Base Package, using the <record> composite
   mechanism for the play and record operation.

   <?xml version="1.0" encoding="UTF-8"?>
   <msml  version="1.1">
    <dialogstart target="conn:12345" name="12345">
      <record prespeech="3s" postspeech="5s" maxtime="60s" termkey="#"
                 dest="file://record.wav" format="g729">
         <play barge="true">
            <audio uri="file://prompt.wav"/>
         </play>
         <recordexit>
            <send target="source" event="done"
                  namelist="record.len record.end"/>
         </recordexit>
      </record>
    </dialogstart>
   </msml>

Top      Up      ToC       Page 125 
13.4.  Speech Recognition

   The following simple example requests that a user speak the name of a
   city and returns the result.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
       <dialogstart target="conn:12345" name="12345">
         <group topology="parallel">
            <play>
               <audio uri="file://prompt.wav"/>
            </play>
            <speech>
               <grammar version="1.0">
                  <rule id="city" scope="public">
                     <item>
                        <one-of>
                           <item>vancouver</item>
                           <item>new york</item>
                           <item>london</item>
                        </one-of>
                     </item>
                  </rule>
                  <match>
                     <send target="group" event="terminate"/>
                  </match>
               </grammar>
               <noinput>
                  <send target="group" event="terminate"/>
               </noinput>
               <nomatch>
                  <send target="group" event="terminate"/>
               </nomatch>
            </speech>
            <groupexit>
               <send target="source" event="done"
                             namelist="speech.end speech.results"/>
            </groupexit>
         </group>
       </dialogstart>
      </msml>

13.5.  Play and Collect

   This example prompts a user to enter 4 DTMF digits terminated by the
   '#' key (represented by "xxxx#" below).  The prompt will be barged
   and the user has 10 seconds to begin entering input or no input will
   be indicated.

Top      Up      ToC       Page 126 
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
       <dialogstart target="conn:12345" name="12345">
         <group topology="parallel">
            <play>
               <audio uri="file://prompt.wav"/>
               <playexit>
                  <send target="dtmf" event="starttimer"/>
               </playexit>
            </play>
            <dtmf fdt="10s" idt="16s">
               <pattern digits="xxxx#">
                  <send target="group" event="terminate"/>
               </pattern>
               <detect>
                  <send target="play" event="terminate"/>
               </detect>
               <noinput>
                  <send target="group" event="terminate"/>
               </noinput>
               <nomatch>
                  <send target="group" event="terminate"/>
               </nomatch>
            </dtmf>
            <groupexit>
               <send target="source" event="done"
                     namelist="dtmf.digits dtmf.end"/>
            </groupexit>
         </group>
       </dialogstart>
      </msml>

Top      Up      ToC       Page 127 
   The following implements the same functionality, as described above,
   using the MSML Dialog Base Package, using the <collect> composite
   mechanism for the play and collect operation.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
       <dialogstart target="conn:12345" name="12345">

         <collect fdt="10s" idt="16s">
            <play barge="true">
               <audio uri="file://prompt.wav"/>
            </play>
            <pattern digits="xxxx#">
               <send target="source" event="done"
                     namelist="dtmf.digits dtmf.end"/>
            </pattern>
            <noinput>
               <send target="source" event="done"
                     namelist="dtmf.end"/>
            </noinput>
            <nomatch>
               <send target="source" event="done"
                     namelist="dtmf.end"/>
            </nomatch>
         </collect>
       </dialogstart>
      </msml>

Top      Up      ToC       Page 128 
13.6.  User Controlled Gain

   This shows an example of nesting groups to create an arbitrary full-
   duplex media control.  DTMF is detected on media flowing in one
   direction and used to adjust the gain applied to media flowing in the
   opposite direction.  Additionally, the stream that is used to detect
   DTMF has DTMF removed and its gain automatically adjusted before
   leaving the group.  This widget could be used between a conference
   participant and a conference mixer.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml  version="1.0">
       <dialogstart target="conn:12345" name="12345">
         <group topology="fullduplex">
            <group topology="parallel">
               <dtmf>
                  <pattern digits="1" iterate="forever">
                     <send target="gain" event="louder"/>
                  </pattern>
                  <pattern digits="2" iterate="forever">
                     <send target="gain" event="softer"/>
                  </pattern>
               </dtmf>
               <group topology="serial">
                  <clamp/>
                  <agc tgtlvl="0"/>
               </group>
            </group>
            <gain amt="0" incr="5"/>
         </group>
       </dialogstart>
      </msml>

14.  MSML Audit Examples

   The following examples describe the MSML Audit Conference Package and
   the MSML Audit Connection Package, and their use together with the
   MSML Audit Dialog Package or/and the MSML Audit Stream Package.

14.1.  Audit All Conferences

   This example describes an audit of all active conferences on the
   media server, querying the conference configurations.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conf:*" statelist="audit.conf.confconfig.*"/>
      </msml>

Top      Up      ToC       Page 129 
   The following result assumes two conferences currently allocated by
   the media server.  Conference "conf:1" contains both an audio mixer
   (with ASN enabled) and a video layout (vas) created, while conference
   "conf:2" contains only an audio mixer created with ASN disabled.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conf:1">
               <confconfig deletewhen="nocontrol" term="true">
                  <audiomix id="audiomix1">
                     <asn ri="5s"/>
                     <n-loudest n="16"/>
                  </audiomix>
                    <videolayout id="videolayout1"
                                 type="text/msml-basic-layout">
                       <selector id="selector1" method="vas" si="5s"
                                 speakersees="current">
                          <root size="CIF"/>
                       </selector>
                    </videolayout>
                  <controller>conn:1234</controller>
               </confconfig>
            </auditresult>
            <auditresult targetid="conf:2">
               <confconfig deletewhen="nomedia" term="true">
                  <audiomix id="audiomix2">
                     <n-loudest n="1"/>
                  </audiomix>
                  <controller>conn:1234</controller>
               </confconfig>
            </auditresult>
         </result>
      </msml>

14.2.  Audit Conference Dialogs

   This example describes an audit of active dialogs on a specific
   conference.  The request queries all available dialog states.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conf:1" statelist="audit.conf.dialog.*"/>
      </msml>

   The example result assumes a single dialog running on conference
   "conf:1", which has been running for 60 seconds, and the dialog is
   currently executing a record operation.

Top      Up      ToC       Page 130 
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conf:1">
               <dialog name="sample">
                  <duration>60</duration>
                  <primitive>record</primitive>
                  <controller>conn:1234</controller>
               </dialog>
            </auditresult>
         </result>
      </msml>

14.3.  Audit Conference Streams

   This example request describes an audit of active streams on a
   specific conference.  The request queries all available stream
   states.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conf:1" statelist="audit.conf.stream.*"/>
      </msml>

   The example result assumes three audio participants in the
   conference.  Connection "conn:1234" is a talk-listen participant with
   both clamp and gain control enabled.  Connection "conn:1235" is a
   talk-only participant.  Connection "conn:1236" is a listen-only
   participant with automatic gain control enabled.

Top      Up      ToC       Page 131 
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conf:1">
               <stream joinwith="conn:1234" media="audio" dir="to">
                  <clamp dtmf="true" tone="false"/>
                  <gain amt="-10"/>
               </stream>
               <stream joinwith="conn:1234" media="audio" dir="from">
                  <gain amt="10"/>
               </stream>
               <stream joinwith="conn:1235" media="audio" dir="to">
               </stream>
               <stream joinwith="conn:1236" media="audio" dir="from">
                  <gain agc="true" tgtlvl="0" maxgain="10"/>
               </stream>
            </auditresult>
         </result>
      </msml>

14.4.  Audit All Connections

   This example request describes an audit of all active connections on
   the media server.  No additional state is queried.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conn:*"/>
      </msml>

   The example result assumes five connections currently allocated by
   the media server.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conn:1230"/>
            <auditresult targetid="conn:1231"/>
            <auditresult targetid="conn:1232"/>
            <auditresult targetid="conn:1233"/>
            <auditresult targetid="conn:1234"/>
         </result>
      </msml>

14.5.  Audit Connection Dialogs

   This example request describes an audit of active dialogs on a
   specific connection.  No additional dialog state is queried.

Top      Up      ToC       Page 132 
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conn:1234" statelist="audit.conn.dialog"/>
      </msml>

   The example result assumes three dialogs running on the connection.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conn:1234">
               <dialog name="sample1"/>
               <dialog name="sample2"/>
               <dialog name="sample3"/>
            </auditresult>
         </result>
      </msml>

14.6.  Audit Connection Streams

   This example request describes an audit of active streams on a
   specific connection.  No additional stream state is queried.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conn:1234" statelist="audit.conn.stream"/>
      </msml>

   The example result assumes three audio streams created between target
   connection and other MSML objects, one of which is a bidirectional
   stream between target connection and a conference, and two are
   unidirectional streams between two other connections.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conn:1234">
               <stream joinwith="conf:1" media="audio" dir="to"/>
               <stream joinwith="conf:1" media="audio" dir="from"/>
               <stream joinwith="conn:1235" media="audio" dir="to"/>
               <stream joinwith="conn:1236" media="audio" dir="from"/>
            </auditresult>
         </result>
      </msml>

Top      Up      ToC       Page 133 
14.7.  Audit Connection with Selective States

   This example describes an audit of a specific connection, querying
   associated SIP dialog ID and SDP info.

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conn:1234" statelist="audit.conn.sipdialog
            audit.conn.localsdp audit.conn.remotesdp"/>
      </msml>

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <result response="200">
            <auditresult targetid="conn:1234">
               <sipdialog callid="ABCD@10.0.0.10:5060"
                          localtag="sdfjsiodf"
                          remotetag="zvnmviuhd8"/>
               <localsdp>
                  v=0
                  o=- 31691 31691 IN IP4 ms5mpc11.lab.radisys.com
                  s=media server session
                  t=0 0
                  m=audio 33794 RTP/AVP 0
                  c=IN IP4 10.3.5.111
                  a=rtpmap:0 PCMU/8000
                  a=sendrecv
                  m=video 32770 RTP/AVP 34
                  c=IN IP4 10.3.5.11
                  b=AS:48
                  a=rtpmap:34 H263/90000
                  a=fmtp:34 CIF=1
                  a=sendrecv
               </localsdp>
               <remotesdp>
                  v=0
                  o=- 12345 12345 IN IP4 10.0.0.88
                  s=RadiSys SIP Media Server session
                  t=0 0
                  c=IN IP4 10.0.0.126
                  b=AS:128
                  m=audio 10000 RTP/AVP 0
                  a=rtpmap:0 PCMU/8000
                  a=ptime:20
                  a=sendrecv
                  m=video 10002 RTP/AVP 34
                  a=rtpmap:34 H263/90000
                  a=fmtp:34 CIF=1

Top      Up      ToC       Page 134 
                  a=sendrecv
               </remotesdp>
            </auditresult>
         </result>
      </msml>

15.  Future Work

   The following capabilities may be added in future versions of this
   document:

   o Ability for MSML clients to audit or query the media server for
     supported set of MSML packages and profiles.

   o Ability to version MSML packages and profiles and naming scheme for
     MSML extension packages.

16.  XML Schema

   MSML specification consists of a set of XML schemas, all of which may
   be used together or any sub-set of the schemas may be used for each
   MSML package.  The following sections define a complete set of
   schemas covering all MSML packages.

   Each package contains a single schema file, <package-name>-
   datatypes.xsd.  This schema file can be included by its extended
   package(s).  Every package optionally contains another schema file,
   <package_name>.xsd, which can be used directly to build or validate
   MSML scripts for a given package.

   The complete MSML schema (msml.xsd) includes all the individual MSML
   packages.

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
              elementFormDefault="qualified"
              attributeFormDefault="unqualified">
    <xs:include schemaLocation="msml-core-datatypes.xsd"/>
    <xs:include schemaLocation="msml-conf-core-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-transform-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-group-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-speech-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-fax-detect-datatypes.xsd"/>
    <xs:include schemaLocation="msml-dialog-fax-sendrecv-
                datatypes.xsd"/>
    <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>

Top      Up      ToC       Page 135 
    <xs:include schemaLocation="msml-audit-conf-datatypes.xsd"/>
    <xs:include schemaLocation="msml-audit-conn-datatypes.xsd"/>
    <xs:include schemaLocation="msml-audit-dialog-datatypes.xsd"/>
    <xs:include schemaLocation="msml-audit-stream-datatypes.xsd"/>
    <xs:element name="msml">
     <xs:complexType>
      <xs:choice>
       <xs:group ref="msmlRequestType" maxOccurs="unbounded"/>
       <xs:element name="event">
        <xs:complexType>
         <xs:choice maxOccurs="unbounded">
          <xs:sequence>
           <xs:element name="name" type="msmlEventNameValue.datatype"/>
           <xs:element name="value">
            <xs:simpleType>
             <xs:restriction base="xs:string">
              <xs:pattern value="[a-zA-Z0-9.]+"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:element>
          </xs:sequence>
         </xs:choice>
         <xs:attribute name="name" type="msmlEventName.datatype"
                       use="required"/>
         <xs:attribute name="id" type="msmlEventSource.datatype"
                       use="required"/>
        </xs:complexType>
       </xs:element>
       <xs:element name="result">
        <xs:complexType>
         <xs:choice>
          <xs:element ref="description" minOccurs="0"/>
          <xs:sequence>
           <xs:element ref="msmlResultSimple" minOccurs="0"
                       maxOccurs="unbounded"/>
           <xs:element ref="msmlResultComplex" minOccurs="0"
                       maxOccurs="unbounded"/>
          </xs:sequence>
         </xs:choice>
         <xs:attribute name="response">
          <xs:simpleType>
           <xs:restriction base="xs:string">
            <xs:pattern value="\d{3}"/>
           </xs:restriction>
          </xs:simpleType>
         </xs:attribute>
         <xs:attribute name="mark" type="mark.datatype"/>
        </xs:complexType>

Top      Up      ToC       Page 136 
       </xs:element>
      </xs:choice>
      <xs:attribute name="version" type="xs:string" use="required"
                    fixed="1.1"/>
     </xs:complexType>
    </xs:element>
   </xs:schema>

16.1.  MSML Core

16.1.1.  msml-core.xsd

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="msml-core-datatypes.xsd"/>
    <xs:element name="msml">
     <xs:complexType>
      <xs:choice>
       <xs:group ref="msmlRequestType" maxOccurs="unbounded"/>
       <xs:element name="event">
        <xs:complexType>
         <xs:choice maxOccurs="unbounded">
          <xs:sequence>
           <xs:element name="name" type="msmlEventNameValue.datatype"/>
           <xs:element name="value">
            <xs:simpleType>
             <xs:restriction base="xs:string">
              <xs:pattern value="[a-zA-Z0-9.]+"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:element>
          </xs:sequence>
         </xs:choice>
         <xs:attribute name="name" type="msmlEventName.datatype"
                       use="required"/>
         <xs:attribute name="id" type="msmlEventSource.datatype"
                       use="required"/>
        </xs:complexType>
       </xs:element>
       <xs:element name="result">
        <xs:complexType>
         <xs:choice>
          <xs:element ref="description" minOccurs="0"/>
          <xs:sequence>
           <xs:element ref="msmlResultSimple" minOccurs="0"
                       maxOccurs="unbounded"/>
           <xs:element ref="msmlResultComplex" minOccurs="0"

Top      Up      ToC       Page 137 
                       maxOccurs="unbounded"/>
          </xs:sequence>
         </xs:choice>
         <xs:attribute name="response">
          <xs:simpleType>
           <xs:restriction base="xs:string">
            <xs:pattern value="\d{3}"/>
           </xs:restriction>
          </xs:simpleType>
         </xs:attribute>
         <xs:attribute name="mark" type="mark.datatype"/>
        </xs:complexType>
       </xs:element>
      </xs:choice>
      <xs:attribute name="version" type="xs:string" use="required"
                    fixed="1.1"/>
     </xs:complexType>
    </xs:element>
   </xs:schema>

16.1.2.  msml-core-datatypes.xsd

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
              elementFormDefault="qualified"
              attributeFormDefault="unqualified">
    <xs:group name="msmlRequestType">
     <xs:choice>
      <xs:element ref="msmlRequest"/>
      <xs:element name="send">
       <xs:complexType>
        <xs:complexContent>
         <xs:extension base="msmlRequestType">
          <xs:attribute name="event" type="msmlEvent.datatype"
                        use="required"/>
          <xs:attribute name="target" type="msmlTarget.datatype"
                       use="required"/>
          <xs:attribute name="valuelist" type="xs:string"/>
         </xs:extension>
        </xs:complexContent>
       </xs:complexType>
      </xs:element>
     </xs:choice>
    </xs:group>
    <xs:element name="msmlRequest" type="msmlRequestType"
                abstract="true"/>
    <xs:complexType name="msmlRequestType">
     <xs:attribute ref="mark"/>

Top      Up      ToC       Page 138 
    </xs:complexType>
    <xs:element name="msmlResultSimple" type="msmlResultSimpleType"
                abstract="true"/>
    <xs:element name="msmlResultComplex" type="msmlResultComplexType"
                abstract="true"/>
    <xs:simpleType name="msmlResultSimpleType">
     <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <xs:complexType name="msmlResultComplexType"/>
    <xs:element name="description" type="xs:string"/>
    <xs:attribute name="mark" type="mark.datatype"/>
    <xs:simpleType name="msmlInstanceID.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9.:\-_]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="connID.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="conn:[a-zA-Z0-9.:\-_]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="confID.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="conf:[a-zA-Z0-9.:\-_]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="dialogID.datatype">
     <xs:restriction base="xs:string">
   <xs:pattern value="conf:[a-zA-Z0-9.:\-_]+/dialog:[a-zA-Z0-9.:\-_]+"/>
   <xs:pattern value="conn:[a-zA-Z0-9.:\-_]+/dialog:[a-zA-Z0-9.:\-_]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="independentID.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="conf:[a-zA-Z0-9.:\-_]+"/>
      <xs:pattern value="conn:[a-zA-Z0-9.:\-_]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="dialogLanguage.datatype">
     <xs:restriction base="xs:string">
      <xs:enumeration value="application/moml+xml"/>
      <xs:enumeration value="application/voicexml+xml"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="msmlEvent.datatype">
     <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <xs:simpleType name="msmlSend.datatype">

Top      Up      ToC       Page 139 
     <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <xs:simpleType name="msmlEventName.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="msml.dialog.exit"/>
      <xs:pattern value="msml.conf.asn"/>
      <xs:pattern value="msml.conf.nomedia"/>
      <xs:pattern value="msml.dialog.exit"/>
      <xs:pattern value="[a-zA-Z0-9.:_\-]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="msmlTarget.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern
   value="conf:[a-zA-Z0-9.:_\-]+(/oper:[a-zA-Z0-9.:_\-]+|\*)*"/>
      <xs:pattern
   value="conn:[a-zA-Z0-9.:_\-]+(/oper:[a-zA-Z0-9.:_\-]+|\*)+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="msmlEventSource.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="conf:[a-zA-Z0-9.:_\-]+"/>
      <xs:pattern value="(conf:[a-zA-Z0-9.:_\-]+|conn:[a-zA-Z0-9.:_\-
      ]+)/dialog:[a-zA-Z0-9.:_\-]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="msmlEventNameValue.datatype">
     <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <xs:simpleType name="mark.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9.:\-_]+"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="boolean.datatype">
     <xs:restriction base="xs:string">
      <xs:enumeration value="true"/>
      <xs:enumeration value="false"/>
     </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="posDuration.datatype">
     <xs:restriction base="xs:string">
      <xs:pattern value="(\+)?([0-9]*\.)?[0-9]+(ms|s)"/>
     </xs:restriction>
    </xs:simpleType>
   </xs:schema>

Top      Up      ToC       Page 140 
16.2.  MSML Conference Core Package

16.2.1.  msml-conf-core.xsd

   <?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
              elementFormDefault="qualified"
              attributeFormDefault="unqualified">
      <xs:include schemaLocation="msml-core.xsd"/>
      <xs:include schemaLocation="msml-conf-core-datatypes.xsd"/>
   </xs:schema>

16.2.2.  msml-conf-core-datatypes.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core-datatypes.xsd"/>
 <xs:element name="createconference" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:all>
      <xs:element name="audiomix" type="audioMixType" minOccurs="0"/>
      <xs:element name="videolayout" type="videoLayoutType"
                  minOccurs="0"/>
      <xs:element name="reserve" minOccurs="0">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="resource" maxOccurs="unbounded">
          <xs:complexType>
           <xs:sequence>
            <xs:any namespace="##other" processContents="lax"
                    minOccurs="0" maxOccurs="unbounded"/>
           </xs:sequence>
           <xs:attribute name="n" type="xs:positiveInteger"
                        default="1"/>
           <xs:anyAttribute namespace="##any"/>
          </xs:complexType>
         </xs:element>
        </xs:sequence>
        <xs:attribute name="required" type="boolean.datatype"
                      default="true"/>
       </xs:complexType>
      </xs:element>
     </xs:all>
     <xs:attribute name="name" type="msmlInstanceID.datatype"/>

Top      Up      ToC       Page 141 
     <xs:attribute name="deletewhen" default="never">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="nomedia"/>
        <xs:enumeration value="nocontrol"/>
        <xs:enumeration value="never"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="term" type="boolean.datatype" default="true"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="modifyconference" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:all>
      <xs:element name="audiomix" type="audioMixType" minOccurs="0"/>
      <xs:element name="videolayout" type="videoLayoutType"
                  minOccurs="0"/>
     </xs:all>
     <xs:attribute name="id" type="confID.datatype" use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="destroyconference" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:all>
      <xs:element name="audiomix" type="basicAudioMixType"
                  minOccurs="0"/>
      <xs:element name="videolayout" type="basicVideoLayoutType"
                  minOccurs="0"/>
     </xs:all>
     <xs:attribute name="id" type="confID.datatype" use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="join" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:sequence>

Top      Up      ToC       Page 142 
      <xs:element name="stream" type="streamType" minOccurs="0"
                  maxOccurs="4"/>
     </xs:sequence>
     <xs:attribute name="id1" type="independentID.datatype"
                   use="required"/>
     <xs:attribute name="id2" type="independentID.datatype"
                   use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="modifystream" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:sequence>
      <xs:element name="stream" type="streamType" maxOccurs="4"/>
     </xs:sequence>
     <xs:attribute name="id1" type="independentID.datatype"
                   use="required"/>
     <xs:attribute name="id2" type="independentID.datatype"
                   use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="unjoin" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:sequence>
      <xs:element name="stream" type="basicStreamType" minOccurs="0"
                  maxOccurs="4"/>
     </xs:sequence>
     <xs:attribute name="id1" type="independentID.datatype"
                   use="required"/>
     <xs:attribute name="id2" type="independentID.datatype"
                   use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="monitor" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:attribute name="id1" type="connID.datatype" use="required"/>
     <xs:attribute name="id2" type="independentID.datatype"

Top      Up      ToC       Page 143 
                   use="required"/>
     <xs:attribute name="compressed" type="boolean.datatype"
                   default="false"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="confid" type="msmlResultSimpleType"
             substitutionGroup="msmlResultSimple"/>
 <xs:complexType name="basicStreamType">
  <xs:attribute name="dir">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="to-id1"/>
     <xs:enumeration value="from-id1"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="media">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="audio"/>
     <xs:enumeration value="video"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="compressed" type="boolean.datatype"/>
 </xs:complexType>
 <xs:complexType name="streamType">
  <xs:complexContent>
   <xs:extension base="basicStreamType">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
     <xs:element name="gain">
      <xs:complexType>
       <xs:attribute name="amt" use="optional">
        <xs:simpleType>
         <xs:restriction base="xs:integer">
          <xs:minInclusive value="-96"/>
          <xs:maxInclusive value="96"/>
         </xs:restriction>
        </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="agc" type="boolean.datatype"/>
       <xs:attribute name="tgtlvl" use="optional">
        <xs:simpleType>
         <xs:restriction base="xs:nonPositiveInteger">
          <xs:minInclusive value="-40"/>
          <xs:maxInclusive value="0"/>

Top      Up      ToC       Page 144 
         </xs:restriction>
        </xs:simpleType>
       </xs:attribute>
       <xs:attribute name="maxgain" default="10">
        <xs:simpleType>
         <xs:restriction base="xs:nonNegativeInteger">
          <xs:minInclusive value="0"/>
          <xs:maxInclusive value="40"/>
         </xs:restriction>
        </xs:simpleType>
       </xs:attribute>
      </xs:complexType>
     </xs:element>
     <xs:element name="clamp">
      <xs:complexType>
       <xs:attribute name="dtmf" type="boolean.datatype"/>
       <xs:attribute name="tones" type="boolean.datatype"/>
      </xs:complexType>
     </xs:element>
     <xs:element name="visual"/>
    </xs:choice>
    <xs:attribute name="preferred" type="boolean.datatype"
                  default="false"/>
    <xs:attribute name="display" type="xs:string"/>
    <xs:attribute name="override" type="boolean.datatype"
                  default="false"/>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="basicAudioMixType">
  <xs:attribute name="id" type="xs:string" use="optional"/>
  <xs:attribute name="samplerate" type="xs:positiveInteger"
                use="optional" default="8000"/>
 </xs:complexType>
 <xs:complexType name="audioMixType">
  <xs:complexContent>
   <xs:extension base="basicAudioMixType">
    <xs:all>
     <xs:element name="asn" minOccurs="0">
      <xs:complexType>
       <xs:attribute name="ri" type="posDuration.datatype"/>
       <xs:attribute name="asth" default="-96">
        <xs:simpleType>
         <xs:restriction base="xs:nonPositiveInteger">
          <xs:minInclusive value="-96"/>
          <xs:maxInclusive value="0"/>
         </xs:restriction>
        </xs:simpleType>

Top      Up      ToC       Page 145 
       </xs:attribute>
      </xs:complexType>
     </xs:element>
     <xs:element name="n-loudest" minOccurs="0">
      <xs:complexType>
       <xs:attribute name="n" type="xs:positiveInteger" use="required"/>
      </xs:complexType>
     </xs:element>
    </xs:all>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="basicVideoLayoutType">
  <xs:attribute name="id" type="xs:string" use="required"/>
  <xs:attribute name="type" type="xs:string" use="required"
                fixed="text/msml-basic-layout"/>
 </xs:complexType>
 <xs:complexType name="videoLayoutType">
  <xs:complexContent>
   <xs:extension base="basicVideoLayoutType">
    <xs:choice>
     <xs:element name="selector">
      <xs:complexType>
       <xs:complexContent>
        <xs:extension base="selectorType">
         <xs:choice>
          <xs:element name="root" type="rootType" minOccurs="0"/>
          <xs:element name="region" minOccurs="0">
           <xs:complexType>
            <xs:attribute name="id" type="xs:string" use="required"/>
            <xs:attribute name="left" type="xs:positiveInteger"/>
            <xs:attribute name="top" type="xs:positiveInteger"/>
            <xs:attribute name="relativeSize">
             <xs:simpleType>
              <xs:restriction base="xs:string">
               <xs:enumeration value="1/4"/>
               <xs:enumeration value="1/3"/>
               <xs:enumeration value="2/3"/>
               <xs:enumeration value="3/4"/>
               <xs:enumeration value="1"/>
              </xs:restriction>
             </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="priority">
             <xs:simpleType>
              <xs:restriction base="xs:float">
               <xs:minInclusive value="0"/>
               <xs:maxExclusive value="1"/>

Top      Up      ToC       Page 146 
              </xs:restriction>
             </xs:simpleType>
            </xs:attribute>
            <xs:attribute name="title" type="xs:string"/>
            <xs:attribute name="titleTextColor" type="xs:string"/>
            <xs:attribute name="titleBackgroundColor" type="xs:string"/>
            <xs:attribute name="borderColor" type="xs:string"/>
            <xs:attribute name="borderWidth" type="xs:positiveInteger"/>
            <xs:attribute name="logo" type="xs:anyURI"/>
           </xs:complexType>
          </xs:element>
         </xs:choice>
        </xs:extension>
       </xs:complexContent>
      </xs:complexType>
     </xs:element>
     <xs:element name="root" type="rootType"/>
     <xs:element name="region" minOccurs="0" maxOccurs="unbounded">
      <xs:complexType>
       <xs:complexContent>
        <xs:extension base="regionType"/>
       </xs:complexContent>
      </xs:complexType>
     </xs:element>
    </xs:choice>
   </xs:extension>
  </xs:complexContent>
 </xs:complexType>
 <xs:complexType name="regionType">
  <xs:attribute name="id" type="xs:string" use="required"/>
  <xs:attribute name="left" type="xs:positiveInteger"/>
  <xs:attribute name="top" type="xs:positiveInteger"/>
  <xs:attribute name="relativeSize">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="1/4"/>
     <xs:enumeration value="1/3"/>
     <xs:enumeration value="2/3"/>
     <xs:enumeration value="3/4"/>
     <xs:enumeration value="1"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="priority">
   <xs:simpleType>
    <xs:restriction base="xs:float">
     <xs:minInclusive value="0"/>
     <xs:maxExclusive value="1"/>

Top      Up      ToC       Page 147 
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="title" type="xs:string"/>
  <xs:attribute name="titleTextColor" type="xs:string"/>
  <xs:attribute name="titleBackgroundColor" type="xs:string"/>
  <xs:attribute name="borderColor" type="xs:string"/>
  <xs:attribute name="borderWidth" type="xs:positiveInteger"/>
  <xs:attribute name="logo" type="xs:anyURI"/>
 </xs:complexType>
 <xs:complexType name="selectorType">
  <xs:attribute name="id" type="xs:string" use="required"/>
  <xs:attribute name="method" use="required">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="vas"/>
     <xs:enumeration value="sequence"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="status" default="active">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="active"/>
     <xs:enumeration value="disabled"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="si" type="posDuration.datatype" default="1s"/>
  <xs:attribute name="blankothers" type="xs:boolean" default="false"/>
  <xs:attribute name="speakersees" default="current">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="current"/>
     <xs:enumeration value="previous"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>
 <xs:complexType name="rootType">
  <xs:attribute name="size" default="CIF">
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="16CIF"/>
     <xs:enumeration value="4CIF"/>
     <xs:enumeration value="CIF"/>
     <xs:enumeration value="QCIF"/>
    </xs:restriction>

Top      Up      ToC       Page 148 
   </xs:simpleType>
  </xs:attribute>
  <xs:attribute name="backgroundcolor" type="xs:string"
                default="black"/>
  <xs:attribute name="backgroundimage" type="xs:anyURI"/>
 </xs:complexType>
 <xs:simpleType name="confclass.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="standard"/>
   <xs:enumeration value="preferred"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="conferenceType.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="audio.basic"/>
   <xs:enumeration value="audio.advanced"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="duplex.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="half"/>
   <xs:enumeration value="full"/>
  </xs:restriction>
 </xs:simpleType>
</xs:schema>



(page 148 continued on part 6)

Next RFC Part