Tech-invite3GPPspaceIETFspace
96959493929190898887868584838281807978777675747372717069686766656463626160595857565554535251504948474645444342414039383736353433323130292827262524232221201918171615141312111009080706050403020100
in Index   Prev   Next

RFC 5707

Media Server Markup Language (MSML)

Pages: 184
Informational
Errata
Part 5 of 6 – Pages 113 to 148
First   Prev   Next

Top   ToC   RFC5707 - Page 113   prevText

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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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   ToC   RFC5707 - 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 Section