Independent Submission                                         A. Saleem
Request for Comments: 5707                                        Y. Xin
Category: Informational                                          RadiSys
ISSN: 2070-1721                                              G. Sharratt
                                                              Consultant
                                                           February 2010
        
Independent Submission                                         A. Saleem
Request for Comments: 5707                                        Y. Xin
Category: Informational                                          RadiSys
ISSN: 2070-1721                                              G. Sharratt
                                                              Consultant
                                                           February 2010
        

Media Server Markup Language (MSML)

媒体服务器标记语言(MSML)

Abstract

摘要

The Media Server Markup Language (MSML) is used to control and invoke many different types of services on IP media servers. The MSML control interface was initially driven by RadiSys with subsequent significant contributions from Intel, Dialogic, and others in the industry. Clients can use it to define how multimedia sessions interact on a media server and to apply services to individuals or groups of users. MSML can be used, for example, to control media server conferencing features such as video layout and audio mixing, create sidebar conferences or personal mixes, and set the properties of media streams. As well, clients can use MSML to define media processing dialogs, which may be used as parts of application interactions with users or conferences. Transformation of media streams to and from users or conferences as well as interactive voice response (IVR) dialogs are examples of such interactions, which are specified using MSML. MSML clients may also invoke dialogs with individual users or with groups of conference participants using VoiceXML.

媒体服务器标记语言(MSML)用于控制和调用IP媒体服务器上的许多不同类型的服务。MSML控制界面最初由RadiSys驱动,随后Intel、Dialogic和业内其他公司做出了重大贡献。客户端可以使用它定义多媒体会话在媒体服务器上的交互方式,并将服务应用于个人或用户组。例如,MSML可用于控制媒体服务器会议功能,如视频布局和音频混合,创建侧栏会议或个人混合,以及设置媒体流的属性。此外,客户端还可以使用MSML定义媒体处理对话框,这些对话框可以用作应用程序与用户或会议交互的一部分。与用户或会议之间的媒体流转换以及交互式语音应答(IVR)对话框就是此类交互的示例,使用MSML指定。MSML客户端还可以使用VoiceXML与单个用户或会议参与者组调用对话。

Status of This Memo

关于下段备忘

This document is not an Internet Standards Track specification; it is published for informational purposes.

本文件不是互联网标准跟踪规范;它是为了提供信息而发布的。

This is a contribution to the RFC Series, independently of any other RFC stream. The RFC Editor has chosen to publish this document at its discretion and makes no statement about its value for implementation or deployment. Documents approved for publication by the RFC Editor are not a candidate for any level of Internet Standard; see Section 2 of RFC 5741.

这是对RFC系列的贡献,独立于任何其他RFC流。RFC编辑器已选择自行发布此文档,并且未声明其对实现或部署的价值。RFC编辑批准发布的文件不适用于任何级别的互联网标准;见RFC 5741第2节。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc5707.

有关本文件当前状态、任何勘误表以及如何提供反馈的信息,请访问http://www.rfc-editor.org/info/rfc5707.

IESG Note

IESG注释

This RFC is not a candidate for any level of Internet Standard. The IETF disclaims any knowledge of the fitness of this RFC for any purpose and in particular notes that the decision to publish is not based on IETF review for such things as security, congestion control, or inappropriate interaction with deployed protocols. The RFC Editor has chosen to publish this document at its discretion. Readers of this document should exercise caution in evaluating its value for implementation and deployment. See RFC 3932 for more information.

本RFC不适用于任何级别的互联网标准。IETF不承认本RFC适用于任何目的的任何知识,特别注意到,发布决定并非基于IETF对安全、拥塞控制或与已部署协议的不当交互等事项的审查。RFC编辑已自行决定发布本文件。本文档的读者在评估其实施和部署价值时应谨慎。有关更多信息,请参阅RFC 3932。

Copyright Notice

版权公告

Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved.

版权所有(c)2010 IETF信托基金和确定为文件作者的人员。版权所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.

本文件受BCP 78和IETF信托有关IETF文件的法律规定的约束(http://trustee.ietf.org/license-info)自本文件出版之日起生效。请仔细阅读这些文件,因为它们描述了您对本文件的权利和限制。

Table of Contents

目录

   1. Introduction ....................................................4
   2. Glossary ........................................................5
   3. MSML SIP Usage ..................................................6
      3.1. SIP INFO ...................................................7
      3.2. SIP Control Framework ......................................8
   4. Language Structure .............................................15
      4.1. Package Scheme ............................................15
      4.2. Profile Scheme ............................................18
   5. Execution Flow .................................................19
   6. Media Server Object Model ......................................21
      6.1. Objects ...................................................21
      6.2. Identifiers ...............................................23
   7. MSML Core Package ..............................................26
      7.1. <msml> ....................................................26
      7.2. <send> ....................................................26
      7.3. <result> ..................................................27
      7.4. <event> ...................................................27
   8. MSML Conference Core Package ...................................28
      8.1. Conferences ...............................................28
      8.2. Media Streams .............................................29
      8.3. <createconference> ........................................31
      8.4. <modifyconference> ........................................33
      8.5. <destroyconference> .......................................34
        
   1. Introduction ....................................................4
   2. Glossary ........................................................5
   3. MSML SIP Usage ..................................................6
      3.1. SIP INFO ...................................................7
      3.2. SIP Control Framework ......................................8
   4. Language Structure .............................................15
      4.1. Package Scheme ............................................15
      4.2. Profile Scheme ............................................18
   5. Execution Flow .................................................19
   6. Media Server Object Model ......................................21
      6.1. Objects ...................................................21
      6.2. Identifiers ...............................................23
   7. MSML Core Package ..............................................26
      7.1. <msml> ....................................................26
      7.2. <send> ....................................................26
      7.3. <result> ..................................................27
      7.4. <event> ...................................................27
   8. MSML Conference Core Package ...................................28
      8.1. Conferences ...............................................28
      8.2. Media Streams .............................................29
      8.3. <createconference> ........................................31
      8.4. <modifyconference> ........................................33
      8.5. <destroyconference> .......................................34
        
      8.6. <audiomix> ................................................35
      8.7. <videolayout> .............................................36
      8.8. <join> ....................................................43
      8.9. <modifystream> ............................................45
      8.10. <unjoin> .................................................46
      8.11. <monitor> ................................................47
      8.12. <stream> .................................................47
   9. MSML Dialog Packages ...........................................51
      9.1. Overview ..................................................51
      9.2. Primitives ................................................53
      9.3. Events ....................................................55
      9.4. MSML Dialog Usage with SIP ................................56
      9.5. MSML Dialog Structure and Modularity ......................57
      9.6. MSML Dialog Core Package ..................................58
      9.7. MSML Dialog Base Package ..................................63
      9.8. MSML Dialog Group Package .................................81
      9.9. MSML Dialog Transform Package .............................85
      9.10. MSML Dialog Speech Package ...............................88
      9.11. MSML Dialog Fax Detection Package ........................92
      9.12. MSML Dialog Fax Send/Receive Package .....................93
   10. MSML Audit Package ...........................................100
      10.1. MSML Audit Core Package .................................100
      10.2. MSML Audit Conference Package ...........................102
      10.3. MSML Audit Connection Package ...........................106
      10.4. MSML Audit Dialog Package ...............................108
      10.5. MSML Audit Stream Package ...............................110
   11. Response Codes ...............................................111
   12. MSML Conference Examples .....................................113
      12.1. Establishing a Dial-In Conference .......................113
      12.2. Example of a Sidebar Audio Conference ...................117
      12.3. Example of Removing a Conference ........................118
      12.4. Example of Modifying Video Layout .......................118
   13. MSML Dialog Examples .........................................120
      13.1. Announcement ............................................120
      13.2. Voice Mail Retrieval ....................................120
      13.3. Play and Record .........................................122
      13.4. Speech Recognition ......................................125
      13.5. Play and Collect ........................................125
      13.6. User Controlled Gain ....................................128
   14. MSML Audit Examples ..........................................128
      14.1. Audit All Conferences ...................................128
      14.2. Audit Conference Dialogs ................................129
      14.3. Audit Conference Streams ................................130
      14.4. Audit All Connections ...................................131
      14.5. Audit Connection Dialogs ................................131
      14.6. Audit Connection Streams ................................132
      14.7. Audit Connection with Selective States ..................133
   15. Future Work ..................................................134
        
      8.6. <audiomix> ................................................35
      8.7. <videolayout> .............................................36
      8.8. <join> ....................................................43
      8.9. <modifystream> ............................................45
      8.10. <unjoin> .................................................46
      8.11. <monitor> ................................................47
      8.12. <stream> .................................................47
   9. MSML Dialog Packages ...........................................51
      9.1. Overview ..................................................51
      9.2. Primitives ................................................53
      9.3. Events ....................................................55
      9.4. MSML Dialog Usage with SIP ................................56
      9.5. MSML Dialog Structure and Modularity ......................57
      9.6. MSML Dialog Core Package ..................................58
      9.7. MSML Dialog Base Package ..................................63
      9.8. MSML Dialog Group Package .................................81
      9.9. MSML Dialog Transform Package .............................85
      9.10. MSML Dialog Speech Package ...............................88
      9.11. MSML Dialog Fax Detection Package ........................92
      9.12. MSML Dialog Fax Send/Receive Package .....................93
   10. MSML Audit Package ...........................................100
      10.1. MSML Audit Core Package .................................100
      10.2. MSML Audit Conference Package ...........................102
      10.3. MSML Audit Connection Package ...........................106
      10.4. MSML Audit Dialog Package ...............................108
      10.5. MSML Audit Stream Package ...............................110
   11. Response Codes ...............................................111
   12. MSML Conference Examples .....................................113
      12.1. Establishing a Dial-In Conference .......................113
      12.2. Example of a Sidebar Audio Conference ...................117
      12.3. Example of Removing a Conference ........................118
      12.4. Example of Modifying Video Layout .......................118
   13. MSML Dialog Examples .........................................120
      13.1. Announcement ............................................120
      13.2. Voice Mail Retrieval ....................................120
      13.3. Play and Record .........................................122
      13.4. Speech Recognition ......................................125
      13.5. Play and Collect ........................................125
      13.6. User Controlled Gain ....................................128
   14. MSML Audit Examples ..........................................128
      14.1. Audit All Conferences ...................................128
      14.2. Audit Conference Dialogs ................................129
      14.3. Audit Conference Streams ................................130
      14.4. Audit All Connections ...................................131
      14.5. Audit Connection Dialogs ................................131
      14.6. Audit Connection Streams ................................132
      14.7. Audit Connection with Selective States ..................133
   15. Future Work ..................................................134
        
   16. XML Schema ...................................................134
      16.1. MSML Core ...............................................136
      16.2. MSML Conference Core Package ............................140
      16.3. MSML Dialog Packages ....................................148
      16.4. MSML Audit Packages .....................................170
   17. Security Considerations ......................................176
   18. IANA Considerations ..........................................176
      18.1. IANA Registrations for 'application' MIME Media Type ....176
      18.2. IANA Registrations for 'text' MIME Media Type ...........178
      18.3. URN Sub-Namespace Registration ..........................179
      18.4. XML Schema Registration .................................180
   19. References ...................................................181
      19.1. Normative References ....................................181
      19.2. Informative References ..................................182
   Acknowledgments ..................................................183
        
   16. XML Schema ...................................................134
      16.1. MSML Core ...............................................136
      16.2. MSML Conference Core Package ............................140
      16.3. MSML Dialog Packages ....................................148
      16.4. MSML Audit Packages .....................................170
   17. Security Considerations ......................................176
   18. IANA Considerations ..........................................176
      18.1. IANA Registrations for 'application' MIME Media Type ....176
      18.2. IANA Registrations for 'text' MIME Media Type ...........178
      18.3. URN Sub-Namespace Registration ..........................179
      18.4. XML Schema Registration .................................180
   19. References ...................................................181
      19.1. Normative References ....................................181
      19.2. Informative References ..................................182
   Acknowledgments ..................................................183
        
1. Introduction
1. 介绍

Media servers contain dynamic pools of media resources. Control agents and other users of media servers (called media server clients) can define and create many different services based on how they configure and use those resources. Often, that configuration and the ways in which those resources interact will be changed dynamically over the course of a call, to reflect changes in the way that an application interacts with a user.

媒体服务器包含媒体资源的动态池。控制代理和媒体服务器的其他用户(称为媒体服务器客户端)可以根据配置和使用这些资源的方式定义和创建许多不同的服务。通常,该配置和这些资源交互的方式将在调用过程中动态更改,以反映应用程序与用户交互方式的更改。

For example, a call may undergo an initial IVR dialog before being placed into a conference. Calls may be moved from a main conference to a sidebar conference and then back again. Individual calls may be directly bridged to create small n-way calls or simple sidebars. None of these change the SIP [n1] dialog or RTP [i3] session. Yet these do affect the media flow and processing internal to the media server.

例如,一个电话在进入会议之前可能会经历一个初始的IVR对话。呼叫可以从主会议转移到侧栏会议,然后再返回。单个调用可以直接桥接以创建小的n路调用或简单的侧栏。这些都不会改变SIP[n1]对话框或RTP[i3]会话。但这些确实会影响媒体服务器内部的媒体流和处理。

The Media Server Markup Language (MSML) is an XML [n2] language used to control the flow of media streams and services applied to media streams within a media server. It is used to invoke many different types of services on individual sessions, groups of sessions, and conferences. MSML allows the creation of conferences, bridging different sessions together, and bridging sessions into conferences.

媒体服务器标记语言(MSML)是一种XML[n2]语言,用于控制媒体服务器中应用于媒体流的媒体流和服务的流。它用于在单个会话、会话组和会议上调用许多不同类型的服务。MSML允许创建会议、将不同会话连接在一起以及将会话连接到会议中。

MSML may also be used to create user interaction dialogs and allows the application of media transforms to media streams. Media interaction dialogs created using MSML allow construction of IVR dialog sessions to individual users as well as to groups of users participating in a conference. Dialogs may also be specified using other languages, VoiceXML [n5], which support complete single-party application logic to be executed on the media server.

MSML还可用于创建用户交互对话框,并允许将媒体转换应用于媒体流。使用MSML创建的媒体交互对话框允许为单个用户以及参与会议的用户组构建IVR对话会话。还可以使用其他语言(VoiceXML[n5])指定对话框,这些语言支持在媒体服务器上执行完整的单方应用程序逻辑。

MSML is a transport independent language, such that it does not rely on underlying transport mechanisms and language semantics are independent of transport. However, SIP is a typical and commonly used transport mechanism for MSML, invoked using the SIP URI scheme. This specification defines using MSML dialogs using SIP as the transport mechanism.

MSML是一种与传输无关的语言,因此它不依赖于底层传输机制,并且语言语义独立于传输。然而,SIP是MSML的典型且常用的传输机制,使用SIPURI方案调用。本规范定义了使用MSML对话框,使用SIP作为传输机制。

A network connection may be established with the media server using SIP. Media received and transmitted on that connection will flow through different media resources on the media server depending on the requested service. Basic Network Media Services with SIP [n7] defines conventions for associating a basic service with a SIP Request-URI. MSML allows services to be dynamically applied and changed by a control agent during the lifetime of the SIP dialog.

可以使用SIP与媒体服务器建立网络连接。在该连接上接收和传输的媒体将根据请求的服务流经媒体服务器上的不同媒体资源。具有SIP[n7]的基本网络媒体服务定义了将基本服务与SIP请求URI关联的约定。MSML允许控制代理在SIP对话框的生命周期内动态应用和更改服务。

MSML has been designed to address the control and manipulation of media processing operations (e.g., announcement, IVR, play and record, automatic speech recognition (ASR), text to speech (TTS), fax, video), as well as control and relationships of media streams (e.g., simple and advanced conferencing). It provides a general-purpose media server control architecture. MSML can additionally be used to invoke other more complex IVR languages such as VoiceXML.

MSML旨在解决媒体处理操作的控制和操作(例如,公告、IVR、播放和录制、自动语音识别(ASR)、文本到语音(TTS)、传真、视频)以及媒体流的控制和关系(例如,简单和高级会议)。它提供了一个通用的媒体服务器控制体系结构。MSML还可用于调用其他更复杂的IVR语言,如VoiceXML。

The MSML control interface has been widely deployed in the industry, with numerous client-side and server-side implementations, since 2003. The in-service commercial deployments cover a wide variety of applications including, but not limited to, IP multimedia conferencing, network voice services, IVR, IVVR (interactive voice and video response), and voice/video mail.

自2003年以来,MSML控制接口已在业界广泛部署,并有许多客户端和服务器端实现。在役商业部署涵盖广泛的应用,包括但不限于IP多媒体会议、网络语音服务、IVR、IVVR(交互式语音和视频响应)以及语音/视频邮件。

2. Glossary
2. 术语汇编

Media Server: a general-purpose platform for executing real-time media processing tasks. This is a logical function that maps either to a single physical device or to a portion of a physical device.

媒体服务器:执行实时媒体处理任务的通用平台。这是一个逻辑函数,可映射到单个物理设备或物理设备的一部分。

Media Server Client: an application that originates MSML requests to a media server and also referred to as a control agent in this specification.

媒体服务器客户端:向媒体服务器发起MSML请求的应用程序,在本规范中也称为控制代理。

Network Connection: a participant that represents the termination on a media server of one or more RTP [i3] sessions (for example, audio and video) associated with a call. Network connections are established and removed using a session establishment protocol such as SIP. An instance of a network connection is independent of MSML processing instructions applied to it.

网络连接:表示媒体服务器上与呼叫相关的一个或多个RTP[i3]会话(例如,音频和视频)终止的参与者。使用会话建立协议(如SIP)建立和删除网络连接。网络连接的实例独立于应用于它的MSML处理指令。

Dialog: an automated IVR participant. Examples of dialogs may be announcement players, IVR interfaces, or voice recorders. Dialogs may be defined in MSML or using VoiceXML [n5].

对话:自动IVR参与者。对话框的示例可能是公告播放器、IVR接口或语音记录器。对话框可以在MSML中定义,也可以使用VoiceXML[n5]定义。

Conference: an intermediary function that provides multimedia mixing and other advanced conferencing services. This specification currently considers conferences with audio and/or video media types, but is extensible to other media types.

会议:提供多媒体混合和其他高级会议服务的中介功能。本规范目前考虑使用音频和/或视频媒体类型的会议,但可扩展到其他媒体类型。

Identifier: a name that is used to refer to a specific instance of an object on the media server, such as a conference or a dialog. Identifiers are composed of one or more terms where each term identifies an object class and instance.

标识符:用于引用媒体服务器上对象的特定实例的名称,如会议或对话框。标识符由一个或多个术语组成,其中每个术语标识对象类和实例。

Object: the generic term for a media server entity that terminates, originates, or processes media. This specification defines four classes of objects and specifies mechanisms to create them, join them together, and destroy them.

对象:用于终止、发起或处理媒体的媒体服务器实体的通用术语。本规范定义了四类对象,并指定了创建、连接和销毁这些对象的机制。

Participant Object: an object in a media server that sources original media in a call and/or receives and terminates media in a call.

参与者对象:媒体服务器中的一个对象,在呼叫中提供原始媒体和/或在呼叫中接收并终止媒体。

Intermediary Object: an object in a media server that acts on media within a call for the benefit of the participants.

中间对象:媒体服务器中的一个对象,为参与者的利益作用于调用中的媒体。

Independent Object: an object that can exist on a media server independent of other objects.

独立对象:可以独立于其他对象存在于媒体服务器上的对象。

Operator: an intermediary transformer that modifies or transforms a media stream. Examples of operators may be audio gain controls, video scaling, or voice masking. MSML defines operators as media transform objects, which transform media using operations such as gain control, when applied to media streams.

运算符:修改或转换媒体流的中间转换器。操作员的示例可以是音频增益控制、视频缩放或语音掩蔽。MSML将操作符定义为媒体转换对象,当应用于媒体流时,该对象使用诸如增益控制之类的操作来转换媒体。

Media Stream: a single media flow between two objects. A media stream has a media type and may be unidirectional or bidirectional.

媒体流:两个对象之间的单个媒体流。媒体流具有媒体类型,并且可以是单向的或双向的。

3. MSML SIP Usage
3. MSML SIP使用

SIP is used to create and modify media sessions with a media server according to the procedures defined in RFC 3261 [n1]. Often, SIP third party call control [i4] will be used to create sessions to a media server on behalf of end users. MSML is used to define and change the service that a user connected to a media server will receive. MSML clients are application servers, soft-switches, or other forms of control agents, and SHOULD have an authorized security relationship with the media server. MSML itself does not define authorization mechanisms.

SIP用于根据RFC 3261[n1]中定义的过程创建和修改与媒体服务器的媒体会话。通常,SIP第三方呼叫控制[i4]将用于代表最终用户创建到媒体服务器的会话。MSML用于定义和更改连接到媒体服务器的用户将接收的服务。MSML客户端是应用程序服务器、软交换机或其他形式的控制代理,应该与媒体服务器具有授权的安全关系。MSML本身没有定义授权机制。

MSML transactions are originated based upon events that occur in the application domain. These events may be independent from any media or user interaction. For example, an application may wish to play an announcement to a conference warning that its scheduled completion time is approaching. Applications themselves are structured in many different ways. Their structure and requirements contribute to their selection of protocols and languages. To accommodate differing application needs, MSML has been designed to be neutral to other languages and independent of the transport used to carry it.

MSML事务基于应用程序域中发生的事件发起。这些事件可能独立于任何媒体或用户交互。例如,应用程序可能希望向会议播放公告,警告其预定完成时间即将到来。应用程序本身以许多不同的方式构造。它们的结构和需求有助于选择协议和语言。为了适应不同的应用程序需求,MSML被设计为与其他语言无关,并且独立于用于承载它的传输。

MSML is purposely designed to be transport independent. In this release of the specification, SIP INFO [i5] and SIP Control Framework [i11] have been chosen for transport mechanisms for MSML, as described in the following sections.

MSML旨在设计为独立于传输。在本规范版本中,已选择SIP INFO[i5]和SIP控制框架[i11]作为MSML的传输机制,如下节所述。

3.1. SIP INFO
3.1. SIP信息

SIP INVITE and INFO [i5] requests and responses MAY be used to carry MSML. INFO requests allow asynchronous mid-call messages within SIP with few additional semantics. In addition, there are existing widely deployed implementations of that method, it aids in initial developments that are closely coupled with SIP session establishment, and it allows MSML to be directly associated with user dialogs when third party call control is used.

SIP INVITE和INFO[i5]请求和响应可用于承载MSML。INFO请求允许SIP中的异步中间调用消息,但没有额外的语义。此外,该方法已有广泛部署的实现,它有助于与SIP会话建立紧密结合的初始开发,并且当使用第三方呼叫控制时,它允许MSML与用户对话框直接关联。

Although INFO is sometimes considered not to be a suitable general-purpose transport mechanism for messages within SIP, there have been proposals to make it more acceptable. MSML may evolve to include other SIP usage and/or to work with other protocols or as a stand-alone protocol established through SIP, in future releases of this document.

尽管有时认为INFO不是SIP中消息的合适的通用传输机制,但已经有人提议使其更易于接受。在本文档的未来版本中,MSML可能会演变为包括其他SIP使用和/或与其他协议一起工作,或作为通过SIP建立的独立协议。

MSML supports several models for client interaction. When clients use 3PCC to establish media sessions on behalf of end users, clients will have a SIP dialog for each media session. MSML MAY be sent on these dialogs. However the targets of MSML actions are not inferred from the session associated with the SIP dialog. The targets of MSML actions are always explicitly specified using identifiers as previously defined.

MSML支持多个客户端交互模型。当客户端使用3PCC代表最终用户建立媒体会话时,客户端将为每个媒体会话提供SIP对话框。可以通过这些对话框发送MSML。但是,MSML操作的目标不是从与SIP对话框关联的会话推断出来的。MSML操作的目标始终使用前面定义的标识符显式指定。

An application, after interacting with a user, may want to affect multiple objects within a media server. For example, tones or messages are often played to a conference when connections are added or removed. A separate message may also be played to a participant as they are joined, or to moderators. Explicit identifiers, that is, not inferred from a transport mechanism, allow these multiple actions to be easily grouped into a single transaction sent on any SIP dialog.

应用程序在与用户交互后,可能希望影响媒体服务器中的多个对象。例如,在添加或删除连接时,通常会向会议播放铃声或消息。当参与者加入时,也可以向他们播放单独的消息,或者向主持人播放。显式标识符(即不是从传输机制推断出来的标识符)允许将这些多个操作轻松分组到任何SIP对话框上发送的单个事务中。

MSML also supports a model of dedicated control associations. This supports decoupled application architectures where a client can control media server services without also establishing all of the media sessions itself. Control associations are created using SIP, but they do not have any associated media session. Although initially INFO messages will be sent on this SIP dialog, just as with dialogs associated with media sessions, it is possible that in the future, the SIP dialog will be used to establish a separate control session (defined in SDP [n9]) that does not use SIP as the transport for MSML messages.

MSML还支持专用控件关联的模型。这支持解耦的应用程序体系结构,其中客户端可以控制媒体服务器服务,而无需自行建立所有媒体会话。控件关联是使用SIP创建的,但它们没有任何关联的媒体会话。虽然初始信息消息将在此SIP对话框上发送,就像与媒体会话相关的对话框一样,但将来可能会使用SIP对话框建立单独的控制会话(在SDP[n9]中定义),该会话不使用SIP作为MSML消息的传输。

A media server using MSML also sends asynchronous events to a client using MSML scripts in SIP INFO. Events are sent based on previous MSML requests and are sent within the SIP dialog on which the MSML request that caused the event to be generated was received. If this dialog no longer exists when the event is generated, the event is discarded.

使用MSML的媒体服务器还使用SIP INFO中的MSML脚本向客户端发送异步事件。事件根据以前的MSML请求发送,并在SIP对话框中发送,在该对话框上接收到导致生成事件的MSML请求。如果在生成事件时此对话框不再存在,则丢弃该事件。

Events may be generated during the execution of a dialog created by a <dialogstart> element. For example, dialogs can send events based on user input. VoiceXML dialogs, on the other hand, generally interact with other servers outside of MSML using HTTP.

在执行由<dialogstart>元素创建的对话框期间,可能会生成事件。例如,对话框可以根据用户输入发送事件。另一方面,VoiceXML对话框通常使用HTTP与MSML之外的其他服务器进行交互。

An event is also generated when the execution of a dialog terminates, because of either completion or failure. The exact information returned is dependent on the dialog language, the capabilities of the dialog execution environment, and what was requested by the dialog. Both MSML and VoiceXML [n5] allow information to be returned when they exit. These events may be sent in a SIP INFO or a SIP BYE. SIP BYE is used when the dialog itself specifies that the connection should be disconnected, for example, through the use of the <disconnect> element.

由于完成或失败,当对话框的执行终止时,也会生成一个事件。返回的确切信息取决于对话框语言、对话框执行环境的功能以及对话框请求的内容。MSML和VoiceXML[n5]都允许在退出时返回信息。这些事件可以通过SIP INFO或SIP BYE发送。当对话框本身指定应该断开连接时,例如,通过使用<disconnect>元素,使用SIP BYE。

Conferences may also generate events based upon their configuration. An example of this is the notification of the set of active speakers.

会议还可以根据其配置生成事件。这方面的一个例子是通知一组活动扬声器。

3.2. SIP Control Framework
3.2. SIP控制框架

The SIP Control Framework [i11] MAY be used as a transport mechanism for MSML.

SIP控制框架[i11]可用作MSML的传输机制。

The Control Framework provides a generic approach for establishment and reporting capabilities of remotely initiated commands. The framework utilizes many functions provided by the Session Initiation Protocol (SIP) [n1] for the rendezvous and establishment of a reliable channel for control interactions. Compared to SIP INFO, the

控制框架为远程启动命令的建立和报告能力提供了通用方法。该框架利用会话启动协议(SIP)[n1]提供的许多功能来会合和建立用于控制交互的可靠通道。与SIP信息相比

SIP Control Framework is a more general-purpose transport mechanism and one that is not constrained by limitations of the SIP INFO mechanism.

SIP控制框架是一种更通用的传输机制,不受SIP信息机制限制。

The Control Framework also introduces the concept of a Control Package, which is an explicit usage of the Control Framework for a particular interaction set. This specification has already specified a list of packages for MSML to control the media server in many aspects, including basic dialog, advanced conferencing, advanced dialog, and audit service. Each of these packages has a unique Control Package name assigned in order for MSML to be used with the Control Framework.

控制框架还引入了控制包的概念,它是对特定交互集的控制框架的显式使用。本规范已经为MSML指定了一个包列表,用于在许多方面控制媒体服务器,包括基本对话、高级会议、高级对话和审核服务。这些包中的每一个都分配了一个唯一的控制包名称,以便MSML与控制框架一起使用。

This section fulfills the mandatory requirement for information that MUST be specified during the definition of a Control Framework Package, as detailed in SIP Control Framework [i11].

本节满足了对控制框架包定义期间必须指定的信息的强制性要求,详见SIP控制框架[i11]。

3.2.1. Control Framework Package Names
3.2.1. 控制框架包名称

The Control Framework [i11] requires a Control Package definition to specify and register a unique name.

控制框架[i11]需要一个控制包定义来指定和注册一个唯一的名称。

MSML specification defines Control Package names using a hierarchical scheme to indicate the inherited relationship across packages. For example, package "msml-x" is derived from package "msml", and package "msml-x-y" is derived from package "msml-x".

MSML规范使用分层方案定义控制包名称,以指示包之间的继承关系。例如,包“msml-x”派生自包“msml”,包“msml-x-y”派生自包“msml-x”。

The following is a list of Control Package names reserved by the MSML specification.

以下是MSML规范保留的控制包名称列表。

"msml": this Control Package supports MSML Core Package as specified in section 7.

“msml”:该控制包支持第7节规定的msml核心包。

"msml-conf": this Control Package supports MSML Conference Core Package as specified in section 8.

“msml conf”:此控制包支持第8节中指定的msml会议核心包。

"msml-dialog": this Control Package supports MSML Dialog Core Package as specified in section 9.6.

“msml对话”:该控制包支持第9.6节规定的msml对话核心包。

"msml-dialog-base": this Control Package supports MSML Dialog Base Package as specified in section 9.7.

“msml对话基础”:该控制包支持第9.7节中规定的msml对话基础包。

"msml-dialog-group": this Control Package supports MSML Dialog Group Package as specified in section 9.8.

“msml对话组”:该控制包支持第9.8节规定的msml对话组包。

"msml-dialog-transform": this Control Package supports MSML Dialog Transform Package as specified in section 9.9.

“msml对话转换”:该控制包支持第9.9节中规定的msml对话转换包。

"msml-dialog-speech": this Control Package supports MSML Dialog Speech Package as specified in section 9.10.

“msml对话语音”:该控制包支持第9.10节规定的msml对话语音包。

"msml-dialog-fax-detect": this Control Package supports MSML Dialog Fax Detection Package as specified in section 9.11.

“msml对话传真检测”:该控制包支持第9.11节规定的msml对话传真检测包。

"msml-dialog-fax-sendrecv": this Control Package supports MSML Dialog Fax Send/Receive Package as specified in section 9.12.

“msml dialog fax sendrecv”:此控制包支持第9.12节中规定的msml dialog fax发送/接收包。

"msml-audit": this Control Package supports MSML Audit Core Package as specified in section 10.1.

“msml审核”:该控制包支持第10.1节规定的msml审核核心包。

"msml-audit-conf": this Control Package supports MSML Audit Conference Package as specified in section 10.2.

“msml审核配置”:该控制包支持第10.2节中规定的msml审核会议包。

"msml-audit-conn": this Control Package supports MSML Audit Connection Package as specified in section 10.3.

“msml审计连接”:该控制包支持第10.3节规定的msml审计连接包。

"msml-audit-dialog": this Control Package supports MSML Audit Dialog Package as specified in section 10.4.

“msml审核对话框”:该控制包支持第10.4节规定的msml审核对话框包。

"msml-audit-stream": this Control Package supports MSML Audit Stream Package as specified in section 10.5.

“msml审计流”:该控制包支持第10.5节规定的msml审计流包。

An application server using the Control Framework as transport for MSML MUST use one or multiple package names, depending on the service required from the media server. The package name(s) are identified in the "Control-Packages" SIP header that is present in the SIP INVITE dialog request that creates the control channel, as specified in [i11]. The "Control-Packages" value MAY be re-negotiated via the SIP re-INVITE mechanism.

使用控制框架作为MSML传输的应用程序服务器必须使用一个或多个包名,具体取决于媒体服务器所需的服务。如[i11]所述,包名在“控制包”SIP头中标识,该SIP头出现在创建控制通道的SIP INVITE对话请求中。“控制包”值可以通过SIP重新邀请机制重新协商。

3.2.2. Control Framework Messages
3.2.2. 控制框架消息

The usage of CONTROL, response, and REPORT messages, as defined in [i11], by each Control Package defined in MSML is different and described separately in the following sections.

MSML中定义的每个控制包对[i11]中定义的控制、响应和报告消息的使用是不同的,并在以下各节中分别描述。

MSML Core Package "msml"

MSML核心包“MSML”

The application server may send a CONTROL message with a body of MSML request using the following elements to the MS:

应用服务器可以使用以下元素向MS发送带有MSML请求主体的控制消息:

<msml>: the root element that may contain a list of child elements that request a specific operation. The child elements are defined in extended packages (e.g., "msml-conf" and "msml-dialog"). This element is also the root element that contains an MSML result and event.

<msml>:可能包含请求特定操作的子元素列表的根元素。子元素在扩展包中定义(例如,“msml conf”和“msml dialog”)。此元素也是包含MSML结果和事件的根元素。

<send>: sends an event to the specified recipient within the media server. Specific event types are defined within the extended packages.

<send>:向媒体服务器中指定的收件人发送事件。特定事件类型在扩展包中定义。

The media server replies with a response message containing a MSML result using the following elements:

媒体服务器使用以下元素回复包含MSML结果的响应消息:

<result>: reports the results of an MSML transaction.

<result>:报告MSML事务的结果。

The media server MAY send the MSML event to the application server, in a REPORT or CONTROL message, using the element <event>. The actual content of the <event> and which Control Framework message to use are defined within the extended packages.

媒体服务器可以使用元素<event>在报告或控制消息中向应用程序服务器发送MSML事件。<event>的实际内容以及要使用的控制框架消息在扩展包中定义。

MSML Conference Core Package "msml-conf"

MSML会议核心包“MSML配置”

This package extends the MSML Core Package to define a framework for creation, manipulation, and deletion of a conference.

此包扩展了MSML核心包,以定义用于创建、操作和删除会议的框架。

The AS can send a CONTROL message with a body of the MSML request that contains one or multiple conference-related commands to the MS. The MS then replies with a response message with a body of the MSML result to indicate whether or not the request has been fulfilled.

AS可以向MS发送包含一个或多个会议相关命令的MSML请求正文的控制消息。然后,MS会回复包含MSML结果正文的响应消息,以指示请求是否已满足。

During the lifetime of a conference, whenever an event occurs, the media server MAY send CONTROL messages containing MSML events to notify the application server. The application server SHOULD reply with a response message with no MSML body to acknowledge the event has been received.

在会议的生命周期内,无论何时发生事件,媒体服务器都可以发送包含MSML事件的控制消息来通知应用服务器。应用程序服务器应回复一条没有MSML正文的响应消息,以确认已收到事件。

This package does NOT use the REPORT message.

此包不使用报告消息。

Dialog Core Package "msml-dialog"

对话框核心包“msml对话框”

This package extends the MSML Core Package to define the structural framework and abstractions for MSML dialogs.

此包扩展了MSML核心包,以定义MSML对话框的结构框架和抽象。

The application server MAY send CONTROL messages containing a MSML request using the following elements:

应用服务器可以使用以下元素发送包含MSML请求的控制消息:

<dialogstart>: instantiate an MSML media dialog on a connection or a conference.

<dialogstart>:在连接或会议上实例化MSML媒体对话框。

<dialogend>: terminates an MSML dialog.

<dialogend>:终止MSML对话框。

<send>: sends an event and an optional namelist to the dialog, dialog group, or dialog primitive.

<send>:向对话框、对话框组或对话框原语发送事件和可选名称列表。

<exit>: used by the dialog description language to cause the execution of the MSML dialog to terminate.

<exit>:对话框描述语言用于终止MSML对话框的执行。

For the <dialogstart> command, the response message MUST contain an MSML result that indicates that the dialog has been started successfully. The MSML result MAY contain <dialogid> to return the dialog identifier, if the identifier was assigned by the media server. Subsequently, zero or more MSML events MAY be initiated by the media server in (update) REPORT messages to report information gathered during the dialog. Finally, an MSML event "msml.dialog.exit" SHOULD be generated in a (terminate) REPORT message when the dialog terminates (e.g., MSML execution of <exit>).

对于<dialogstart>命令,响应消息必须包含MSML结果,该结果指示对话框已成功启动。如果对话框标识符是由媒体服务器分配的,则MSML结果可能包含<dialogid>以返回对话框标识符。随后,媒体服务器可能会在(更新)报告消息中启动零个或多个MSML事件,以报告对话框中收集的信息。最后,当对话框终止时,应在(终止)报告消息中生成MSML事件“MSML.dialog.exit”(例如,MSML执行<exit>)。

For the <dialogend> and <send> commands, the response message contains the final MSML result that indicates that the request has either been fulfilled or rejected.

对于<dialogend>和<send>命令,响应消息包含最终MSML结果,表明请求已被满足或拒绝。

Dialog Base Package "msml-dialog-base"

对话框库包“msml对话框库”

This package extends the MSML Dialog Core Package to define a set of base functionality for MSML dialogs. The extension defines individual media primitives, including <play>, <dtmfgen>, <tonegen>, <record>, <dtmf> and <collect>, to be used as child element of <dialogstart>. This package does not change the framework message usage as defined by the MSML Dialog Core Package.

此包扩展了MSML对话核心包,以定义MSML对话的一组基本功能。扩展定义了单个媒体原语,包括<play>、<dtmfgen>、<tonegen>、<record>、<dtmf>和<collect>,用作<dialogstart>的子元素。此包不会更改MSML对话核心包定义的框架消息用法。

Dialog Transform Package "msml-dialog-transform"

对话框转换包“msml对话框转换”

This package extends the MSML Dialog Core Package to define a set of transform primitives that works as filter on half-duplex media streams. The extension defines transform primitives, including <vad>, <gain>, <agc>, <gate>, <clamp> and <relay>, that MAY be used as child elements of <dialogstart>. This package does not change the framework message usage as defined by the MSML Dialog Core Package.

此软件包扩展了MSML Dialog Core软件包,以定义一组转换原语,用作半双工媒体流上的过滤器。扩展定义了变换原语,包括<vad>、<gain>、<agc>、<gate>、<clamp>和<relay>,它们可以用作<dialogstart>的子元素。此包不会更改MSML对话核心包定义的框架消息用法。

Dialog Group Package "msml-dialog-group"

对话框组包“msml对话框组”

This package extends the MSML Dialog Core, Base, and Transform Packages to define a single control flow construct that specifies concurrent execution of multiple media primitives. The extension defines the <group> element that MAY be used as a child element of <dialogstart> to enclose multiple media

此包扩展了MSML对话核心、基础和转换包,以定义单个控制流构造,该构造指定多个媒体原语的并发执行。扩展名定义了<group>元素,该元素可用作<dialogstart>的子元素来封装多个媒体

primitives, such that they can be executed concurrently. This package does not change the framework message usage as defined by the MSML Dialog Core Package.

原语,以便它们可以并发执行。此包不会更改MSML对话核心包定义的框架消息用法。

Dialog Speech Package "msml-dialog-speech"

对话语音包“msml对话语音”

This package extends the MSML Dialog Core and MSML Base Package to define functionality that MAY be used for automatic speech recognition and text to speech. The extension extends the <dialogstart> and the <play> elements.

此软件包扩展了MSML Dialog Core和MSML Base软件包,以定义可用于自动语音识别和文本语音转换的功能。扩展扩展扩展了<dialogstart>和<play>元素。

For <dialogstart>, it defines a new child element <speech> to activate grammars or user input rules associated with speech recognition. For <play>, it defines a new child element <tts> to initiate the text-to-speech service.

对于<dialogstart>,它定义了一个新的子元素<speech>,以激活与语音识别相关联的语法或用户输入规则。对于<play>,它定义了一个新的子元素<tts>,以启动文本到语音服务。

This package does not change the framework message usage as defined by the MSML Dialog Core Package.

此包不会更改MSML对话核心包定义的框架消息用法。

Dialog Fax Detection Package "msml-dialog-fax-detect"

对话框传真检测包“msml对话框传真检测”

This package extends the MSML Dialog Core Package to define primitives provide fax detection service. The extension defines a primitive <faxdetect> to be used as a child element of <dialogstart>. This package does not change the framework message usage as defined by the MSML Dialog Core Package.

此包扩展了MSML对话核心包,以定义提供传真检测服务的原语。扩展定义了一个原语<faxdetect>,用作<dialogstart>的子元素。此包不会更改MSML对话核心包定义的框架消息用法。

Dialog Fax Send/Receive Package "msml-dialog-fax-sendrecv"

对话框传真发送/接收包“msml对话框传真发送”

This package extends the MSML Dialog Core Package to define primitives that allow a media server to provide fax send or receive service. The extension defines new primitives <faxsend> and <faxrcv>, to be used as a child element of <dialogstart>. This package does not change the framework message usage as defined by the MSML Dialog Core Package.

此包扩展了MSML对话核心包,以定义允许媒体服务器提供传真发送或接收服务的原语。扩展定义了新的原语<faxsend>和<faxrcv>,用作<dialogstart>的子元素。此包不会更改MSML对话核心包定义的框架消息用法。

Dialog Audit Core Package "msml-audit"

对话框审核核心包“msml审核”

This package extends the MSML Core Package to define a framework for auditing media resource(s) allocated on the media server.

此软件包扩展了MSML核心软件包,以定义一个用于审核媒体服务器上分配的媒体资源的框架。

This package follows a simple request/response transaction, allowing the application server to send CONTROL messages containing MSML <audit> requests. The media server MUST reply with a response message containing the result. The result is contained within the <auditresult> element, returning the queried state information.

这个包遵循一个简单的请求/响应事务,允许应用程序服务器发送包含MSML<audit>请求的控制消息。媒体服务器必须回复包含结果的响应消息。结果包含在<auditresult>元素中,返回查询的状态信息。

This package does NOT use the REPORT message.

此包不使用报告消息。

Dialog Audit Conference Package "msml-audit-conf"

对话审核会议包“msml审核配置”

This package extends the MSML Audit Core Package to define conference specific states that MAY be queried via the <audit> command and the corresponding response MUST be returned by the <auditresult> element. This package does not change the framework message usage as defined by the MSML Audit Core Package.

此包扩展了MSML Audit核心包,以定义可通过<Audit>命令查询的会议特定状态,并且<auditresult>元素必须返回相应的响应。此包不会更改MSML Audit核心包定义的框架消息用法。

Dialog Audit Connection Package "msml-audit-conn"

对话框审核连接包“msml审核连接”

This package extends the MSML Audit Core Package to define connection specific states that MAY be queried via the <audit> command and the corresponding response MUST be returned by the <auditresult> element. This package does not change the framework message usage as defined by the MSML Audit Core Package.

此包扩展了MSML Audit Core包,以定义可通过<Audit>命令查询的特定于连接的状态,并且<auditresult>元素必须返回相应的响应。此包不会更改MSML Audit核心包定义的框架消息用法。

Dialog Audit Dialog Package "msml-audit-dialog"

对话框审核对话框包“msml审核对话框”

This package extends the MSML Audit Core Package to define dialog specific states that MAY be queried via the <audit> command and the corresponding response MUST be returned by the <auditresult> element. This package does not change the framework message usage as defined by the MSML Audit Core Package.

此包扩展了MSML Audit核心包,以定义可通过<Audit>命令查询的特定于对话框的状态,并且<auditresult>元素必须返回相应的响应。此包不会更改MSML Audit核心包定义的框架消息用法。

Dialog Audit Stream Package "msml-audit-stream"

对话框审核流包“msml审核流”

This package extends the MSML Audit Core Package to define stream specific states that MAY be queried via the <audit> command and the corresponding response MUST returned by the <auditresult> element. This package does not change the framework message usage as defined by the MSML Audit Core Package.

此包扩展了MSML Audit核心包,以定义可通过<Audit>命令查询的特定于流的状态,并且<auditresult>元素必须返回相应的响应。此包不会更改MSML Audit核心包定义的框架消息用法。

3.2.3. Common XML Support
3.2.3. 通用XML支持

The XML schema described in [i11] MUST be supported by all Control Packages defined by MSML. However, the "connection-id" value MUST be constructed as defined by MSML (i.e., the identifier MUST contain a local dialog tag only, while the SIP Control Framework [i11] requires that the "connection-id" contain both local and remote dialog tags).

MSML定义的所有控制包都必须支持[i11]中描述的XML模式。但是,“连接id”值必须按照MSML的定义构造(即,标识符必须仅包含本地对话标记,而SIP控制框架[i11]要求“连接id”同时包含本地和远程对话标记)。

3.2.4. Control Message Body
3.2.4. 控制消息体

A valid CONTROL body message MUST conform to the MSML schema, as included in this specification, for the MSML package(s) used.

对于所使用的MSML包,有效的控制正文消息必须符合本规范中包含的MSML架构。

3.2.5. REPORT Message Body
3.2.5. 报告消息体

A valid REPORT body message MUST conform to the MSML schema, as included in this specification, for the MSML package(s) used.

对于所使用的MSML包,有效的报告正文消息必须符合本规范中包含的MSML架构。

4. Language Structure
4. 语言结构
4.1. Package Scheme
4.1. 一揽子计划

The primary mechanism for extending MSML is the "package". A package is an integrated set of one or more XML schemas that define additional features and functions via new or extended use of elements and attributes. Each package, except for those defined in the current document, is defined in a separate standards document, e.g., an Internet Draft or an RFC. All packages that extend the base MSML functionality MUST include references to the MSML base set of schemas provided in the Internet Drafts. A schema in a package MUST only extend MSML; that is, it must not alter the existing specification.

扩展MSML的主要机制是“包”。包是一个或多个XML模式的集成集,这些模式通过新的或扩展的元素和属性的使用来定义附加的特性和功能。每个包(当前文件中定义的包除外)在单独的标准文件中定义,例如,互联网草案或RFC。所有扩展基本MSML功能的包都必须包含对Internet草稿中提供的MSML基本架构集的引用。包中的架构只能扩展MSML;也就是说,它不能改变现有的规范。

A particular MSML script will include references to all the schemas defining the packages whose elements and attributes it makes use of. A particular script MUST reference MSML base and optionally extension package(s). See the IANA Considerations section.

特定的MSML脚本将包含对所有模式的引用,这些模式定义了它所使用的元素和属性的包。特定脚本必须引用MSML基和可选扩展包。请参阅IANA注意事项部分。

Each package MUST define its own namespace so that elements or attributes with the same name in different packages do not conflict. A script using a particular element or attribute MUST prefix the namespace name on that element or attribute's name if it is defined in a package (as opposed to being defined in the base).

每个包必须定义自己的名称空间,以便不同包中具有相同名称的元素或属性不会冲突。使用特定元素或属性的脚本如果在包中定义(而不是在基中定义),则必须在该元素或属性的名称前加上名称空间名称前缀。

MSML consists of a core package that provides structure without support for any specific feature set. Additional packages, relying on the core package, provide functional features. Any combination of additional packages may be used along with the core package. The following describes the set of MSML packages defined in this document.

MSML由一个核心包组成,该包提供了不支持任何特定功能集的结构。依赖于核心包的附加包提供功能特性。附加包的任何组合可与核心包一起使用。以下描述了本文档中定义的MSML包集。

           +--------------------------------------------------------+
           |                     MSML Core                          |
           +--------------------------------------------------------+
                 /                           \                 \
             +--------+                   +--------+        +-------+
             | Dialog |                   | Conf   |        | Audit |
             | Core   |                   | Core   |        | Core  |
             +--------+                   +--------+        +-------+
        ________  \_______________________________________      |
        ------------------------------------------------        |
       /         \          \         \          \      \       |
   +------+  +---------+ +------+ +------+ +------+ +-------+   |
   |Dialog|  |Dialog   | |Dialog| |Dialog| |Dialog| |Dialog |   |
   |Base  |  |Transform| |Group | |Speech| |Fax   | |Fax    |   |
   +------+  +---------+ +------+ +------+ |Detect| |Send/  |   |
                                           +------+ |Receive|   |
                                                    +-------+   |
                                        ________________________|
                                        -------------------------
                                       /       \       \         \
                                   +-----+ +-----+ +------+ +------+
                                   |Audit| |Audit| |Audit | |Audit |
                                   |Conf | |Conn | |Dialog| |Stream|
                                   +-----+ +-----+ +------+ +------+
        
           +--------------------------------------------------------+
           |                     MSML Core                          |
           +--------------------------------------------------------+
                 /                           \                 \
             +--------+                   +--------+        +-------+
             | Dialog |                   | Conf   |        | Audit |
             | Core   |                   | Core   |        | Core  |
             +--------+                   +--------+        +-------+
        ________  \_______________________________________      |
        ------------------------------------------------        |
       /         \          \         \          \      \       |
   +------+  +---------+ +------+ +------+ +------+ +-------+   |
   |Dialog|  |Dialog   | |Dialog| |Dialog| |Dialog| |Dialog |   |
   |Base  |  |Transform| |Group | |Speech| |Fax   | |Fax    |   |
   +------+  +---------+ +------+ +------+ |Detect| |Send/  |   |
                                           +------+ |Receive|   |
                                                    +-------+   |
                                        ________________________|
                                        -------------------------
                                       /       \       \         \
                                   +-----+ +-----+ +------+ +------+
                                   |Audit| |Audit| |Audit | |Audit |
                                   |Conf | |Conn | |Dialog| |Stream|
                                   +-----+ +-----+ +------+ +------+
        

o MSML Core Package (Mandatory)

o MSML核心包(强制性)

Describes the minimum base framework that MUST be implemented to support additional core packages.

描述必须实现以支持其他核心包的最低基本框架。

o MSML Conference Core Package (Conditionally Mandatory, for Conferencing)

o MSML会议核心包(有条件地强制要求,用于会议)

Describes the audio and multimedia basic and advanced conferencing package that MAY be implemented.

介绍可实施的音频和多媒体基本和高级会议软件包。

o MSML Dialog Core Package (Conditionally Mandatory, for Dialogs)

o MSML对话核心包(对于对话,条件强制)

Describes the dialog core package that MUST be implemented for any dialog services. However, systems supporting conferencing only, MAY omit support for MSML dialogs. The MSML Dialog Core Package specifies the framework within which additional dialog packages are supported. The MSML Dialog Base Package MUST be supported, while all other dialog packages MAY be supported.

描述任何对话服务必须实现的对话核心包。但是,仅支持会议的系统可能会忽略对MSML对话框的支持。MSML对话核心包指定支持其他对话包的框架。必须支持MSML对话基本软件包,同时可能支持所有其他对话软件包。

o MSML Dialog Base Package (Conditionally Mandatory, for Dialogs)

o MSML对话框基本包(对于对话框,条件强制)

o MSML Dialog Group Package (Optional)

o MSML对话框组包(可选)

o MSML Dialog Transform Package (Optional)

o MSML对话框转换包(可选)

o MSML Dialog Fax Detection Package (Optional)

o MSML对话框传真检测包(可选)

o MSML Dialog Fax Send/Receive Package (Optional)

o MSML对话框传真发送/接收包(可选)

o MSML Dialog Speech Package (Optional)

o MSML对话语音包(可选)

o MSML Audit Core Package (Conditionally Mandatory, for Auditing)

o MSML审核核心包(有条件强制,用于审核)

Describes the audit core package that MUST be implemented to support auditing services. The MSML audit core package specifies the framework within which additional audit packages are supported.

描述必须实现以支持审核服务的审核核心包。MSML审核核心包指定支持其他审核包的框架。

o MSML Audit Conference Package (Conditionally Mandatory, for Auditing Conference, Conference Dialog, and Conference Stream)

o MSML审核会议包(有条件强制,用于审核会议、会议对话框和会议流)

o MSML Audit Connection Package (Conditionally Mandatory, for Auditing Connection, Connection Dialog, and Connection Stream)

o MSML审核连接包(条件强制,用于审核连接、连接对话框和连接流)

o MSML Audit Dialog Package (Conditionally Mandatory, for Auditing Dialog, and MUST be used with either MSML Audit Conference Package or MSML Audit Connection Package)

o MSML审核对话框包(对于审核对话框,有条件地必须使用,并且必须与MSML审核会议包或MSML审核连接包一起使用)

o MSML Audit Stream Package (Conditionally Mandatory, for Auditing Stream, and MUST be used with either MSML Audit Conference Package or MSML Audit Connection Package)

o MSML审核流包(对于审核流,有条件地是强制性的,并且必须与MSML审核会议包或MSML审核连接包一起使用)

The formal process for defining extensions to MSML dialogs is to define a new package. The new package MUST provide a text description of what extensions are included and how they work. It MUST also define an XML schema file (if applicable) that defines the new package (which may be through extension, restriction of an existing package, or a specific profile of an existing package). Dependencies upon other packages MUST be stated. For example, a package that extends or restricts has a dependency on the original package specification. Finally, the new package MUST be assigned a unique name and version.

定义MSML对话框扩展的正式过程是定义一个新包。新的软件包必须提供包含哪些扩展以及它们如何工作的文本描述。它还必须定义定义新包的XML模式文件(如果适用)(可以通过扩展、限制现有包或现有包的特定概要文件)。必须说明对其他包的依赖关系。例如,扩展或限制的包依赖于原始包规范。最后,必须为新包分配唯一的名称和版本。

The types of things that can be defined in new packages are:

可以在新包中定义的内容类型有:

o new primitives

o 新原语

o extensions to existing primitives (events, shadow variables, attributes, content)

o 对现有原语(事件、阴影变量、属性、内容)的扩展

o new recognition grammars for existing primitives

o 现有原语的新识别语法

o new markup languages for speech generation

o 用于语音生成的新标记语言

o languages for specifying a topology schema

o 用于指定拓扑架构的语言

o new predefined topology schemas

o 新的预定义拓扑模式

o new variables / segment types (sets & languages)

o 新变量/段类型(集合和语言)

o new control flow elements

o 新的控制流元件

MSML packages are assembled together to form a specific MSML profile that is shared between different implementations. The base MSML dialog profiles that are defined in this document consist of the MSML Core Package, MSML Dialog Core Package, MSML Dialog Base Package, MSML Dialog Group Package, MSML Transform Package, MSML Fax Packages, and the MSML Speech Package.

MSML包被组装在一起,形成在不同实现之间共享的特定MSML配置文件。本文档中定义的基本MSML对话配置文件包括MSML核心包、MSML对话核心包、MSML对话基本包、MSML对话组包、MSML转换包、MSML传真包和MSML语音包。

MSML extension packages, which define primitives, MUST define the following for each primitive within the package:

定义原语的MSML扩展包必须为包中的每个原语定义以下内容:

o the function that the primitive performs

o 原语执行的功能

o the attributes that may be used to tailor its behavior

o 可用于调整其行为的属性

o the events that it is capable of understanding

o 它能够理解的事件

o the shadow variables that provide access to information determined as a result of the primitive's operation

o 提供对作为原语操作结果确定的信息的访问的阴影变量

The mechanism used to ensure that a media server and its client share a compatible set of packages is not defined. Currently, it is expected that provisioning will be used, possibly coupled with a future auditing capability. Additionally, when used in SIP networks, packages could be defined using feature tags and the procedures defined for Indicating User Agent Capabilities in SIP [i1] used to allow a media server to describe its capabilities to other user agents.

未定义用于确保媒体服务器及其客户端共享一组兼容包的机制。目前,预计将使用资源调配,并可能与未来的审计功能结合使用。此外,当在SIP网络中使用时,可以使用特征标签和在SIP[i1]中定义的用于指示用户代理能力的过程来定义包,该过程用于允许媒体服务器向其他用户代理描述其能力。

4.2. Profile Scheme
4.2. 剖面图

Not all devices and applications using MSML will need to support the entire MSML schema. For example, a media processing device might support only audio announcements, only audio simple conferencing, or only multimedia IVR. It is highly desirable to have a system for describing what portion of MSML a particular media processing device or control agent supports.

并非所有使用MSML的设备和应用程序都需要支持整个MSML架构。例如,媒体处理设备可能只支持音频公告、音频简单会议或多媒体IVR。非常希望有一个系统来描述特定媒体处理设备或控制代理所支持的MSML的哪一部分。

The package scheme described earlier allows MSML functionality to be functionally grouped, relying on the MSML core package. This scheme allows a portion of the complete MSML specification to be implemented, on a per-package basis, and also creates a framework for future extension packages. However, within a given package, in some cases, only a subset of the package functionality may be required. In order to support subsets of packages, with greater degree of granularity than at the package level, a profile scheme is required.

前面描述的包方案允许根据MSML核心包对MSML功能进行功能分组。该方案允许在每个包的基础上实现完整MSML规范的一部分,并为将来的扩展包创建一个框架。然而,在某些情况下,在给定的包中,可能只需要包功能的一个子集。为了支持比包级别粒度更大的包子集,需要配置文件方案。

MSML package profiles would identify a subset of a given MSML package with specific definitions of elements and attributes. Each MSML package profile MUST be accompanied by one or more corresponding schemas. To use the examples above, there could be an audio announcements profile of the MSML Dialog Base Package, an audio simple conferencing profile of the MSML Conference Core Package, and a multimedia IVR profile of the MSML Dialog Base Package.

MSML包配置文件将使用元素和属性的特定定义标识给定MSML包的子集。每个MSML包配置文件必须附带一个或多个对应的模式。要使用上述示例,可以有MSML对话基本包的音频公告配置文件、MSML会议核心包的音频简单会议配置文件和MSML对话基本包的多媒体IVR配置文件。

MSML package profiles MUST be published separately from the MSML specification, in one or more standards documents (e.g., Internet Drafts or RFCs) dedicated to MSML package profiles. Profiles would not be registered with IANA and any organization would additionally be free to create its own profile(s) if required.

MSML软件包配置文件必须与MSML规范分开发布,发布在一个或多个专用于MSML软件包配置文件的标准文件(例如,互联网草案或RFC)中。配置文件将不会在IANA注册,如果需要,任何组织都可以自由创建自己的配置文件。

5. Execution Flow
5. 执行流程

MSML assumes a model where there is a single control context within a media server for MSML processing. That context may have one or many SIP [n1] dialogs associated with it. It is assumed that any SIP dialogs associated with the MSML control context have been authorized, as appropriate, by mechanisms outside the scope of MSML.

MSML假设在媒体服务器中有一个用于MSML处理的控件上下文。该上下文可能有一个或多个与之关联的SIP[n1]对话框。假设与MSML控制上下文相关联的任何SIP对话框都已由MSML范围之外的机制(视情况而定)授权。

A media server control context maintains information about the state of all media objects and media streams within a media server. It receives and processes all MSML requests from authorized SIP dialogs and receives all events generated internally by media objects and sends them on the appropriate SIP dialog. An MSML request is able to create new media objects and streams, and to modify or destroy any existing media objects and streams.

媒体服务器控件上下文维护有关媒体服务器中所有媒体对象和媒体流的状态的信息。它接收并处理来自授权SIP对话框的所有MSML请求,接收媒体对象内部生成的所有事件,并在适当的SIP对话框上发送它们。MSML请求能够创建新的媒体对象和流,并修改或销毁任何现有的媒体对象和流。

An MSML request may simply specify a single action for a media server to undertake. In this case, the document is very similar to a simple command request. Often, though, it may be more natural for a client to request multiple actions at one time, or the client would like several actions to be closely coordinated by the media server. Multiple MSML elements received in a single request MUST be processed sequentially in document order.

MSML请求可以简单地指定媒体服务器执行的单个操作。在本例中,文档非常类似于一个简单的命令请求。但是,通常情况下,客户端一次请求多个操作可能更为自然,或者客户端希望媒体服务器密切协调多个操作。在单个请求中接收的多个MSML元素必须按文档顺序依次处理。

An example of the first scenario would be to create a conference and join it with an initial participant. An example of the second case would be to unjoin one or more participants from a main conference and join them to a sidebar conference. In the first scenario, network latencies may not be an issue, but it is simpler for the client to combine the requests. In the second case, the added network latency between separate requests could mean perceptible audio loss to the participant.

第一个场景的一个示例是创建一个会议,并与初始参与者一起加入。第二种情况的一个例子是将一个或多个参与者从主会议中解约出来,并将他们加入侧边栏会议。在第一个场景中,网络延迟可能不是问题,但是客户端合并请求更简单。在第二种情况下,不同请求之间增加的网络延迟可能意味着参与者可以感觉到音频丢失。

Each MSML request is processed as a single transaction. A media server MUST ensure that it has the necessary resources available to carry out the complete transaction before executing any elements of the request. If it does not have sufficient resources, it MUST return a 520 response and MUST NOT execute the transaction.

每个MSML请求都作为单个事务处理。在执行请求的任何元素之前,媒体服务器必须确保其拥有执行完整事务所需的资源。如果它没有足够的资源,它必须返回520响应并且不能执行事务。

The MSML request MUST be checked for well-formedness and validated against the schema prior to executing any elements. This allows XML [n2] errors to reported immediately and minimizes failures within a transaction and the corresponding execution of only part of the transaction.

在执行任何元素之前,必须检查MSML请求的格式是否良好,并根据模式进行验证。这允许立即报告XML[n2]错误,并最大限度地减少事务中的故障以及仅部分事务的相应执行。

Each element is expected to execute immediately. Elements such as <dialogstart>, which take an unpredictable amount of time, are "forked" and executed in a separate thread (see MSML Dialog Packages). Once successfully forked, execution continues with the element following the </dialogstart>. As such, MSML does not provide mechanisms to sequence or coordinate other operations with dialog elements.

每个元素都应立即执行。诸如<dialogstart>之类的元素需要不可预测的时间,它们被“分叉”并在单独的线程中执行(请参见MSML对话包)。成功分叉后,继续执行</dialogstart>后面的元素。因此,MSML不提供将其他操作与对话框元素排序或协调的机制。

Processing within a transaction MUST stop if any errors occur. Elements that were executed prior to the error are not rolled back. It is the responsibility of the client to determine appropriate actions based upon the results indicated in the response. Most elements MAY contain an optional "mark" attribute. The value of that attribute from the last successfully executed element MUST be returned in an error response. Note that errors that occur during the execution of a dialog occur outside the context of an MSML transaction. These errors will be indicated in an asynchronous event.

如果发生任何错误,事务内的处理必须停止。在发生错误之前执行的元素不会回滚。客户有责任根据响应中显示的结果确定适当的行动。大多数元素可能包含可选的“标记”属性。必须在错误响应中返回上一个成功执行的元素的属性值。请注意,在执行对话框期间发生的错误发生在MSML事务的上下文之外。这些错误将在异步事件中指示。

Transaction results are returned as part of the SIP request response. The transaction results indicate the success or failure of the transaction. The result MUST also include identifiers for any objects created by a media server for which the client did not provide an instance name. Additionally, if the transaction fails, the reason for the failure MUST be returned, as well as an indication of how much of the transaction was executed before the failure occurred SHOULD be returned.

事务结果作为SIP请求响应的一部分返回。事务结果指示事务的成功或失败。结果还必须包括由媒体服务器创建的、客户端未提供实例名称的任何对象的标识符。此外,如果事务失败,则必须返回失败的原因,以及在失败发生之前执行了多少事务的指示。

6. Media Server Object Model
6. 媒体服务器对象模型

Media servers are general-purpose platforms for executing real-time media processing tasks. These tasks range in complexity from simple ones such as serving announcements, to complex ones, such as speech interfaces, centralized multimedia conferencing, and sophisticated gaming applications.

媒体服务器是执行实时媒体处理任务的通用平台。这些任务的复杂性从简单的任务(如发布公告)到复杂的任务(如语音接口、集中式多媒体会议和复杂的游戏应用程序)。

Calls are established to a media server using SIP. Clients will often use SIP third party call control (3PCC) [i4] to establish calls to a media server on behalf of end users. However MSML does not require that 3PCC be used, only that the client and the media server share a common identifier for the call and its associated RTP [i3] sessions.

使用SIP建立对媒体服务器的呼叫。客户端通常使用SIP第三方呼叫控制(3PCC)[i4]代表最终用户建立对媒体服务器的呼叫。但是,MSML不要求使用3PCC,只要求客户端和媒体服务器共享呼叫及其相关RTP[i3]会话的公共标识符。

Objects represent entities that source, sink, or modify media streams. A media streams is a bidirectional or unidirectional media flow between objects on a media server. The following subsections define the classes of objects that exist on a media server and the way these are identified in MSML.

对象表示源、接收或修改媒体流的实体。媒体流是媒体服务器上对象之间的双向或单向媒体流。以下小节定义了媒体服务器上存在的对象类以及在MSML中标识这些对象的方式。

6.1. Objects
6.1. 物体

A media object is an endpoint of one or more media streams. It may be a connection that terminates RTP sessions from the network or a resource that transforms or manipulates media. MSML defines four classes of media objects. Each class defines the basic properties of how object instances are used within a media server. However, most classes require that the function of specific instances be defined by the client, using MSML or other languages such as VoiceXML.

媒体对象是一个或多个媒体流的端点。它可以是从网络终止RTP会话的连接,也可以是转换或操纵媒体的资源。MSML定义了四类媒体对象。每个类定义在媒体服务器中如何使用对象实例的基本属性。但是,大多数类要求特定实例的函数由客户端使用MSML或其他语言(如VoiceXML)定义。

The following classes of media processing objects are defined. The class names are given in parentheses:

定义了以下类型的媒体处理对象。括号中给出了类名:

o network connection (conn)

o 网络连接(conn)

o conference (conf)

o 会议(conf)

o dialog (dialog)

o 对话(对话)

Network connection is an abstraction for the media processing resources involved in terminating the RTP session(s) of a call. For audio services, a connection instance presents a full-duplex audio stream interface within a media server. Multimedia connections have multiple media streams of different media types, each corresponding to an RTP session. Network connections get instantiated through SIP [n1].

网络连接是终止呼叫的RTP会话所涉及的媒体处理资源的抽象。对于音频服务,连接实例在媒体服务器中提供全双工音频流接口。多媒体连接具有不同媒体类型的多个媒体流,每个媒体流对应于一个RTP会话。网络连接通过SIP[n1]实例化。

A conference represents the media resources and state information required for a single logical mix of each media type in the conference (e.g., audio and video). MSML models multiple mixes/views of the same media type as separate conferences. Each conference has multiple inputs. Inputs may be divided into classes that allow an application to request different media treatment for different participants. For example, the video streams for some participants may be assigned to fixed regions of the screen while those for other participants may only be shown when they are speaking.

会议表示会议中每种媒体类型(如音频和视频)的单一逻辑组合所需的媒体资源和状态信息。MSML将同一媒体类型的多个混合/视图建模为单独的会议。每次会议都有多种投入。输入可以分为几个类,允许应用程序为不同的参与者请求不同的媒体处理。例如,一些参与者的视频流可以被分配到屏幕的固定区域,而其他参与者的视频流只能在他们讲话时显示。

A conference has a single logical output per media type. For each participant, it consists of the audio conference mix, less any contributed audio of the participant, and the video mix shared by all conference participants. Video conferences using voice activated switching have an optional ability to show the previous speaker to the current speaker.

每个媒体类型的会议都有一个逻辑输出。对于每个参与者,它包括音频会议混音,减去参与者贡献的音频,以及所有会议参与者共享的视频混音。使用语音激活切换的视频会议具有向当前扬声器显示前一个扬声器的可选功能。

Conferences are instantiated using the <createconference> element. The content of the <createconference> element specifies the parameters of the audio and/or video mixes.

会议是使用<createconference>元素实例化的。<createconference>元素的内容指定音频和/或视频混合的参数。

Dialogs are a class of objects that represent automated participants. They are similar to network connections from a media flow perspective and may have one or more media streams as the abstraction for their interface within a media server. Unlike connections, however, dialogs are created and destroyed through MSML, and the media server itself implements the dialog participant. Dialogs are instantiated through the <dialogstart> element. Contents of the <dialogstart> element define the desired or expected dialog behavior. Dialogs may also be invoked by referencing VoiceXML as the dialog description language.

对话框是一类表示自动参与者的对象。从媒体流的角度来看,它们类似于网络连接,并且可以有一个或多个媒体流作为其在媒体服务器内接口的抽象。但是,与连接不同,对话是通过MSML创建和销毁的,媒体服务器本身实现对话参与者。对话框是通过<dialogstart>元素实例化的。<dialogstart>元素的内容定义所需或预期的对话框行为。也可以通过引用VoiceXML作为对话框描述语言来调用对话框。

Operators are functions that are used to filter or transform a media stream. The function that an instance of an operator fulfills is defined as a property of the media stream. Operators may be unidirectional or bidirectional and have a media type. Unidirectional operators reflect simple atomic functions such as automatic gain control, filtering tones from conferences, or applying specific gain values to a stream. Unidirectional operators have a single media input, which is connected to the media stream from one object, and a single media output, which is connected to the media stream of a different object.

运算符是用于过滤或转换媒体流的函数。操作符实例实现的功能定义为媒体流的属性。运算符可以是单向或双向的,并且具有媒体类型。单向运算符反映了简单的原子功能,例如自动增益控制、过滤来自会议的音调或将特定增益值应用于流。单向操作符具有单个媒体输入(连接到来自一个对象的媒体流)和单个媒体输出(连接到不同对象的媒体流)。

Bidirectional operators have two media inputs and two media outputs. One media input and output is associated with the stream to one object, and the other input and output is associated with a stream to a different object. Bidirectional objects may treat the media differently in each direction. For example, an operator could be

双向运算符有两个媒体输入和两个媒体输出。一个媒体输入和输出与一个对象的流相关联,另一个输入和输出与另一个对象的流相关联。双向对象可以在每个方向上对媒体进行不同的处理。例如,操作员可以是

defined that changed the media sent to a connection based upon recognized speech or dual-tone multi-frequency (DTMF) received from the connection. Operators are implicitly instantiated when streams are created or modified using the elements <join> and <modifystream>, respectively.

根据从连接接收到的可识别语音或双音多频(DTMF)更改发送到连接的媒体的定义。分别使用元素<join>和<modifystream>创建或修改流时,会隐式实例化运算符。

The relationships between the different object classes (conf, conn, and dialog) are shown in the figure below.

下图显示了不同对象类(conf、conn和dialog)之间的关系。

              +--------------------------------------+
              |           Media Server               |
              |                                      |
              |------+                      ,---.    |
              |      |      +------+       /     \   |
   <== RTP ==>| conn |<---->| oper |<---->( conf  )  |
              |      |      +------+       \     /   |
              |------+                      `---'    |
              |   ^                           ^      |
              |   |                           |      |
              |   |   +------+    +------+    |      |
              |   |   |      |    |      |    |      |
              |   +-->|dialog|    |dialog|<---+      |
              |       |      |    |      |           |
              |       +------+    +------+           |
              +--------------------------------------+
        
              +--------------------------------------+
              |           Media Server               |
              |                                      |
              |------+                      ,---.    |
              |      |      +------+       /     \   |
   <== RTP ==>| conn |<---->| oper |<---->( conf  )  |
              |      |      +------+       \     /   |
              |------+                      `---'    |
              |   ^                           ^      |
              |   |                           |      |
              |   |   +------+    +------+    |      |
              |   |   |      |    |      |    |      |
              |   +-->|dialog|    |dialog|<---+      |
              |       |      |    |      |           |
              |       +------+    +------+           |
              +--------------------------------------+
        

A single, full-duplex instance of each object class is shown together with common relationships between them. An operator (such as gain) is shown between a connection and a conference and dialogs are shown participating both with an individual connection and with a conference. The figure is not meant to imply only one-to-one relationships. Conferences will often have hundreds of participants, and either connections or conferences may be interacting with more than one dialog. For example, one dialog may be recording a conference while other dialogs announce participants joining or leaving the conference.

每个对象类的单个全双工实例以及它们之间的公共关系一起显示。在连接和会议之间显示操作员(如gain),并显示对话,其中包括个人连接和会议。这个数字并不意味着只有一对一的关系。会议通常有数百名参与者,连接或会议可能与多个对话进行交互。例如,一个对话框可能正在录制会议,而其他对话框则宣布参与者加入或退出会议。

6.2. Identifiers
6.2. 标识符

Objects are referenced using identifiers that are composed of one or more terms. Each term specifies an object class and names a specific instance within that class. The object class and instance are separated by a colon ":" in an identifier term.

使用由一个或多个术语组成的标识符引用对象。每个术语指定一个对象类,并命名该类中的特定实例。对象类和实例在标识符术语中用冒号“:”分隔。

Identifiers are assigned to objects when they are first created. In general, either the MSML client or a media server may specify the instance name for an object. Objects for which a client does not assign an instance name will be assigned one by a media server.

标识符在对象首次创建时分配给对象。通常,MSML客户端或媒体服务器都可以指定对象的实例名称。客户端未为其分配实例名称的对象将由媒体服务器分配一个实例名称。

Media server assigned instance names are returned to the client as a complete object identifier in the response to the request that created the object.

在响应创建对象的请求时,媒体服务器分配的实例名称将作为完整的对象标识符返回给客户端。

It is meaningful for some classes of objects to exist independently on a media server. Network connections may be created through SIP at any time. MSML can then be used to associate their media with other objects as required to create services. Conferences may be created and have specific resources reserved waiting for participant connections.

某些类的对象独立存在于媒体服务器上是有意义的。可以随时通过SIP创建网络连接。然后,可以使用MSML将其媒体与创建服务所需的其他对象相关联。可以创建会议,并保留特定资源以等待参与者连接。

Objects from these two classes, connections and conferences, are considered independent objects since they can exist on a standalone basis. Identifiers for independent objects consist of a single term as defined above. For example, identifiers for a conference and connection could be "conf:abc" or "conn:1234" respectively. Clients that choose to assign instance names to independent objects must use globally unique instance names. One way to create globally unique names is to include the domain name of the client as part of the name.

连接和会议这两个类中的对象被视为独立对象,因为它们可以独立存在。独立对象的标识符由上面定义的单个术语组成。例如,会议和连接的标识符可以分别为“conf:abc”或“conn:1234”。选择将实例名称分配给独立对象的客户端必须使用全局唯一的实例名称。创建全局唯一名称的一种方法是将客户端的域名作为名称的一部分。

Dialogs are created to provide a service to independent objects. Dialogs may act as a participant in a conference or interact with a connection similar to a two-participant call. Dialogs depend upon the existence of independent objects, and this is reflected in the composition of their identifiers. Operators modify the media flow between other objects, such as application of gain between a connection and a conference. As operators are merely media transform primitives defined as properties of the media stream, they are not represented by identifiers and created implicitly.

创建对话框是为了向独立对象提供服务。对话可以作为会议的参与者,也可以与类似于两人通话的连接进行交互。对话框依赖于独立对象的存在,这反映在其标识符的组合中。操作员修改其他对象之间的媒体流,例如连接和会议之间的增益应用。由于操作符仅仅是定义为媒体流属性的媒体转换原语,所以它们不由标识符表示,而是隐式创建的。

Identifiers for dialogs are composed of a structured list of slash ('/') separated terms. The left-most term of the identifier must specify a conference or connection. This serves as the root for the identifier. An example of an identifier for a dialog acting as a conference participant could be:

对话框的标识符由斜杠(“/”)分隔术语的结构化列表组成。标识符最左边的术语必须指定会议或连接。它用作标识符的根。作为会议参与者的对话的标识符示例可以是:

      conf:abc/dialog:recorder
        
      conf:abc/dialog:recorder
        

All objects except connections are created using MSML. Connections are created when media sessions get established through SIP. There are several options clients and media servers can use to establish a shared instance name for a connection and its media streams.

除连接之外的所有对象都是使用MSML创建的。通过SIP建立媒体会话时会创建连接。客户端和媒体服务器可以使用多个选项为连接及其媒体流建立共享实例名称。

When media servers support multiple media types, the instance name SHOULD be a call identifier that can be used to identify the collection of RTP sessions associated with a call. When MSML is used in conjunction with SIP and third party call control, the call

当媒体服务器支持多种媒体类型时,实例名称应为呼叫标识符,可用于标识与呼叫关联的RTP会话集合。当MSML与SIP和第三方呼叫控制一起使用时,呼叫

identifier MUST be the same as the local tag assigned by the media server to identify the SIP dialog. This will be the tag the media server adds to the "To" header in its response to an initial invite transaction. RFC 3261 requires the tag values to be globally unique.

标识符必须与媒体服务器分配的本地标记相同,以标识SIP对话框。这将是媒体服务器在响应初始invite事务时添加到“to”头中的标记。RFC 3261要求标记值全局唯一。

An example of a connection identifier is: conn:74jgd63956ts.

连接标识符的一个示例是:conn:74jgd63956ts。

With third party call control, the MSML client acts as a back-to-back user agent (B2BUA) to establish the media sessions. SIP dialogs are established between the client and the media server allowing the use of the media server local tag as a connection identifier. If third party call control is not used, a SIP event package MAY be used to allow a media server to notify new sessions to a client that has subscribed to this information.

通过第三方呼叫控制,MSML客户端充当背靠背用户代理(B2BUA)来建立媒体会话。SIP对话框在客户端和媒体服务器之间建立,允许使用媒体服务器本地标记作为连接标识符。如果未使用第三方呼叫控制,则SIP事件包可用于允许媒体服务器向已订阅此信息的客户端通知新会话。

Identifiers as described above allow every object in a media server to be uniquely addressed. They can also be used to refer to multiple objects. There are two ways in which this can currently be done:

如上所述的标识符允许对媒体服务器中的每个对象进行唯一寻址。它们还可用于引用多个对象。目前有两种方法可以做到这一点:

wildcards

通配符

common instance names

通用实例名

An identifier can reference multiple objects when a wildcard is used as an instance name. MSML reserves the instance name composed of a single asterisk ('*') to mean all objects that have the same identifier root and class. Instance names containing an asterisk cannot be created. Wildcards MUST only be used as the right-most term of an identifier and MUST NOT be used as part of the root for dialog identifiers. Wildcards are only allowed where explicitly indicated below.

当通配符用作实例名称时,标识符可以引用多个对象。MSML保留由单个星号(“*”)组成的实例名称,以表示具有相同标识符根和类的所有对象。无法创建包含星号的实例名称。通配符只能用作标识符的最右边术语,不能用作对话框标识符根的一部分。只有在下面明确指出的情况下才允许使用通配符。

The following are examples of valid wildcards:

以下是有效通配符的示例:

      conf:abc/dialog:*
        
      conf:abc/dialog:*
        

conn:*

康涅狄格州:*

An example of illegal wildcard usage is:

非法使用通配符的一个例子是:

      conf:*/dialog:73849
        
      conf:*/dialog:73849
        

Although identifiers share a common syntax, MSML elements restrict the class of objects that are valid in a given context. As an example, although it is valid to join two connections together, it is not valid to join two IVR dialogs.

尽管标识符共享公共语法,但MSML元素限制在给定上下文中有效的对象类。例如,虽然将两个连接连接在一起是有效的,但将两个IVR对话框连接在一起是无效的。

7. MSML Core Package
7. MSML核心包

This section describes the core MSML package that MUST be supported in order to use any other MSML packages. The core MSML package defines a framework, without explicit functionality, over which functional packages are used.

本节介绍要使用任何其他MSML包必须支持的核心MSML包。核心MSML包定义了一个框架,没有明确的功能,在该框架上使用功能包。

7.1. <msml>
7.1. <msml>

<msml> is the root element. When received by a media server, it defines the set of operations that form a single MSML request. Operations are requested by the contents of the element. Each operation MAY appear zero or more times as children of <msml>. Specific operations are defined within the conference package and in the set of dialog packages.

<msml>是根元素。当被媒体服务器接收时,它定义形成单个MSML请求的操作集。操作由元素的内容请求。作为<msml>的子级,每个操作可能出现零次或多次。特定操作在会议包和对话框包集中定义。

The results of a request or the contents of events sent by a media server are also enclosed within the <msml> element. The results of the transaction are included as a body in the response to the SIP request that contained the transaction. This response will contain any identifiers that the media server assigned to newly created objects. All messages that a media server generates are correlated to an object identifier. Objects and identifiers are discussed in section 6 (Media Server Object Model).

请求的结果或媒体服务器发送的事件的内容也包含在<msml>元素中。事务的结果作为主体包含在对包含该事务的SIP请求的响应中。此响应将包含媒体服务器分配给新创建对象的任何标识符。媒体服务器生成的所有消息都与对象标识符相关。对象和标识符在第6节(媒体服务器对象模型)中讨论。

Attributes:

属性:

version: "1.1" Mandatory

版本:“1.1”必填

7.2. <send>
7.2. <send>

Events are used to affect the behavior of different objects within a media server. The <send> element is used to send an event to the specified recipient within the media server.

事件用于影响媒体服务器中不同对象的行为。元素用于将事件发送到媒体服务器中的指定收件人。

Attributes:

属性:

event: the name of an event. Mandatory.

事件:事件的名称。强制性的

target: an object identifier. When the identifier is for a dialog, it may optionally be appended with a slash "/" followed by the target to be included in an MSML dialog <send>. Mandatory.

目标:对象标识符。当标识符用于对话框时,可以选择在其后面附加一个斜杠“/”,后跟要包含在MSML对话框<send>中的目标。强制性的

valuelist: a list of zero or more parameters that are included with the event.

valuelist:事件中包含的零个或多个参数的列表。

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all mark attributes within an MSML document should be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有标记属性的值都应该是唯一的。

7.3. <result>
7.3. <result>

The <result> element is used to report the results of an MSML transaction. It is included as a body in the final response to the SIP request that initiated the transaction. An optional child element <description> may include text that expands on the meaning of error responses. Response codes are defined in section 11 (Response Codes).

元素用于报告MSML事务的结果。它作为主体包含在启动事务的SIP请求的最终响应中。可选的子元素<description>可能包含扩展错误响应含义的文本。第11节(响应代码)中定义了响应代码。

Attributes:

属性:

response: a numeric code indicating the overall success or failure of the transaction, and in the case of failure, an indication of the reason. Mandatory.

响应:一个数字代码,指示事务的总体成功或失败,如果失败,则指示原因。强制性的

mark: in the case of an error, the value of the mark attribute from the last successfully executed element that included the mark attribute.

mark:如果出现错误,则为上次成功执行的包含mark属性的元素的mark属性值。

In the case of failure, a description of the reason SHOULD be provided using the child element <description>.

如果出现故障,应使用子元素<description>提供原因说明。

Three other child elements allow the response to include identifiers for objects created by the request but that did not have instance names specified by the client. Those elements are <confid> and <dialogid>, for objects created through a <createconference> and <dialogstart> respectively.

其他三个子元素允许响应包含由请求创建的对象的标识符,但这些对象没有客户端指定的实例名称。这些元素分别是<confid>和<dialogid>,用于通过<createconference>和<dialogstart>创建的对象。

7.4. <event>
7.4. <event>

The <event> element is used to notify an event to a media server client. Three types of events are defined by the MSML Core Package: "msml.dialog.exit", "msml.conf.nomedia", and "msml.conf.asn". These correspond to the termination of an executing dialog, a conference being automatically deleted when the last participant has left, and the notification of the current set of active speakers for a conference, respectively. Events may also be generated by an executing dialog. In this case, the event type is specified by the dialog (see MSML Dialog Core Package <send>).

<event>元素用于向媒体服务器客户端通知事件。MSML核心包定义了三种类型的事件:“MSML.dialog.exit”、“MSML.conf.nomedia”和“MSML.conf.asn”。这些分别对应于执行对话框的终止、最后一个参与者离开时自动删除的会议以及会议当前活跃发言人集的通知。事件也可以由正在执行的对话框生成。在这种情况下,事件类型由对话框指定(请参阅MSML dialog Core Package<send>)。

Attributes:

属性:

name: the type of event. If the event is generated because of the execution MSML dialog <send>, the value MUST be the value of the "event" attribute from the <send> element within the MSML Dialog Core Package. If the event is generated because of the execution of an <exit>, the value MUST be "moml.exit". If the event is generated because of the execution of a <disconnect>, the value MUST be "moml.disconnect". If the event is generated because of an error, the value must be "moml.error". Mandatory.

名称:事件的类型。如果事件是由于执行MSML对话框<send>而生成的,则该值必须是MSML对话框核心包中<send>元素的“事件”属性的值。如果由于执行<exit>而生成事件,则该值必须为“moml.exit”。如果由于执行<disconnect>而生成事件,则该值必须为“moml.disconnect”。如果事件是由于错误而生成的,则该值必须为“moml.error”。强制性的

id: the identifier of the conference or dialog that generated the event or caused the event to be generated. Mandatory.

id:生成事件或导致生成事件的会议或对话框的标识符。强制性的

<event> has two children, <name> and <value>, which contain the name and value respectively of each namelist item associated with the event.

<event>有两个子项,<name>和<value>,分别包含与事件关联的每个名称列表项的名称和值。

8. MSML Conference Core Package
8. 会议核心包
8.1. Conferences
8.1. 会议

A conference has a mixer for each type of media that the conference supports. Each mix has a corresponding description that defines how the media from participants contributes to that mix. A mixer has multiple inputs that are combined in a media specific way to create a single logical output.

对于会议支持的每种媒体类型,会议都有一个混音器。每个组合都有相应的描述,定义了参与者的媒体如何为该组合做出贡献。混频器具有多个输入,这些输入以特定于媒体的方式组合,以创建单个逻辑输出。

The elements that describe the mix for each media type are called mixer description elements. They are:

描述每种媒体类型的混音的元素称为混音器描述元素。他们是:

<audiomix> defines the parameters for mixing audio media.

<audiomix>定义混音音频媒体的参数。

<videolayout> defines the composition of a video window.

<videolayout>定义视频窗口的组成。

These elements, defined in sections 8.6 (Audio Mix) and 8.7 (Video Layout) respectively, are used as content of the <createconference> element to establish the initial properties of a conference. The elements are used within the <modifyconference> element to change the properties of a conference once it has been created, or within the <destroyconference> element to remove individual mixes from the conference.

这些元素分别在第8.6节(音频混合)和第8.7节(视频布局)中定义,用作<createconference>元素的内容,以建立会议的初始属性。元素在<modifyconference>元素中用于在创建会议后更改会议的属性,或在<destroyconference>元素中用于从会议中删除单个混合。

Conferences may be terminated by an MSML client using the <destroyconference> element to remove the entire conference or by removing the last mixer(s) associated with the conference. Conferences can also be terminated automatically by a media server based on criteria specified when the conference is created. When the

MSML客户端可以使用<destroyconference>元素删除整个会议或删除与会议相关的最后一个混音器来终止会议。媒体服务器也可以根据创建会议时指定的条件自动终止会议。当

conference is deleted, any remaining participants will have their associated SIP dialogs left unchanged or deleted based on the value of the "term" attribute specified when the conference was created.

如果会议被删除,则任何剩余的参与者将保持其关联的SIP对话框不变,或根据创建会议时指定的“term”属性的值将其删除。

8.2. Media Streams
8.2. 媒体流

Objects have at least one media input and output for each type of media that they support. Each object class defines the number of input and output objects of that class support. Media streams are created when objects are joined, either explicitly using <join> or implicitly when dialogs are created using <dialogstart>. Dialog creation has two stages, allocating and configuring the resources required for the dialog instance, and implicitly joining those resources to the dialog target during the dialog execution. Refer to the MSML Dialog Base Package.

对象支持的每种媒体类型至少有一个媒体输入和输出。每个对象类定义该类支持的输入和输出对象的数量。媒体流是在对象连接时创建的,可以显式使用<join>创建,也可以隐式使用<dialogstart>创建对话框。对话框创建分为两个阶段,分配和配置对话框实例所需的资源,并在对话框执行期间将这些资源隐式连接到对话框目标。请参阅MSML对话框基本软件包。

A join operation by default creates a bidirectional audio stream between two objects. Video and unidirectional streams may also be created. A media stream is created by connecting the output from one object to the input of another object and vice versa (assuming a bidirectional or full-duplex join).

默认情况下,联接操作在两个对象之间创建双向音频流。还可以创建视频和单向流。通过将一个对象的输出连接到另一个对象的输入来创建媒体流,反之亦然(假设双向或全双工连接)。

Many objects may only support a single input for each type of media. Within this specification, only the conference object class supports an arbitrary number of inputs. When a stream is requested to be created to an object that already has a stream of the same type connected to its single input, the result of the request depends upon the type of the media stream.

对于每种类型的介质,许多对象可能只支持一个输入。在此规范中,只有conference对象类支持任意数量的输入。当请求为已将相同类型的流连接到其单个输入的对象创建流时,请求的结果取决于媒体流的类型。

Audio mixing is done by summing audio signals. Automatically mixing audio streams has common and straightforward applications. For example, the ability to bridge two streams allows for the easy creation of simple three-way calls or to bridge private announcements with a (whispered) conference mix for an individual participant. In the case of general conferences, however, an MSML client SHOULD create an audio conference and then join participants to the conference. Conference mixers SHOULD subtract the audio of each participant from the mix so that they do not hear themselves.

音频混合是通过对音频信号求和来完成的。自动混合音频流具有常见且简单的应用。例如,桥接两条流的功能允许轻松创建简单的三方通话,或者为单个参与者通过(耳语)会议组合桥接私人公告。但是,对于一般会议,MSML客户端应创建一个音频会议,然后加入与会者。会议混音器应该从混音中减去每个参与者的音频,这样他们就听不到自己的声音了。

A media server receiving a request that requires joining an audio stream to the single audio input of an object that already has an audio stream connected SHOULD automatically bridge the new stream with the existing stream, creating a mix of the two audio streams. The maximum number of streams that may be bridged in this manner is implementation specific. It is RECOMMENDED that a media server support bridging at least two streams. A media server that cannot bridge a new stream with any existing streams MUST fail the operation requesting the join.

接收到请求的媒体服务器需要将音频流连接到已连接音频流的对象的单个音频输入,该请求应自动将新流与现有流桥接,从而创建两个音频流的混合。可以以这种方式桥接的最大流数是特定于实现的。建议媒体服务器支持桥接至少两个流。无法将新流与任何现有流桥接的媒体服务器必须使请求加入的操作失败。

Unlike audio mixing, there are many different ways that two video streams may be combined and presented. For example, they may be presented side by side in separate panes, picture in picture, or in a single pane that displays only a single stream at a time based on a heuristic such as active speaker. Each of these options creates a very different presentation and requires significantly different media resources.

与音频混音不同,有许多不同的方式可以组合和呈现两个视频流。例如,它们可以在单独的窗格中、画中画中或在单个窗格中并排呈现,该窗格基于诸如活动说话人之类的启发式每次仅显示单个流。这些选项中的每一个都会创建一个非常不同的演示文稿,并且需要显著不同的媒体资源。

A join operation does not describe how a new stream can be combined with an existing stream. Therefore, automatic bridging of video is not supported. A media server MUST fail requests to join a new video stream to an object that only supports a single video input and already has a video stream connected to that input. For an object to have multiple video streams joined to it, the object itself must be capable in supporting multiple video streams. Conference objects can support multiple video streams and provide a way to specify the mixing presentation for the video streams.

联接操作不描述如何将新流与现有流组合。因此,不支持视频的自动桥接。媒体服务器必须使将新视频流加入到仅支持单个视频输入且已将视频流连接到该输入的对象的请求失败。要使一个对象加入多个视频流,该对象本身必须能够支持多个视频流。会议对象可以支持多个视频流,并提供一种为视频流指定混合表示的方法。

A media server MUST NOT establish any streams unless the media server is able to create all the streams requested by an operation. Streams are only able to be created if both objects support a media type and at least one of the following conditions is true:

除非媒体服务器能够创建操作请求的所有流,否则媒体服务器不得建立任何流。只有当两个对象都支持媒体类型且至少满足以下条件之一时,才能创建流:

1. Each object that is to receive media is not already receiving a stream of that type.

1. 要接收媒体的每个对象尚未接收该类型的流。

2. Any object that is to receive media and is already receiving a stream of that type supports receiving an additional stream of that type. The only class of objects defined in this specification that directly support receiving multiple streams of the same type are conferences.

2. 任何要接收媒体且已经接收该类型流的对象都支持接收该类型的附加流。本规范中定义的唯一一类直接支持接收多个相同类型流的对象是会议。

3. The media server is able to automatically bridge media streams for an object that is to receive media and that is already receiving a stream of the requested type. The only type of media defined in this specification that MAY be automatically bridged is audio.

3. 媒体服务器能够自动桥接要接收媒体且已接收请求类型流的对象的媒体流。本规范中定义的唯一可自动桥接的媒体类型是音频。

The directionality of media streams associated with a connection is modeled independently from what SDP [n9] allows for the corresponding RTP [i3] sessions. Media servers MUST respect the SDP in what they actually transmit but MUST NOT allow the SDP to affect the directionality when joining streams internal to the media server.

与连接相关联的媒体流的方向性建模独立于SDP[n9]允许相应RTP[i3]会话的内容。媒体服务器在实际传输内容上必须尊重SDP,但在连接媒体服务器内部的流时,不得允许SDP影响方向性。

8.3. <createconference>
8.3. <createconference>

<createconference> is used to allocate and configure the media mixing resources for conferences. A description of the properties for each type of media mix required for the conference is defined within the content of the <createconference> element. Mixer descriptions are described in Audio Mix and Video Layout sections. When no mixer descriptions are specified, the default behavior MUST be equivalent to inclusion of a single <audiomix>.

<createconference>用于为会议分配和配置媒体混合资源。在<createconference>元素的内容中定义了会议所需的每种媒体混合类型的属性描述。混音器的描述在音频混音和视频布局部分中介绍。未指定混音器说明时,默认行为必须等同于包含单个<audiomix>。

Clients can request that a media server automatically delete a conference when a specified condition occurs by using the "deletewhen" attribute. A value of "nomedia" indicates that the conference MUST be deleted when no participants remain in the conference. When this occurs, an "msml.conf.nomedia" event MUST be notified to the MSML client. A value of "nocontrol" indicates that the conference MUST be deleted when the SIP [n1] dialog that carries the <createconference> element is terminated. When this occurs, a media server MUST terminate all participant dialogs by sending a BYE for their associated SIP dialog. A value of "never" MUST leave the ability to delete a conference under the control of the MSML client.

客户端可以使用“deletewhen”属性请求媒体服务器在出现指定条件时自动删除会议。值“nomedia”表示当没有与会者留在会议中时,必须删除会议。发生这种情况时,必须向msml客户端通知“msml.conf.nomedia”事件。值“nocontrol”表示当承载<createconference>元素的SIP[n1]对话框终止时,必须删除会议。当发生这种情况时,媒体服务器必须通过发送相关SIP对话的BYE来终止所有参与者对话。值“never”必须使删除会议的功能由MSML客户端控制。

Attributes:

属性:

name: the instance name of the conference. If the attribute is not present, the media server MUST assign a globally unique name for the conference. If the attribute is present but the name is already in use, an error (432) will result and MSML document execution MUST stop. Events that the conference generates use this name as the value of their "id" attribute (see section 7.4 (<event>)).

名称:会议的实例名称。如果该属性不存在,则媒体服务器必须为会议分配一个全局唯一的名称。如果属性存在,但名称已在使用中,将导致错误(432),MSML文档执行必须停止。会议生成的事件使用此名称作为其“id”属性的值(请参阅第7.4节(<event>)。

deletewhen: defines whether a media server should automatically delete the conference. Possible values are "nomedia", "nocontrol", and "never". Default is "nomedia".

deletewhen:定义媒体服务器是否应自动删除会议。可能的值为“nomedia”、“nocontrol”和“never”。默认值为“nomedia”。

term: when true, the media server MUST send a BYE request on all SIP dialogs still associated with the conference when the conference is deleted. Setting term equal to false allows clients to start dialogs on connections once the conference has completed. Default is "true".

术语:如果为true,则删除会议时,媒体服务器必须在所有仍与会议关联的SIP对话框上发送BYE请求。将term equal设置为false允许客户端在会议结束后启动连接对话框。默认值为“true”。

mark: a token that MAY be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all mark attributes within an MSML document should be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有标记属性的值都应该是唯一的。

An example of creating an audio conference is shown below. This conference allows at most two participants to contend to be heard and reports the set of active speakers no more frequently than every 10 seconds.

创建音频会议的示例如下所示。本次会议最多允许两名与会者争相发言,并每10秒报告一组活跃的发言者。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <createconference name="example">
            <audiomix>
               <n-loudest n="3"/>
               <asn ri="10s"/>
            </audiomix>
         </createconference>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <createconference name="example">
            <audiomix>
               <n-loudest n="3"/>
               <asn ri="10s"/>
            </audiomix>
         </createconference>
      </msml>
        
8.3.1. <reserve>
8.3.1. <reserve>

Conference resources may be reserved by including the <reserve> element as a child of <createconference>. <reserve> allows the specification of a set of resources that a media server will reserve for the conference. Any requests for resources beyond those that have been reserved should be honored on a best-effort basis by a media server.

可以通过将<reserve>元素作为<createconference>的子元素来保留会议资源<reserve>允许指定媒体服务器将为会议保留的一组资源。媒体服务器应尽最大努力满足已保留资源以外的任何资源请求。

Attributes:

属性:

required: boolean that specifies whether <createconference> should fail if the requested resources are not available. When set to false, the conference will be created, with no reserved resources, if the complete reservation cannot be honored. Default is "true".

必需:布尔值,指定如果请求的资源不可用,<createconference>是否应失败。如果设置为false,则如果无法执行完整的预订,则将创建没有保留资源的会议。默认值为“true”。

8.3.1.1. <resource>
8.3.1.1. <resource>

The resources to be reserved are defined using <resource>. The contents of these elements describe a resource that is to be reserved. Descriptions are implementation dependent. Media servers that support MSML dialogs may use the elements from that package as the basis for resource descriptions. Each resource element may use the attribute "n" to define the quantity of the resource to reserve.

要保留的资源是使用<resource>定义的。这些元素的内容描述了要保留的资源。描述依赖于实现。支持MSML对话框的媒体服务器可以使用该包中的元素作为资源描述的基础。每个资源元素可以使用属性“n”来定义要保留的资源的数量。

For example, the following creates a conference and reserves two types of resources. One resource element may represent resources that are shared by all participants of the conference, while the other may represent resources that are reserved for each of the expected participants.

例如,下面创建一个会议并保留两种类型的资源。一个资源元素可以表示会议所有参与者共享的资源,而另一个资源元素可以表示为每个预期参与者保留的资源。

Attributes:

属性:

n: number of resources to be reserved. Default is 1.

n:要保留的资源数。默认值为1。

type: specifies whether the resource is to be reserved by each individual participant or reserved as a shared conference resource. Valid values for this attribute are "individual" or "shared". Default is "individual".

类型:指定资源是由每个参与者保留还是作为共享会议资源保留。此属性的有效值为“单个”或“共享”。默认为“个人”。

      <createconference>
         <reserve>
            <resource n="20">
              <!--description of resources used by each participant-->
            </resource>
            <resource n="2" type="shared">
              <!--description of the shared conference resources-->
            </resource>
         </reserve>
      </createconference>
        
      <createconference>
         <reserve>
            <resource n="20">
              <!--description of resources used by each participant-->
            </resource>
            <resource n="2" type="shared">
              <!--description of the shared conference resources-->
            </resource>
         </reserve>
      </createconference>
        
8.4. <modifyconference>
8.4. <modifyconference>

All of the properties of an audio mix or the presentation of a video mix may be changed during the life of a conference using the <modifyconference> element. Changes to an audio mix are requested by including an <audiomix> element as a child of <modifyconference>. This may also be used to add an audio mixer to the conference if none was previously allocated. Changes to a video presentation are requested by including a <videolayout> element as a child of <modifyconference>. Similar to an audio mixer, this may be used to add a video mixer if none was previously allocated.

在会议期间,可以使用<modifyconference>元素更改音频混音或视频混音的所有属性。通过将<audiomix>元素作为<modifyconference>的子元素来请求对音频混音的更改。如果之前未分配任何音频混音器,也可使用此功能向会议添加音频混音器。通过将<videolayout>元素作为<modifyconference>的子元素来请求对视频演示文稿的更改。与音频混音器类似,如果之前未分配视频混音器,则可使用此功能添加视频混音器。

Mixers are removed by including a mixer description element within <destroyconference/>.

通过在<destroy conference/>中包含混合器描述元素,可以删除混合器。

Features and presentation aspects are enabled/added or modified by including the element(s) that define the feature or presentation aspect within a mixer description. The complete specification of the element must be included just as it would be included when the conference is created. The new definition completely replaces any previous definition that existed. Only things that are defined by elements included in the mixer descriptions are affected. Any existing configuration aspects of a conference, which are not specified within the <modifyconference/> element, MUST maintain their current state in the media server.

通过在混合器描述中包含定义特性或表示方面的元素,可以启用/添加或修改特性和表示方面。必须包括元素的完整规范,就像创建会议时一样。新定义完全替换了以前存在的任何定义。只有由混合器描述中包含的元素定义的内容才会受到影响。未在<modifyconference/>元素中指定的会议的任何现有配置方面必须在媒体服务器中保持其当前状态。

For example, if an MSML client wanted to change the minimum reporting interval for active speaker notification from that shown in the Conference Examples section (<createconference>) it would send the following to the media server:

例如,如果MSML客户端希望更改会议示例部分(<createconference>)中显示的活动扬声器通知的最小报告间隔,它将向媒体服务器发送以下内容:

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <modifyconference id="conf:example">
            <audiomix>
               <asn ri="4"/>
            </audiomix>
         </modifyconference>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <modifyconference id="conf:example">
            <audiomix>
               <asn ri="4"/>
            </audiomix>
         </modifyconference>
      </msml>
        

This would also enable active speaker notification if it had not previously been enabled. The N-loudest mixing is unaffected.

如果以前未启用,这也将启用主动扬声器通知。N-最大混音不受影响。

Multiple elements MAY be included in the mixer descriptions similar to when conferences are created. For example, in a video conference, the video mix description (<videolayout>) could specify that the layout of the video being displayed should change such that the regions currently displaying participants get smaller and new region(s) are created to support additional participants. A media server MUST make all of the requested changes or none of the requested changes.

与创建会议时类似,混音器描述中可能包含多个元素。例如,在视频会议中,视频混合描述(<videolayout>)可以指定正在显示的视频的布局应该改变,以便当前显示参与者的区域变小,并且创建新区域以支持其他参与者。媒体服务器必须进行所有请求的更改,或者不进行任何请求的更改。

Additional examples of modifying conferences are presented in the Conference Examples section.

修改会议的其他示例见会议示例部分。

Attributes:

属性:

id: the identifier for a conference. Wildcards MUST NOT be used. Mandatory.

id:会议的标识符。不得使用通配符。强制性的

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all "mark" attributes within an MSML document SHOULD be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有“标记”属性的值都应该是唯一的。

8.5. <destroyconference>
8.5. <1次会议>

Destroy conference is used to delete mixers or to delete the entire conference and all state and shared resources. When a mixer is removed, all of the streams joined to that mixer are unjoined. When a conference is destroyed, SIP dialogs for any remaining participants MUST be maintained or removed based on the value of the "term" attribute when the conference was created.

销毁会议用于删除混音器或删除整个会议以及所有状态和共享资源。移除混合器后,所有连接到该混合器的流都将断开连接。销毁会议时,必须根据创建会议时“术语”属性的值维护或删除任何剩余参与者的SIP对话框。

When there is no element content, <destroyconference/> deletes the entire conference. Individual mixers are removed by including a mixer description element identifying the mix (or mixes) to be removed as content to <destroyconference/>. <audiomix/> is used remove audio mixers and <videolayout/> is used remove video mixers. When one or more mixer descriptions are specified, then media server MUST only delete the specified mixer and MUST NOT affect any other existing mixers. When <audiomix/> or <videolayout/> is identified for individual removal, other feature aspects of the mix MUST NOT be included. If specified, the media server MUST ignore any such elements. When the last mixer is removed from a conference, a media server MUST remove all conference state, leaving or removing any remaining SIP dialogs as described above.

当没有元素内容时,<destroyconference/>会删除整个会议。单个混合器通过包含混合器描述元素来移除,该元素将要移除的混合物(或多个混合物)标识为<destromeConference/>的内容<audiomix/>用于移除音频混音器,<videolayout/>用于移除视频混音器。当指定一个或多个混音器描述时,媒体服务器必须仅删除指定的混音器,并且不得影响任何其他现有混音器。当确定要单独删除<audiomix/>或<videolayout/>时,不得包括混音的其他功能。如果指定,媒体服务器必须忽略任何此类元素。从会议中删除最后一个混音器时,媒体服务器必须删除所有会议状态,保留或删除任何剩余的SIP对话框,如上所述。

Attributes:

属性:

id: the identifier for a conference. Mandatory.

id:会议的标识符。强制性的

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all "mark" attributes within an MSML document SHOULD be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有“标记”属性的值都应该是唯一的。

8.6. <audiomix>
8.6. <audiomix>

The properties of the overall audio mix are specified using the <audiomix> element.

使用<audiomix>元素指定整个音频混音的属性。

Attributes:

属性:

id: an optional identifier for the audio mix.

id:音频混音的可选标识符。

samplerate: Integer value specifies the sample rate (in Hz) for the audio mixer. Optional, default value of 8000.

samplerate:整数值指定音频混音器的采样率(以Hz为单位)。可选,默认值为8000。

An example of the description for an audio mix is:

音频混音的描述示例如下:

      <audiomix id="mix1">
        <asn ri="10s"/>
        <n-loudest n="3"/>
      </audiomix>
        
      <audiomix id="mix1">
        <asn ri="10s"/>
        <n-loudest n="3"/>
      </audiomix>
        
8.6.1. <n-loudest>
8.6.1. <n-最响亮>

The <n-loudest> element defines that participants contend to be included in the conference mix based upon their audio energy. When the element is not present, all participants are mixed.

<n-loadmost>元素定义与会者根据他们的音频能量争取加入会议混音。当元素不存在时,所有参与者都是混合的。

Attributes:

属性:

n: the number of participants that will be included in the audio mix based upon having the greatest audio energy. Mandatory.

n:基于最大音频能量的音频混合中包含的参与者数量。强制性的

8.6.2. <asn>
8.6.2. <asn>

The <asn> element enables notification of active speakers. Active speakers MUST be notified using the <event> element with an event name of "msml.conf.asn". The namelist of the event consists of the set of active speakers. The name of each item is the string "speaker" with a value of the connection identifier for the connection.

<asn>元素启用活动扬声器的通知。必须使用事件名称为“msml.conf.asn”的<event>元素通知活跃的演讲者。活动的名称列表由一组活动的发言人组成。每个项目的名称都是字符串“speaker”,其值为连接的连接标识符。

Attributes:

属性:

ri: the minimum reporting interval defines the minimum duration of time that must pass before changes to active speakers will be reported. A value of zero disables active speaker notification.

ri:最小报告间隔定义了在报告对活动扬声器的更改之前必须经过的最短持续时间。值为零将禁用活动扬声器通知。

asth: specifies the active speaker threshold (in unit of dBm0). Valid value range is 0 to -96. Optional, default is -96.

ASH:指定活动扬声器阈值(以dBm0为单位)。有效值范围为0到-96。可选,默认值为-96。

An example of an active speaker notification is:

活动扬声器通知的一个示例是:

      <event name="msml.conf.asn" id="conf:example">
         <name>speaker</name>
         <value>conn:hd93tg5hdf</value>
         <name>speaker</name>
         <value>conn:w8cn59vei7</value>
         <name>speaker</name>
         <value>conn:p78fnh6sek47fg</value> </event>
        
      <event name="msml.conf.asn" id="conf:example">
         <name>speaker</name>
         <value>conn:hd93tg5hdf</value>
         <name>speaker</name>
         <value>conn:w8cn59vei7</value>
         <name>speaker</name>
         <value>conn:p78fnh6sek47fg</value> </event>
        
8.7. <videolayout>
8.7. <videolayout>

A video layout is specified using the <videolayout> element. It is used as a container to hold elements that describe all of the properties of a video mix. The parameters of the window that displays the video mix are defined by the <root> element. When the video mix in composed of multiple panes, the location and characteristics of the panes are defined by one or more <region> elements. A <region> element is not required when only a single video stream is displayed at one time and none of the visual attributes of regions are required.

使用<videolayout>元素指定视频布局。它用作一个容器,用于保存描述视频混合的所有属性的元素。显示视频混合的窗口参数由<root>元素定义。当视频混合由多个窗格组成时,窗格的位置和特征由一个或多个<region>元素定义。当一次仅显示单个视频流且不需要区域的任何视觉属性时,不需要<region>元素。

Some regions may be used to display a video stream based on a selection criteria rather than having a video stream of a single participant continuously presented in the region. One such an

一些区域可用于基于选择标准显示视频流,而不是在该区域中连续呈现单个参与者的视频流。这样的人

example is a distance learning lecture where the instructor sees each of the students periodically displayed in a region. When a region is used to display one of a number of streams, it is placed as a child of a <selector> element.

例如,远程教学讲座,讲师可以看到每个学生定期在一个区域中展示。当一个区域用于显示多个流中的一个时,它将作为<selector>元素的子元素放置。

Attributes:

属性:

type: specifies the language used to define the layout. Layouts defined using MSML MUST use the value "text/msml-basic-layout". This is the same convention as defined for the layout package from the W3C SMIL 2.0 specification [i6]. The default when omitted is "text/msml-basic-layout".

类型:指定用于定义布局的语言。使用MSML定义的布局必须使用值“text/MSML basic layout”。这与W3C SMIL 2.0规范[i6]中为布局包定义的约定相同。省略时的默认值为“文本/msml基本布局”。

id: an optional identifier for the video layout.

id: an optional identifier for the video layout.translate error, please retry

8.7.1. <root>
8.7.1. <root>

The <root> element describes the root window or virtual screen in which the conference video mix will be displayed. Simple conferences can display participant video directly within the root window but more complex conferences will use regions for this purpose. Areas of the window which are not used to display video will show the root window background.

<root>元素描述将在其中显示会议视频混合的根窗口或虚拟屏幕。简单的会议可以直接在根窗口中显示参与者视频,但更复杂的会议将使用区域来实现此目的。窗口中不用于显示视频的区域将显示根窗口背景。

All video presentations require a root window. It MUST be present when a video mix is created and it cannot be deleted; however, its attributes MAY be changed using the <modifyconference> element.

所有视频演示都需要根窗口。创建视频混音时,它必须存在,并且不能删除;但是,可以使用<modifyconference>元素更改其属性。

Attributes:

属性:

size: the size of the root window specified as one of the five standard common intermediate formats (e.g., CIF, QCIF).

大小:指定为五种标准通用中间格式(例如CIF、QCIF)之一的根窗口的大小。

backgroundcolor: the color for the root window background defined using the values for the "background-color" property of the CSS2 specification [n10].

backgroundcolor:根窗口背景的颜色,使用CSS2规范[n10]的“背景颜色”属性值定义。

backgroundimage: the URI for an image to be displayed as the root window background. Transparent portions of the image allow the background color to show through.

backgroundimage:显示为根窗口背景的图像的URI。图像的透明部分允许背景色显示出来。

8.7.2. <region>
8.7.2. <region>translate error, please retry

<region> elements define video panes that are used to display participant video streams. Regions are rendered on top of the root window.

<region>元素定义用于显示参与者视频流的视频窗格。区域渲染在根窗口的顶部。

The size of a region is specified relative to the size of the root window using the "relativesize" attribute. Relative sizes are expressed as fractions (e.g., 1/4, 1/3) that preserve the aspect ratio of the original video stream while allowing for efficient scaling implementations.

使用“relativesize”属性相对于根窗口的大小指定区域的大小。相对大小被表示为分数(例如,1/4、1/3),其保持原始视频流的纵横比,同时允许有效的缩放实现。

Regions are located on the root window based on the value of the position attributes "top" and "left". These attributes define the position of the top left corner of the region as an offset from the top left corner of the root window. Their values may be expressed either as a number of pixels or as a percent of the vertical or horizontal dimension of the root window. Percent values are appended with a percent ('%') character. Percent values of "33%" and "67%" should be interpreted as "1/3" and "2/3" to allow easy alignment of regions whose size is expressed relative to the size of the root window.

区域基于位置属性“顶部”和“左侧”的值位于根窗口上。这些属性将区域左上角的位置定义为与根窗口左上角的偏移。它们的值可以表示为像素数或根窗口垂直或水平维度的百分比。百分比值附加了一个百分比(“%”)字符。“33%”和“67%”的百分比值应解释为“1/3”和“2/3”,以便于对齐大小相对于根窗口大小表示的区域。

An example of a video layout with six regions is:

具有六个区域的视频布局示例如下:

      +-------+---+
      |       | 2 |
      |   1   +---+
      |       | 3 |
      +---+---+---+
      | 6 | 5 | 4 |
      +---+---+---+
        
      +-------+---+
      |       | 2 |
      |   1   +---+
      |       | 3 |
      +---+---+---+
      | 6 | 5 | 4 |
      +---+---+---+
        
      <videolayout type="text/msml-basic-layout">
         <root size="CIF"/>
         <region id="1" left="0" top="0" relativesize="2/3"/>
         <region id="2" left="67%" top="0" relativesize="1/3"/>
         <region id="3" left="67%" top="33%" relativesize="1/3">
         <region id="4" left="67%" top="67%" relativesize="1/3"/>
         <region id="5" left="33%" top="67%" relativesize="1/3"/>
         <region id="6" left="0" top="67%" relativesize="1/3"/>
      </videolayout>
        
      <videolayout type="text/msml-basic-layout">
         <root size="CIF"/>
         <region id="1" left="0" top="0" relativesize="2/3"/>
         <region id="2" left="67%" top="0" relativesize="1/3"/>
         <region id="3" left="67%" top="33%" relativesize="1/3">
         <region id="4" left="67%" top="67%" relativesize="1/3"/>
         <region id="5" left="33%" top="67%" relativesize="1/3"/>
         <region id="6" left="0" top="67%" relativesize="1/3"/>
      </videolayout>
        

The area of the root window covered by a region is a function of the region's position and its size. When areas of different regions overlap, they are layered in order of their "priority" attribute. The region with the highest value for the "priority" attribute is below all other regions and will be hidden by overlapping regions. The region with the lowest non-zero value for the "priority" attribute is on top of all other regions and will not be hidden by overlapping regions. The priority attribute may be assigned values between 0 and 1. A value of zero disables the region, freeing any resources associated with the region, and unjoining any video stream displayed in the region.

区域所覆盖的根窗口面积是区域位置及其大小的函数。当不同区域的区域重叠时,它们将按“优先级”属性的顺序分层。“优先级”属性值最高的区域低于所有其他区域,并将被重叠区域隐藏。“优先级”属性具有最低非零值的区域位于所有其他区域的顶部,不会被重叠区域隐藏。优先级属性可以指定0到1之间的值。值为零将禁用该区域,释放与该区域关联的任何资源,并取消连接该区域中显示的任何视频流。

Regions that do not specify a priority will be assigned a priority by a media server when a conference is created. The first region within the <videolayout> element that does not specify a priority will be assigned a priority of one, the second a priority of two, etc. In this way, all regions that do not explicitly specify a priority will be underneath all regions that do specify a priority. As well, within those regions that do not specify a priority, they will be layered from top to bottom, in the order they appear within the <videolayout> element.

创建会议时,媒体服务器将为未指定优先级的区域分配优先级。<videolayout>元素中未指定优先级的第一个区域将被分配一个优先级,第二个区域将被分配两个优先级,以此类推。这样,所有未明确指定优先级的区域将位于所有指定优先级的区域之下。同样,在那些没有指定优先级的区域中,它们将按照它们在<videolayout>元素中出现的顺序从上到下分层。

For example, if a layout was specified as follows:

例如,如果按以下方式指定布局:

      <videolayout>
         <root size="CIF"/>
         <region id="a" ... priority=".3" .../>
         <region id="b" ... />
         <region id="c" ... priority=".2" ...>
         <region id="d" ... />
      </videolayout>
        
      <videolayout>
         <root size="CIF"/>
         <region id="a" ... priority=".3" .../>
         <region id="b" ... />
         <region id="c" ... priority=".2" ...>
         <region id="d" ... />
      </videolayout>
        

Then the regions would be layered, from top to bottom, c,a,b,d.

然后区域将从上到下分层,c、a、b、d。

Portions of regions that extend beyond the root window will be cropped. For example, a layout specified as:

超出根窗口的区域部分将被裁剪。例如,指定为以下内容的布局:

      <videolayout>
         <root size="CIF"/>
         <region id="foo" left="50%" top="50%" relativesize="2/3"/>
      </videolayout>
        
      <videolayout>
         <root size="CIF"/>
         <region id="foo" left="50%" top="50%" relativesize="2/3"/>
      </videolayout>
        

would appear similar to:

看起来类似于:

      +-----------+
      |   root    |
      |background |
      |     +-----+--
      |     |     |//
      |     | foo |//
      +-----+-----+//
            |////////
        
      +-----------+
      |   root    |
      |background |
      |     +-----+--
      |     |     |//
      |     | foo |//
      +-----+-----+//
            |////////
        

Visual attributes are used to define aspects of the visual appearance of individual regions. A border may be defined together with a title and/or logo. Text and logos are displayed as images on top of the region's video, below all regions with a lower priority. The visual attributes are "title", "titletextcolor", "titlebackgroundcolor", "bordercolor", "borderwidth", and "logo".

视觉属性用于定义各个区域视觉外观的各个方面。边框可以与标题和/或徽标一起定义。文本和徽标作为图像显示在区域视频的顶部,低于所有优先级较低的区域。视觉属性为“标题”、“标题ExtColor”、“标题背景颜色”、“边框颜色”、“边框宽度”和“徽标”。

Visual attributes can also be defined for individual streams (Video Stream Properties). When visual attributes are specified as part of both a region and a stream, those associated with the stream MUST take precedence. This allows streams that are chosen for display automatically (Stream Selection) to have proper text and logos displayed. The region visual attributes are displayed when no stream is associated with the region.

还可以为单个流定义视觉属性(视频流属性)。当视觉属性被指定为区域和流的一部分时,与流关联的属性必须优先。这允许选择自动显示的流(流选择)显示正确的文本和徽标。当没有流与区域关联时,将显示区域视觉属性。

Two other attributes associated with a region, "blank" and "freeze", define the state of the video displayed in the region. When the blank or freeze attribute is assigned the value "true", then the media server MUST display the region either as a blank region, or the video image frozen at the last received frame.

与区域关联的另外两个属性“blank”和“freeze”定义了区域中显示的视频的状态。当空白或冻结属性被赋值为“true”时,媒体服务器必须将该区域显示为空白区域,或者冻结在最后接收到的帧的视频图像。

These attributes are specified for a region and not allowed for streams because that appears to be the common use case. Applying them to streams would allow only that stream to be affected within a selector while other streams continue to display normally. Except for personal mixing scenarios, the same effect can be achieved by having the participant mute their own transmission to the media server.

这些属性是为区域指定的,不允许用于流,因为这似乎是常见的用例。将它们应用于流将只允许该流在选择器中受到影响,而其他流继续正常显示。除了个人混音场景外,让参与者将自己的传输静音到媒体服务器也可以达到同样的效果。

Attributes: associated with each region:

属性:与每个区域关联:

id: a name that can be used to refer to the region.

id:可用于引用区域的名称。

left: the position of the region from the left side of the root window.

左:从根窗口左侧开始的区域位置。

top: the position of the region from the top of the root window.

顶部:区域相对于根窗口顶部的位置。

relativesize: the size of the region expressed as a fraction of the root window size.

relativesize:以根窗口大小的一部分表示的区域大小。

priority: a number between 0 and 1 that is used to define the precedence when rendering overlapping regions. A value of zero disables the region.

优先级:介于0和1之间的数字,用于定义渲染重叠区域时的优先级。值为零将禁用该区域。

title: text to be displayed as the title for the region

标题:显示为区域标题的文本

titletextcolor: the color of the text

titletextcolor:文本的颜色

titlebackgroundcolor: the color of the text background

titlebackgroundcolor:文本背景的颜色

bordercolor: the color of the region border

bordercolor:区域边界的颜色

borderwidth: the width of the region border

borderwidth:区域边界的宽度

logo: the URI of an image file to be displayed

logo:要显示的图像文件的URI

freeze: a boolean value, with a default of "false", that defines whether the video image should be frozen at the currently displayed frame

冻结:一个布尔值,默认值为“false”,用于定义是否应在当前显示的帧冻结视频图像

blank: a boolean value, with a default of "false", that defines whether the region should display black instead of the associated video stream

blank:一个布尔值,默认值为“false”,用于定义区域是否应显示黑色而不是关联的视频流

8.7.3. <selector>
8.7.3. <selector>

It is often desired that one of several video streams be automatically selected to be displayed. The <selector> element is used to define the selection criteria and its associated parameters. The selection algorithm is specified by the "method" attribute. Currently defined selection methods allow for voice activated switching and to iterate sequentially through the set of associated video streams.

通常希望自动选择几个视频流中的一个来显示。元素用于定义选择标准及其相关参数。选择算法由“方法”属性指定。当前定义的选择方法允许语音激活切换,并在相关视频流集合中顺序迭代。

The regions that will display the selected video stream are placed as child elements of the <selector> element. Including regions within a <selector> element does not affect their layout with respect to regions not subject to the selection. For simple video conferences that display the video directly in the root window, the <root> element can be placed as a child of <selector>. Region elements MUST NOT be used in this case.

将显示所选视频流的区域作为<selector>元素的子元素放置。在<selector>元素中包含区域不会影响它们相对于不受选择约束的区域的布局。对于直接在根窗口中显示视频的简单视频会议,<root>元素可以作为<selector>的子元素放置。在这种情况下,不能使用区域元素。

For example, below is a common video layout that allows the video stream from the currently active speaker to be displayed in the large region ("1") at the top left of the layout while the streams from five other participants are displayed in regions located at the layout periphery.

例如,下面是一个常见的视频布局,它允许来自当前活动扬声器的视频流显示在布局左上角的大区域(“1”)中,而来自五个其他参与者的视频流显示在布局外围的区域中。

      +-------+---+
      |       | 2 |
      |   1   +---+
      |       | 3 |
      +---+---+---+
      | 6 | 5 | 4 |
      +---+---+---+
        
      +-------+---+
      |       | 2 |
      |   1   +---+
      |       | 3 |
      +---+---+---+
      | 6 | 5 | 4 |
      +---+---+---+
        
      <videolayout type="text/msml-basic-layout">
         <root size="CIF"/>
         <selector id="switch" method="vas">
            <region id="1" left="0" top="0" relativesize="2/3"/>
         </selector>
         <region id="2" left="67%" top="0" relativesize="1/3"/>
         <region id="3" left="67%" top="33%" relativesize="1/3">
         <region id="4" left="67%" top="67%" relativesize="1/3"/>
         <region id="5" left="33%" top="67%" relativesize="1/3"/>
         <region id="6" left="0" top="67%" relativesize="1/3"/>
      </videolayout>
        
      <videolayout type="text/msml-basic-layout">
         <root size="CIF"/>
         <selector id="switch" method="vas">
            <region id="1" left="0" top="0" relativesize="2/3"/>
         </selector>
         <region id="2" left="67%" top="0" relativesize="1/3"/>
         <region id="3" left="67%" top="33%" relativesize="1/3">
         <region id="4" left="67%" top="67%" relativesize="1/3"/>
         <region id="5" left="33%" top="67%" relativesize="1/3"/>
         <region id="6" left="0" top="67%" relativesize="1/3"/>
      </videolayout>
        

All selector methods must be defined so that they work if only a single region is a child of the selector. Selector methods that support more than one child region MUST specify how the method works across multiple regions. Media server implementations MAY support only a single region for methods that are defined to allow multiple regions.

必须定义所有选择器方法,以便只有一个区域是选择器的子区域时,这些方法才能工作。支持多个子区域的选择器方法必须指定该方法如何跨多个区域工作。对于定义为允许多个区域的方法,媒体服务器实现可能只支持单个区域。

The selector or region for a participant's video is defined using the "display" attribute of <stream> during a join operation. Specifying a selector allows the stream to be displayed according to the criteria defined by the selector method. Specifying a region supports continuous presence display of participants. Some streams may be joined with both a selector and a region. In this case, the value of <blankothers> attribute defines whether the streams associated with a continuous presence region should be blanked when the stream is selected for display in one of the selector regions.

参与者视频的选择器或区域是在连接操作期间使用<stream>的“display”属性定义的。指定选择器允许根据选择器方法定义的条件显示流。指定区域支持参与者的连续状态显示。一些流可以通过选择器和区域连接。在这种情况下,<blankothers>属性的值定义了当选择流在其中一个选择器区域中显示时,与连续存在区域相关联的流是否应被消隐。

Attributes: common to all selector methods are:

属性:所有选择器方法通用的属性包括:

id: a name that can be used to refer to the selector.

id:可用于引用选择器的名称。

method: the name of the method used to select the video stream. A value of "vas" (see the following section, Voice Activated Switching) MAY be specified.

方法:用于选择视频流的方法的名称。可指定“vas”值(见下一节“声控开关”)。

status: specifies whether the selector is "active" or "disabled".

状态:指定选择器是“活动”还是“禁用”。

blankothers: when "true", video streams that are also displayed in continuous presence regions will have the continuous presence regions blanked when the stream is displayed in a selection region.

blankothers:当“true”时,也在连续存在区域中显示的视频流在选择区域中显示时将具有空白的连续存在区域。

8.7.3.1. Voice Activated Switching ("vas")
8.7.3.1. 语音激活交换(“vas”)

Voice activated switching (VAS) is used to display the video stream that correlates with the participant who is currently speaking. It is specified using a selector method value of "vas".

语音激活交换(VAS)用于显示与当前正在讲话的参与者相关的视频流。它是使用选择器方法值“vas”指定的。

If the video stream associated with the active speaker is not currently displayed in a selection region, then it replaces the video in the region that is displaying the video of the speaker that was least recently active. If the video of the active speaker is currently displayed in a selection region, then there is no change to any region. When VAS is applied to a single region, this has the effect that the current speaker is displayed in that region.

如果与活动扬声器相关联的视频流当前未显示在选择区域中,则它将替换显示最近活动最少的扬声器视频的区域中的视频。如果活动扬声器的视频当前显示在选择区域中,则任何区域都没有变化。当VAS应用于单个区域时,其效果是当前扬声器显示在该区域中。

Attributes:

属性:

si: switching interval is the minimum period of time that must elapse before allowing the video to switch to the active speaker.

si:切换间隔是允许视频切换到活动扬声器之前必须经过的最短时间段。

speakersees: defines whether the active speaker sees the "current" speaker (themselves) or the "previous" speaker.

speakersees:定义活动说话人是看到“当前”说话人(自己)还是“上一个”说话人。

8.8. <join>
8.8. <join>

<join> is used to create one or more streams between two independent objects. Streams may be audio or video and may be bidirectional or unidirectional. A bidirectional stream is implicitly composed of two unidirectional streams that can be manipulated independently. The streams to be established are specified by <stream> elements (section <stream>) as the content of <join>.

<join>用于在两个独立对象之间创建一个或多个流。流可以是音频或视频,并且可以是双向的或单向的。双向流隐式地由两个可独立操作的单向流组成。要建立的流由<stream>元素(部分<stream>)指定为<join>的内容。

Without any content, <join> by default establishes a bidirectional audio stream. When only a stream of a single type has previously been created between two objects, or when only a unidirectional stream exists, <join> can be used to add a stream of another media type or make the stream bidirectional by including the necessary <stream> elements. Bidirectional streams are made unidirectional by using <unjoin> (section <unjoin>) to remove the unidirectional stream for the direction that is no longer required.

没有任何内容,<join>默认情况下建立双向音频流。当之前在两个对象之间仅创建了单一类型的流时,或当仅存在单向流时,<join>可用于添加另一媒体类型的流,或通过包含必要的<stream>元素使流双向。通过使用<unjoin>(部分<unjoin>)删除不再需要的方向的单向流,可使双向流成为单向流。

In addition to defining the media type and direction of streams, <stream> elements are also used to establish the properties of streams, such as gain, voice masking, or tone clamping of audio streams, or labels and other visual characteristics of video streams. Properties are often defined asymmetrically for a single direction of a stream. Creating a bidirectional stream requires two <stream> elements within the <join>, one for each direction, if one direction is to have different properties from the other direction.

除了定义流的媒体类型和方向外,<stream>元素还用于建立流的属性,例如音频流的增益、语音掩蔽或音调箝位,或者视频流的标签和其他视觉特征。对于流的单个方向,特性的定义通常是不对称的。创建双向流需要<join>中的两个<stream>元素,每个方向一个,如果一个方向与另一个方向具有不同的属性。

If a media server can provide services using both compressed or uncompressed media, the MSML client may need to distinguish within requests which format is to be used. When compressed streams are created, both objects must use the same media format or an error response (450) is generated.

如果媒体服务器可以使用压缩或未压缩的媒体提供服务,则MSML客户端可能需要在请求中区分要使用的格式。创建压缩流时,两个对象必须使用相同的媒体格式,否则会生成错误响应(450)。

Attributes:

属性:

id1: an identifier of either a connection or conference. Wildcards MUST NOT be used. Mandatory. Any other object class results in a 440 error.

id1:连接或会议的标识符。不得使用通配符。强制性的任何其他对象类都会导致440错误。

id2: an identifier of either a connection or conference. Wildcards MUST NOT be used. Mandatory. Any other object class results in a 440 error.

id2:连接或会议的标识符。不得使用通配符。强制性的任何其他对象类都会导致440错误。

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all mark attributes within an MSML document SHOULD be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有标记属性的值都应该是唯一的。

For example, consider a call center coaching scenario where a supervisor can listen to the conversation between an agent and a customer and provide hints to the agent, which are not heard by the customer. One join establishes a stream between the agent and the customer and another join establishes a stream between the agent and the supervisor. A third join is used to establish a half-duplex stream from the customer to the supervisor. The media server automatically bridges the media streams from the customer and the supervisor for the agent, and from the customer and the agent for the supervisor.

例如,考虑一个呼叫中心辅导场景,其中监督者可以监听代理和客户之间的对话,并向代理提供提示,这是客户没有听到的。一个连接在代理和客户之间建立流,另一个连接在代理和主管之间建立流。第三个连接用于建立从客户到主管的半双工流。媒体服务器自动将来自客户和主管的媒体流连接到代理,并将来自客户和代理的媒体流连接到主管。

Assuming the following connections, each with a single audio stream:

假设以下连接,每个连接都有一个音频流:

conn:supervisor

控制室:主管

conn:agent

康涅狄格州:特工

conn:customer

康涅狄格州:顾客

The following would create the media flows previously described:

以下内容将创建前面描述的媒体流:

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <join id1="conn:supervisor" id2="conn:agent"/>
         <join id1="conn:agent" id2="conn:customer"/>
         <join id1="conn:supervisor" id2="conn:customer">
            <stream media="audio" dir="to-id1"/>
         </join>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <join id1="conn:supervisor" id2="conn:agent"/>
         <join id1="conn:agent" id2="conn:customer"/>
         <join id1="conn:supervisor" id2="conn:customer">
            <stream media="audio" dir="to-id1"/>
         </join>
      </msml>
        

The following example shows joining a participant to a multimedia conference. It assumes that the conference has a video presentation region named "topright". The "display" attribute is explained in the section Video Stream Properties.

以下示例显示如何将参与者加入多媒体会议。它假定会议有一个名为“topright”的视频演示区域。“显示”属性在“视频流属性”一节中解释。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <join id1="conn:hd83t5hf7g3" id2="conf:example">
            <stream media="audio"/>
            <stream media="video" dir="from-id1" display="topright"/>
            <stream media="video" dir="to-id1"/>
         </join>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <join id1="conn:hd83t5hf7g3" id2="conf:example">
            <stream media="audio"/>
            <stream media="video" dir="from-id1" display="topright"/>
            <stream media="video" dir="to-id1"/>
         </join>
      </msml>
        
8.9. <modifystream>
8.9. <modifystream>

Media streams can have different properties such as the gain for an audio stream or a visual label for a video stream. These properties are specified as the content of <stream> elements (section <stream>). <modifystream> is used to change the properties of a stream by including one or more <stream> elements that are to have their properties changed.

媒体流可以具有不同的属性,例如音频流的增益或视频流的视觉标签。这些属性被指定为<stream>元素的内容(部分<stream>)<modifystream>用于通过包含一个或多个将更改其属性的<stream>元素来更改流的属性。

Stream properties MUST be set as specified by the element <stream> as a child element of <modifystream> element. Any properties not included in the <stream> element when modifying a stream MUST remain unchanged. Setting a property for only one direction of a bidirectional stream MUST NOT affect the other direction. The directionality of streams can be changed by issuing an <unjoin> followed by a <join>. Any streams that exist between the two objects that are not included within <modifystream> MUST NOT be affected.

流属性必须设置为元素<Stream>指定的<modifystream>元素的子元素。修改流时,<stream>元素中未包含的任何属性必须保持不变。仅为双向流的一个方向设置属性不得影响另一个方向。可以通过发出一个<unjoin>后跟一个<join>来更改流的方向性。两个对象之间不包含在<modifystream>中的任何流都不得受到影响。

Attributes:

属性:

id1: an identifier of either a conference or a connection. The instance name MUST NOT contain a wildcard if "id2" contains a wildcard. Mandatory.

id1:会议或连接的标识符。如果“id2”包含通配符,则实例名称不得包含通配符。强制性的

id2: an identifier of either a conference or a connection. The instance name MUST NOT contain a wildcard if "id1" contains a wildcard. Mandatory.

id2:会议或连接的标识符。如果“id1”包含通配符,则实例名称不得包含通配符。强制性的

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all mark attributes within an MSML document is RECOMMENDED to be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,建议MSML文档中所有标记属性的值都是唯一的。

8.10. <unjoin>
8.10. <unjoin>

Unjoin removes one or more media streams between two objects. In the absence of any content in the <stream> element, all media streams between the objects MUST be removed. Individual streams may be removed by specifying them using <stream> elements, while the unspecified streams MUST NOT be removed. A bidirectional stream is changed to a unidirectional stream by unjoining the direction that is no longer required, using the <unjoin> element. Operator elements MUST NOT be specified within <stream> elements when streams are being unjoined using the <unjoin> element. Any specified stream operators MUST be ignored.

取消连接删除两个对象之间的一个或多个媒体流。如果<stream>元素中没有任何内容,则必须删除对象之间的所有媒体流。可以通过使用<stream>元素指定单个流来删除它们,而不能删除未指定的流。通过使用<unjoin>元素取消连接不再需要的方向,将双向流更改为单向流。当使用<unjoin>元素取消连接流时,不能在<stream>元素中指定运算符元素。必须忽略任何指定的流运算符。

<unjoin> and <join> may be used together to move a media stream, such as from a main conference to a sidebar conference.

<unjoin>和<join>可一起用于移动媒体流,例如从主会议移动到侧栏会议。

Attributes:

属性:

id1: an identifier of either a conference or a connection. The instance name MUST NOT contain a wildcard if "id2" contains a wildcard. Mandatory.

id1:会议或连接的标识符。如果“id2”包含通配符,则实例名称不得包含通配符。强制性的

id2: an identifier of either a conference or a connection. The instance name MUST NOT contain a wildcard if "id1" contains a wildcard. Mandatory.

id2:会议或连接的标识符。如果“id1”包含通配符,则实例名称不得包含通配符。强制性的

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all mark attributes within an MSML document SHOULD be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有标记属性的值都应该是唯一的。

The following removes a participant from a conference and plays a leave tone for the remaining participants in the conference.

下面将从会议中删除一个参与者,并为会议中的其余参与者播放“离开”音。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <unjoin id1="conn:jd73ht89sf489f" id2="conf:1"/>
         <dialogstart target="conf:1" type="application/moml+xml">
            <play>
               <audio uri="file://leave_tone.wav"/>
            </play>
         </dialogstart>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <unjoin id1="conn:jd73ht89sf489f" id2="conf:1"/>
         <dialogstart target="conf:1" type="application/moml+xml">
            <play>
               <audio uri="file://leave_tone.wav"/>
            </play>
         </dialogstart>
      </msml>
        
8.11. <monitor>
8.11. <monitor>

Monitor is a specialized unidirectional join that copies the media that is destined for a connection object. One example of the use for <monitor> may be quality monitoring within a conference. The media stream may be removed using the <unjoin> element (see the section <unjoin>).

Monitor是一种专用的单向连接,用于复制指向连接对象的介质。使用<monitor>的一个示例可能是会议内的质量监控。可以使用<unjoin>元素删除媒体流(请参阅<unjoin>一节)。

Attributes:

属性:

id1: an identifier of the connection to be monitored. Mandatory. Any other object class results in a 440 error. Wildcards MUST NOT be used.

id1:要监视的连接的标识符。强制性的任何其他对象类都会导致440错误。不得使用通配符。

id2: an identifier of the object that is to receive the copy of the media destined to id1. id2 may be a connection or a conference. Mandatory. Any other object class results in a 440 error. Wildcards MUST NOT be used.

id2:要接收发送到id1的媒体副本的对象的标识符。id2可以是连接或会议。强制性的任何其他对象类都会导致440错误。不得使用通配符。

compressed: "true" or "false". Specifies whether the join should occur before or after compression. When "true", id2 must be a connection using the same media format as id1 or an error response (450) is generated. Default is "false".

压缩:“真”或“假”。指定联接应在压缩之前还是之后发生。当“true”时,id2必须是使用与id1相同的媒体格式的连接,否则会生成错误响应(450)。默认值为“false”。

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all mark attributes within an MSML document SHOULD be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有标记属性的值都应该是唯一的。

8.12. <stream>
8.12. <stream>

Individual streams are specified using the <stream> element. They MAY be included as a child element in any of the stream manipulation elements <join>, <modifystream>, or <unjoin>.

使用<stream>元素指定各个流。它们可以作为子元素包含在任何流操作元素<join>、<modifystream>或<unjoin>中。

The type of the stream is specified using a "media" attribute that uses values corresponding to the top-level MIME media types as defined in RFC 2046 [i7]. This specification only addresses audio and video media. Other specifications may define procedures for additional types.

流的类型使用“媒体”属性指定,该属性使用与RFC 2046[i7]中定义的顶级MIME媒体类型对应的值。本规范仅针对音频和视频媒体。其他规范可能定义其他类型的程序。

A bidirectional stream is identified when no direction attribute "dir" is present. A unidirectional stream is identified when a direction attribute is present. The "dir" attribute MUST have a value of "from-id1" or "to-id1" depending on the required direction. These values are relative to the identifier attributes of the parent element.

当不存在方向属性“dir”时,将标识双向流。当存在方向属性时,将标识单向流。“dir”属性的值必须为“from-id1”或“to-id1”,具体取决于所需的方向。这些值与父元素的标识符属性相关。

The compressed attribute is used to distinguish the compressed nature of the stream when necessary. It is implementation specific what is used when the attribute is not present. Joining compressed streams acts much like an RTP [i3] relay.

compressed属性用于在必要时区分流的压缩性质。属性不存在时使用的是特定于实现的内容。连接压缩流的行为很像RTP[i3]中继。

The properties of the media streams are specified as the content of <stream> elements when the element is used as a child of <join> or <modifystream>. Stream elements MUST NOT have any content when they are used as a child of <unjoin> to identify specific streams to remove.

当元素用作<join>或<modifystream>的子元素时,媒体流的属性被指定为<stream>元素的内容。当流元素用作<unjoin>的子元素以标识要删除的特定流时,它们不得包含任何内容。

Some properties are defined within MSML as additional attributes or child elements of <stream> that are media type specific. Ones for audio streams and video streams are defined in the following two sub-sections. Operators, viewed as properties of the media stream, MAY be specified as child elements of the <stream> element.

某些属性在MSML中定义为媒体类型特定的附加属性或<stream>的子元素。音频流和视频流的定义见以下两小节。被视为媒体流属性的操作符可以被指定为<stream>元素的子元素。

Attributes:

属性:

media: "audio" or video". Mandatory

媒体:“音频”或“视频”。必填项

dir: "from-id1" or "to-id1".

目录:“from-id1”或“to-id1”。

compressed: "true" or "false". Specifies whether the stream uses compressed media. Default is implementation specific.

压缩:“真”或“假”。指定流是否使用压缩媒体。默认值是特定于实现的。

8.12.1. Audio Stream Properties
8.12.1. 音频流属性

Audio mixes can be specified to only mix the N-loudest participants. However, there may be some "preferred" participants that are always able to contribute. When audio streams are joined to a conference that uses N-loudest audio mixing, preferred streams need to be identified.

音频混音可以指定为仅混音N个声音最大的参与者。然而,可能有一些“首选”参与者总是能够做出贡献。当音频流加入到使用N个最大声音混音的会议时,需要确定首选流。

A preferred audio stream is identified using the "preferred" attribute. The "preferred" attribute MAY be used for an audio stream that is input to a conference and MUST NOT be used for other streams.

使用“首选”属性标识首选音频流。“首选”属性可用于输入到会议的音频流,且不得用于其他流。

Additional attributes of the <stream> element for audio streams are:

音频流的<stream>元素的其他属性包括:

Attributes:

属性:

preferred: a boolean value that defines whether the stream does not contend for N-loudest mixing. A value of "true" means that the stream MUST always be mixed while a value of "false" means that the stream MAY contend for mixing into a conference when N-loudest mixing is enabled. Default is "false".

首选:一个布尔值,定义流是否不争用N个最大混音。值“true”表示流必须始终混合,而值“false”表示流可能在启用N最大混音时争混入会议。默认值为“false”。

There are two elements that can be used to change the characteristics of an audio stream as defined below.

有两个元素可用于更改音频流的特性,如下所述。

8.12.1.1. <gain>
8.12.1.1. <增益>

The <gain> element may be used to adjust the volume of an audio media stream. It may be set to a specific gain amount, to automatically adjust the gain to a desired target level, or to mute the stream.

<gain>元素可用于调整音频媒体流的音量。可将其设置为特定增益量,以自动将增益调整至所需目标水平,或使流静音。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the gain primitive.

id:可选标识符,可在别处引用,用于向增益原语发送事件。

amt: a specific gain to apply specified in dB or the string "mute" indicating that the stream should be muted. This attribute MUST NOT be used if "agc" is present.

amt:要应用的特定增益,以dB或字符串“mute”表示流应静音。如果存在“agc”,则不得使用此属性。

agc: boolean indicating whether automatic gain control is to be used. This attribute MUST NOT be used if "amt" is present.

agc:表示是否使用自动增益控制的布尔值。如果存在“金额”,则不得使用此属性。

tgtlvl: the desired target level for AGC specified in dBm0. This attribute MUST be specified if "agc" is set to "true". This attribute MUST NOT be specified if "agc" is not present.

tgtlvl:在dBm0中指定的AGC所需目标级别。如果“agc”设置为“true”,则必须指定此属性。如果“agc”不存在,则不得指定此属性。

maxgain: the maximum gain that AGC may apply. Maxgain is specified in dB. This attribute MUST be used if "agc" is present and MUST NOT be used when "agc" is not present.

maxgain:AGC可能应用的最大增益。Maxgain以dB为单位指定。如果存在“agc”,则必须使用此属性;如果不存在“agc”,则不得使用此属性。

8.12.1.2. <clamp>
8.12.1.2. <clamp>

The <clamp> element is used to filter tones and/or audio-band dtmf from a media stream.

<clamp>元件用于过滤媒体流中的音调和/或音频带dtmf。

Attributes:

属性:

dtmf: boolean indicating whether DTMF tones should be removed.

dtmf:布尔值,指示是否应删除dtmf音调。

tone: boolean indicating whether other tones should be removed.

音调:布尔值,指示是否应删除其他音调。

8.12.2. Video Stream Properties
8.12.2. 视频流属性

Video mixes define a presentation that may have multiple regions, such as a quad-split. Each region displays the video from one or more participants. When video streams are joined to such a conference, the region that will display the video needs to be specified as part of the join operation.

视频混合定义可能具有多个区域的演示文稿,例如四边形分割。每个区域显示来自一个或多个参与者的视频。当视频流加入此类会议时,需要将显示视频的区域指定为加入操作的一部分。

The region that will display the video is specified using the "display" attribute. The "display" attribute MUST be used for a video stream that is input to a conference and MUST NOT be used for other streams. The value of the attribute MUST identify a <region> (see the section <region>) or a <selector> (see the section <selector>) that is defined for the conference. A stream MUST NOT be directly joined to a region that is defined within a selector. Changing the value of the "display" attribute can be used to change where in a video presentation layout a video stream is displayed.

将显示视频的区域是使用“显示”属性指定的。“显示”属性必须用于输入到会议的视频流,不得用于其他流。该属性的值必须标识为会议定义的<region>(请参阅<region>一节)或<selector>(请参阅<selector>一节)。流不能直接连接到选择器中定义的区域。更改“显示”属性的值可用于更改视频演示布局中显示视频流的位置。

Additional attributes of the <stream> element for video streams are:

视频流的<stream>元素的其他属性包括:

Attributes:

属性:

display: the identifier of a video layout region or selector that is to be used to display the video stream.

显示:用于显示视频流的视频布局区域或选择器的标识符。

override: specifies whether or not the given video stream is the override source in the region defined by "display" attribute. Valid values are "true" or "false". Optional, default value is "false". Only a video stream that is input to a conference can be the override source. A particular region can have at most one override source at a time. The most recently joined video stream with this attribute set to "true" becomes the override source. When there's an override source in place, its video is always displayed in the region, regardless of what video selection algorithm (either a selector or continuous presence mode) is configured for that region. Once the override source is cleared, the conference MUST revert back to original video selection algorithm.

覆盖:指定给定视频流是否为“显示”属性定义的区域中的覆盖源。有效值为“真”或“假”。可选,默认值为“false”。只有输入到会议的视频流才能作为覆盖源。特定区域一次最多可以有一个替代源。此属性设置为“true”的最近加入的视频流将成为覆盖源。当存在覆盖源时,其视频始终显示在该区域中,而不管为该区域配置了什么视频选择算法(选择器或连续存在模式)。清除覆盖源后,会议必须恢复到原始视频选择算法。

8.12.2.1. <visual>
8.12.2.1. <visual>

Some regions of video conferences may display different streams automatically, such as when voice activated switching is used. Connections MAY also be joined directly without the use of video mixing. In these cases, the <visual> element may be used to define visual display properties for a stream.

视频会议的某些区域可能会自动显示不同的流,例如在使用语音激活交换时。连接也可以直接连接,无需使用视频混合。在这些情况下,<visual>元素可用于定义流的可视显示属性。

The <visual> element MAY use any of the visual attributes defined for regions (see the section <region>). This allows the visual aspects of regions within a <selector> to be tailored to the selected video stream, or for streams that are directly joined to display a name or logo.

<visual>元素可以使用为区域定义的任何视觉属性(请参阅<region>一节)。这使得<selector>中区域的视觉特性可以根据所选视频流或直接连接以显示名称或徽标的流进行定制。

9. MSML Dialog Packages
9. MSML对话框包
9.1. Overview
9.1. 概述

MSML Dialog Packages define an XML [n2] language for composing complex media objects from a vocabulary of simple media resource objects called primitives. It is primarily a descriptive or declarative language to describe media processing objects. MSML dialogs operate on a single or multiple streams that are identified by the MSML document outside the scope of the MSML Dialog Package.

MSML对话框包定义了一种XML[n2]语言,用于从称为原语的简单媒体资源对象词汇表中组合复杂的媒体对象。它主要是一种描述或声明性语言,用于描述媒体处理对象。MSML对话框在MSML对话框包范围之外的MSML文档标识的单个或多个流上运行。

MSML dialogs are intended to be used in different environments. As such, the language itself does not define how an MSML dialog is used. Each environment in which an MSML dialog is used must define how it is used, the set of services provided, and the mechanism for passing information between the environment and MSML dialog. The specific mechanisms used to realize the interface between MSML dialog and its environment are platform specific.

MSML对话框适用于不同的环境。因此,语言本身并不定义如何使用MSML对话框。使用MSML对话框的每个环境都必须定义它的使用方式、提供的服务集以及在环境和MSML对话框之间传递信息的机制。用于实现MSML对话框与其环境之间接口的特定机制是特定于平台的。

MSML Dialog Packages provide two models for access to media resources and service creation building blocks. Both models MAY be used in conjunction with each other in a complementary manner. The first model (referred to as "Media Primitives and Composites", part of the mandatory MSML Dialog Base Package) contains media primitives (such as digit collection and announcements) and composite functions (such as play and collect combined as a single operation). The second model (referred to as "Media Groups", part of the optional MSML Dialog Group Package) allows the ability to define complex customized interactions, via event passing mechanisms, between media primitives, if required.

MSML对话框包提供了两种访问媒体资源和服务创建构建块的模型。这两种模型可以以互补的方式相互结合使用。第一个模型(称为“媒体原语和复合物”,是强制性MSML对话框基本包的一部分)包含媒体原语(如数字采集和公告)和复合功能(如作为单个操作组合的播放和采集)。第二个模型(称为“媒体组”,可选MSML对话组包的一部分)允许通过事件传递机制在媒体原语之间定义复杂的自定义交互(如果需要)。

MSML Dialog Core Package

MSML对话核心包

Defines core framework over which all MSML Dialog Packages operate.

定义所有MSML对话框包操作的核心框架。

MSML Dialog Base Package

MSML对话框基本包

Media Primitives <dtmf> or <collect> DTMF digit collection <play> Playing of Announcements <dtmfgen> Generation of DTMF digits <tonegen> Tone genration <record> Media recording

媒体原语<dtmf>或<collect>dtmf数字采集<play>播放公告<dtmfgen>生成dtmf数字<tonegen>Tone Generation<record>媒体录制

Media Composites <collect> Supports play and collect operation. Composite function with inclusion of play. <record> Supports play and record operation. Composite function with inclusion of play.

媒体组合<collect>支持播放和收集操作。包含播放的复合函数<录制>支持播放和录制操作。包含播放的复合函数。

MSML Dialog Group Package <group> Allows grouping of media primitives for parallel execution, with an event exchange mechanism between the media primitives to achieve customized media operations. All the above media primitive elements are accepted within the group.

MSML Dialog Group Package<Group>允许对媒体原语进行分组以并行执行,并在媒体原语之间使用事件交换机制以实现自定义媒体操作。组内接受上述所有媒体原语元素。

The following operations MUST be supported using elements described above using either the MSML Dialog Base Package or MSML Dialog Group Package.

必须使用上述使用MSML对话基本包或MSML对话组包的元素来支持以下操作。

      Announcement only
                        <play>
            Collection only
                        <dtmf> or <collect>
        
      Announcement only
                        <play>
            Collection only
                        <dtmf> or <collect>
        

Recording only <record>

仅录制<录制>

            Play and Collect
                        <collect>
                           <play/>
                        </collect>
        
            Play and Collect
                        <collect>
                           <play/>
                        </collect>
        
            Play and Record
                        <record>
                           <play/>
                        </record>
        
            Play and Record
                        <record>
                           <play/>
                        </record>
        

Additional MSML Dialog Packages are:

其他MSML对话框包包括:

o MSML Dialog Transform Package

o MSML对话框转换包

o MSML Dialog Speech Package

o MSML对话语音包

o MSML Fax Detection Package

o 传真检测包

o MSML Fax Send/Receive Package

o MSML传真发送/接收包

MSML dialogs MAY be used to simply expose primitive media resource objects but will be used more often to describe dialog operations and media transformation objects that can be controlled via user interaction.

MSML对话框可用于简单地公开基本媒体资源对象,但更常用于描述可通过用户交互控制的对话框操作和媒体转换对象。

MSML dialogs do not contain any computation or flow control constructs. There are no results automatically generated when media operations complete. Results MUST be explicitly requested using a <send> or <exit> element within the definition of the MSML dialog.

MSML对话框不包含任何计算或流控制结构。介质操作完成时不会自动生成任何结果。必须使用MSML对话框定义中的<send>或<exit>元素显式请求结果。

9.2. Primitives
9.2. 原语

Primitives perform a single function on a media stream or multiple streams such as generating audio/video, recognizing speech or DTMF, or adjusting the gain. They may be composed so that primitives execute concurrently. Primitives not composed for concurrent execution MUST simply execute sequentially in the order they occur in an MSML document. All concurrently executing primitives in the same MSML object (defined in one MSML document) MAY interact with each other through events (see MSML Dialog Group Package).

原语在媒体流或多个流上执行单个功能,例如生成音频/视频、识别语音或DTMF或调整增益。它们可以组合在一起,以便原语同时执行。非为并发执行而编写的原语必须按照它们在MSML文档中出现的顺序依次执行。同一MSML对象(在一个MSML文档中定义)中的所有并发执行原语可以通过事件相互交互(请参阅MSML对话组包)。

Primitives are categorized into one of the following descriptive categories.

原语分为以下描述类别之一。

o Recognizers have a media input but no output. They allow different things within a media stream to be recognized or detected and for events to be generated based upon received media.

o 识别器有媒体输入,但没有输出。它们允许识别或检测媒体流中的不同内容,并基于接收到的媒体生成事件。

o Transformers have one media input and output and may send and receive events.

o 转换器有一个媒体输入和输出,可以发送和接收事件。

o Sources and sinks generate or consume media. They have either a media input or a media output but not both. They may receive and generate events.

o 源和汇生成或使用媒体。它们要么有媒体输入,要么有媒体输出,但不是两者都有。它们可以接收和生成事件。

o Composites combine underlying primitives to provide higher-level user interaction, without the need for specific event-based exchange between the primitives. The composite elements provide a simpler mechanism for more commonly used services, such as play and collect or play and record.

o 组合将底层原语组合起来,以提供更高级别的用户交互,而不需要在原语之间进行特定的基于事件的交换。复合元素为更常用的服务提供了一种更简单的机制,如播放和收集或播放和录制。

Primitives may define different media processing behavior (states) based upon the events that they receive. Primitives that support different processing states must define their default starting state and should support the "initial" attribute to allow that state to be specified when the primitive is instantiated. All primitives must support the "terminate" event class.

基元可以根据接收到的事件定义不同的媒体处理行为(状态)。支持不同处理状态的原语必须定义其默认启动状态,并且应该支持“initial”属性,以便在原语实例化时指定该状态。所有原语都必须支持“terminate”事件类。

The following types of primitives are defined within this specification:

本规范中定义了以下类型的基本体:

      Recognizers    Transformers   Source/Sink   Composites
      ------------------------------------------------------
       dtmf/collect   agc            play          dtmf/collect
       faxdetect      clamp          record        record
       speech         gain           dtmfgen
       vad            gate           tonegen
                      relay          faxsend
                                     faxrcv
        
      Recognizers    Transformers   Source/Sink   Composites
      ------------------------------------------------------
       dtmf/collect   agc            play          dtmf/collect
       faxdetect      clamp          record        record
       speech         gain           dtmfgen
       vad            gate           tonegen
                      relay          faxsend
                                     faxrcv
        

Primitives have shadow variables, similar to those within VoiceXML [n5], which are automatically assigned values when the primitives are used. Upon initialization of an MSML dialog context, all shadow variables have the string value "undefined". Each primitive has its own instance of shadow variables that are global in scope to the entire MSML dialog context.

原语有阴影变量,类似于VoiceXML[n5]中的阴影变量,使用原语时会自动为其赋值。初始化MSML对话框上下文时,所有阴影变量的字符串值均为“未定义”。每个原语都有其自己的影子变量实例,这些变量在整个MSML对话框上下文的范围内是全局的。

Names SHOULD be assigned to individual primitives when more than one primitive of the same type is used within one MSML document. Shadow variables are overwritten if the primitive has not been named and is instantiated a second time.

在一个MSML文档中使用多个相同类型的基元时,应将名称指定给各个基元。如果原语未命名并再次实例化,则会覆盖阴影变量。

Shadow variables cannot be modified under user control. They may be returned from the MSML dialog context using the <send> element.

无法在用户控制下修改阴影变量。可以使用<send>元素从MSML对话框上下文返回它们。

9.3. Events
9.3. 事件

Events provide the mechanism for primitives to interact with each other and for an MSML context to interact with its external environment. The external environment is defined by the way in which an MSML context has been invoked. This will often be through MSML, but other languages and protocols such as SIP may also be used.

事件提供了原语相互交互以及MSML上下文与其外部环境交互的机制。外部环境是通过调用MSML上下文的方式定义的。这通常通过MSML实现,但也可以使用其他语言和协议,如SIP。

Every primitive and group conceptually implements their own event queue. Events sent to them get placed into their associated queue. Events are removed from their queues and processed in order. Primitives within a group conceptually have their own thread of execution. Due to the asynchronous nature of servicing events from multiple queues, it cannot be assumed that several events sent in sequence to different queues will be processed in the order in which they were sent. For example, if recognition of something led to sending events to both a <play> and a <record> in that order, it is possible that the <record> may process its event before the <play>.

每个原语和组在概念上实现它们自己的事件队列。发送给它们的事件被放入它们关联的队列中。事件将从其队列中删除并按顺序处理。组中的原语在概念上有自己的执行线程。由于为来自多个队列的事件提供服务的异步性质,不能假定按顺序发送到不同队列的多个事件将按发送顺序进行处理。例如,如果对某事物的识别导致按该顺序向<play>和<record>发送事件,则<record>可能会在<play>之前处理其事件。

Primitives each define the set of events that they support and the behavior associated with their handling of each event. This allows many types of behaviors to be defined. For example, VCR type controls can be constructed by defining primitives that support events corresponding to each control. Media recognition/detection can be used to cause those events to be generated.

每个基本体定义它们支持的事件集以及与它们处理每个事件相关的行为。这允许定义多种类型的行为。例如,VCR类型的控件可以通过定义支持与每个控件对应的事件的原语来构造。媒体识别/检测可用于生成这些事件。

Alternatively, events can be originated elsewhere, such as from a control agent, and simply received by the primitive implementing the control. Examples of the use of events include adjusting volume (gain) and pause and resume of both announcement playout and record creation.

或者,事件可以起源于其他地方,例如来自控制代理,并且只由实现控制的原语接收。使用事件的示例包括调整音量(增益)、暂停和恢复公告播放和记录创建。

Primitives act on events based upon the longest match of an event name. Event names are a period '.' delimited sequence of tokens. The first token, or the root of the name, can be considered an event class. Matching allows a standard meaning to be defined and then extended based upon what triggers an event's generation. For example, a record primitive has different behavior depending upon whether it completed because a user stopped speaking or because it was cancelled. The recording is retained in the first case but not the second.

基元根据事件名称的最长匹配对事件进行操作。事件名称是以句点“.”分隔的令牌序列。第一个标记或名称的根可以被视为事件类。匹配允许定义标准含义,然后根据触发事件生成的内容进行扩展。例如,记录原语具有不同的行为,这取决于它是因为用户停止讲话而完成的,还是因为它被取消了。第一种情况下保留记录,但第二种情况下不保留记录。

Longest match allows new recognizers to be created and used without changing how existing primitives are defined. For example, a face recognition capability could be created that generates a terminate.frowning event when a user looks puzzled. Although no primitive directly defines this event, it will still effect a generic terminate action. Primitives that require specialized behavior based

最长匹配允许创建和使用新的识别器,而无需更改现有原语的定义方式。例如,可以创建一个人脸识别功能,当用户看起来很困惑时,该功能会生成terminate.皱眉事件。尽管没有原语直接定义此事件,但它仍将影响一般终止操作。需要基于特定行为的基本体

upon frowning may be extended to support this. As well, the event can still be exported from the MSML context without requiring that primitives receiving the event understand facial expressions.

皱眉头可以扩展到支持这一点。同样,事件仍然可以从MSML上下文导出,而不需要接收事件的原语理解面部表情。

9.4. MSML Dialog Usage with SIP
9.4. MSML对话框与SIP的使用

MSML dialogs MAY be used directly with SIP for dialog interactions (e.g., IVR or fax). It can be initially invoked as part of the "Prompt and Collect" service described in "Basic Network Media Services with SIP" [n7]. That defines service indicators for a small number of well-defined services using the user part of the SIP Request-URI (R-URI).

MSML对话可直接与SIP一起用于对话交互(如IVR或传真)。它最初可以作为“带SIP的基本网络媒体服务”[n7]中描述的“提示和收集”服务的一部分调用。它使用SIP请求URI(R-URI)的用户部分为少量定义良好的服务定义服务指示符。

The prompt and collect service uses "dialog" as the service indicator. URI parameters further refine the specific IVR request. This document defines an additional parameter "msml-param" for the dialog service indicator as follows:

提示和收集服务使用“对话框”作为服务指示器。URI参数进一步细化了特定的IVR请求。本文档为对话框服务指示器定义了一个附加参数“msml param”,如下所示:

   dialog-parameters = ";" ( dialog-param [ vxml-parameters ] )
                           | moml-param
   dialog-param      = "voicexml=" dialog-url
   moml-param        = "moml=" moml-url
        
   dialog-parameters = ";" ( dialog-param [ vxml-parameters ] )
                           | moml-param
   dialog-param      = "voicexml=" dialog-url
   moml-param        = "moml=" moml-url
        

There are no additional URI parameters when MSML is used as the dialog language.

当MSML用作对话框语言时,没有其他URI参数。

MSML dialogs define discrete IVR dialog commands. These commands MAY be included directly in the body of the INVITE to the "dialog" service indicator by using the "cid" [n8] URL scheme. This scheme identifies a message body part that in this case would contain the MSML dialog request. Note that a multipart message body, containing a single part, MUST be present even if the INVITE does not contain an SDP offer. Subsequent MSML dialog requests are sent in the body of SIP INFO messages as are all messages from a media server.

MSML对话框定义离散IVR对话框命令。通过使用“cid”[n8]URL方案,这些命令可以直接包含在“对话”服务指示符的邀请正文中。此方案标识消息正文部分,在本例中,该部分将包含MSML对话框请求。请注意,即使INVITE不包含SDP提供,也必须存在包含单个部分的多部分消息正文。随后的MSML对话框请求将在SIP INFO消息正文中发送,来自媒体服务器的所有消息也是如此。

An example of SIP URI as described above is:

如上所述的SIP URI的示例是:

      sip:dialog@mediaserver.example.net;\
          moml=cid:14864099865376@appserver.example.net
        
      sip:dialog@mediaserver.example.net;\
          moml=cid:14864099865376@appserver.example.net
        

The body part that contained the MSML dialog referenced by the URL would have a Content-Id header of:

包含URL引用的MSML对话框的主体部分的内容Id标头为:

      Content-Id: <14864099865376@appserver.example.net>
        
      Content-Id: <14864099865376@appserver.example.net>
        

The results of executing an <exit> or <disconnect>, or of executing a <send> that has a "target" attribute value equal to "source", are notified in SIP INFO messages using the <event> element from MSML Core package. No messages are sent if execution completes normally without executing one of these elements.

执行<exit>或<disconnect>的结果,或执行“target”属性值等于“source”的<send>的结果,将使用MSML核心包中的<event>元素在SIP INFO消息中通知。如果执行正常完成而未执行其中一个元素,则不会发送任何消息。

If there is an error during validation or execution, then a media server MUST notify the error as described above and must include the namelist items "moml.error.status" and "moml.error.description". The values for these items are defined in section 11.

如果在验证或执行过程中出现错误,则媒体服务器必须如上所述通知错误,并且必须包括名称列表项“moml.error.status”和“moml.error.description”。这些项目的值在第11节中定义。

A restricted subset of MSML dialogs can also be used with the "Announcement" service defined in [n7]. This service uses "annc" as the service indicator and defines parameters that describe an announcement. The "play=" parameter identifies the URL of a prompt or a provisioned announcement sequence. The value of the "play=" parameter can refer to an MSML dialog body part using a "cid" URL as described above. That body part must only contain the <play> primitive.

MSML对话框的受限子集也可用于[n7]中定义的“公告”服务。此服务使用“annc”作为服务指示器,并定义描述公告的参数。“play=”参数标识提示或已设置公告序列的URL。“play=”参数的值可以引用使用如上所述的“cid”URL的MSML对话框主体部分。该身体部位只能包含<play>原语。

Using MSML dialogs enhances the announcement service by allowing the client to specify a sequence of audio segments rather than requiring each sequence to be provisioned as well as support for video. Moreover, MSML dialogs define a standard set of variables in contrast to [n7] which defines a parameterization mechanism but does not formally specify any semantics.

通过使用MSML对话框,客户端可以指定音频片段序列,而无需配置每个序列以及视频支持,从而增强了公告服务。此外,MSML对话框定义了一组标准变量,而[n7]定义了参数化机制,但没有正式指定任何语义。

If a media server does not understand the "cid" scheme or does not understand MSML dialogs, it must respond with the SIP response code "488 - not acceptable here". If the MSML dialog body contains elements other than the <play> primitive, or there are errors during validation, a media server must respond with a SIP response code "400 - bad request". Finally, if there is a discrepancy between parameters specified in the Request-URI and corresponding attributes defined in the MSML dialog body, the Request-URI parameters must be silently ignored.

如果媒体服务器不理解“cid”方案或不理解MSML对话框,则必须使用SIP响应代码“488-此处不可接受”进行响应。如果MSML对话框主体包含<play>原语以外的元素,或者在验证过程中出现错误,则媒体服务器必须使用SIP响应代码“400-错误请求”进行响应。最后,如果请求URI中指定的参数与MSML对话框体中定义的相应属性之间存在差异,则必须以静默方式忽略请求URI参数。

MSML dialogs MUST NOT change the operation of the announcement service from that defined in [n7]. When the announcement completes, a media server issues a SIP BYE request. The INFO method MUST NOT used with the announcement service.

MSML对话框不得更改[n7]中定义的公告服务的操作。公告完成后,媒体服务器将发出SIP BYE请求。INFO方法不得与公告服务一起使用。

9.5. MSML Dialog Structure and Modularity
9.5. MSML对话框结构与模块化

MSML is structured as a set of packages. Only the core and base packages are required. The Dialog Core Package defines the framework for MSML requests to a media server, without specific functionality. It consists of the "primitive" abstraction, an abstract element for

MSML的结构是一组包。只需要核心包和基本包。Dialog Core包定义了对媒体服务器的MSML请求的框架,但没有特定的功能。它由“原始”抽象组成,是

control flow, the sequential execution model, and the <send> element. That is, the MSML Dialog Core Package allows for the execution of a sequence of one or more media processing primitives with the ability to notify events to the invocation environment.

控制流、顺序执行模型和<send>元素。也就是说,MSML对话核心包允许执行一个或多个媒体处理原语序列,并能够向调用环境通知事件。

Primitives are contained within the MSML Dialog Base Package, which defines the basic <play>, <record>, <dtmf>, <dtmfgen>, <tonegen>, and <collect> elements. Another package, the MSML Dialog Transform Package, defines the simple half-duplex filters. More advanced primitives are defined in the speech and fax packages. The MSML speech package depends on the MSML Dialog Base Package as it extends the capability of <play> by adding synthesized speech. Finally, the group execution model, which is currently the only element that changes the flow of control, is defined in a separate MSML Dialog Group Package. All of these packages are optional with the exception that MSML Dialog Core and MSML Dialog Base Packages MUST be implemented to provide the minimal functionality.

原语包含在MSML对话框基本包中,该包定义基本的<play>、<record>、<dtmf>、<dtmfgen>、<tonegen>和<collect>元素。另一个包MSML Dialog Transform包定义了简单的半双工过滤器。语音和传真包中定义了更高级的原语。MSML语音包依赖于MSML对话基本包,因为它通过添加合成语音扩展了<play>的功能。最后,在单独的MSML对话组包中定义了组执行模型,它是当前唯一更改控制流的元素。所有这些包都是可选的,但必须实现MSML Dialog Core和MSML Dialog Base包才能提供最低限度的功能。

9.6. MSML Dialog Core Package
9.6. MSML对话核心包

The MSML Dialog Core Package defines the structural framework and abstractions for MSML dialogs (via its schema). It also defines the basic elements that are not part of the core primitive or control abstractions. This package is dependent on the MSML Core Package. Events generated by MSML dialogs, such as prompt completion, digits collected, or dialog termination, are communicated by the media server via the MSML Core Package (see MSML Core Package <event>).

MSML对话核心包定义了MSML对话的结构框架和抽象(通过其模式)。它还定义了不属于核心原语或控件抽象的基本元素。此程序包依赖于MSML核心程序包。由MSML对话框生成的事件(如提示完成、收集的数字或对话框终止)由媒体服务器通过MSML核心包进行通信(请参阅MSML核心包<event>)。

MSML dialogs are executed independently from the MSML core context. When an MSML dialog is started, MSML allocates the dialog control resources, and if successful, starts those resources executing. MSML core execution then continues without waiting for the MSML dialog to complete. This forking of MSML dialog invocation from the MSML core context is done via the <dialogstart> element. Media streams are created between the MSML dialog target and other internal media server resources as part of dialog execution. Stream creation is subject to the requirements defined in the MSML Core Package and media streams as defined by the MSML Conference Core Package.

MSML对话框独立于MSML核心上下文执行。启动MSML对话框时,MSML分配对话框控制资源,如果成功,则启动这些资源的执行。然后继续执行MSML核心,而不等待MSML对话框完成。MSML核心上下文中的MSML对话框调用的分叉是通过<dialogstart>元素完成的。作为对话执行的一部分,在MSML对话目标和其他内部媒体服务器资源之间创建媒体流。流创建受MSML核心包中定义的要求和MSML会议核心包中定义的媒体流的约束。

9.6.1. <dialogstart>
9.6.1. <dialogstart>

The <dialogstart> element is used to instantiate an MSML media dialog on connections or conferences. The dialog is specified either inline or by a URI [n6]. Inline dialogs MUST be composed of any of the MSML Dialog Packages. MSML dialogs MAY be defined externally as VoiceXML [n5]. The MSML dialog description MUST NOT be inline if the src attribute, containing a URI, is present.

元素用于实例化连接或会议上的MSML媒体对话框。该对话框由内联或URI[n6]指定。内联对话框必须由任何MSML对话框包组成。MSML对话框可以在外部定义为VoiceXML[n5]。如果存在包含URI的src属性,则MSML对话框描述不能内联。

The originator of the MSML dialog is notified using a "msml.dialog.exit" event when the dialog completes. Any results returned by the dialog when it exits are sent as a namelist to the event.

对话框完成时,将使用“MSML.dialog.exit”事件通知MSML对话框的发起人。对话框退出时返回的任何结果都将作为名称列表发送给事件。

The "msml.dialog.exit" event is also used when dialogs fail due to errors encountered fetching external documents or errors that occur within the dialog execution thread. In this case, a namelist containing the items "dialog.exit.status" and "dialog.exit.description" is returned with the event to inform the client of the failure and the failure reason. The values of these items are defined within this package and the MSML Core Package. Information from the failed dialog may be returned as additional namelist items.

“msml.dialog.exit”事件也会在由于获取外部文档时遇到错误或对话框执行线程中出现错误而导致对话框失败时使用。在这种情况下,将返回包含“dialog.exit.status”和“dialog.exit.description”项的名称列表,并随事件一起通知客户机故障和故障原因。这些项目的值在此包和MSML核心包中定义。失败对话框中的信息可以作为其他名称列表项返回。

Attributes:

属性:

target: an identifier of a connection or a conference that will interact with the dialog. The identifier must not contain wildcards. Mandatory.

目标:将与对话框交互的连接或会议的标识符。标识符不能包含通配符。强制性的

src: the URL of the dialog description. MUST NOT be used if the MSML dialog description is inline. Otherwise, an error (422) will result and MSML document execution will stop.

src:对话框描述的URL。如果MSML对话框描述是内联的,则不得使用。否则,将导致错误(422),MSML文档执行将停止。

type: a MIME type that identifies the type of language used to describe the dialog. application/moml+xml and application/vxml+xml are used to identify MSML dialogs and VoiceXML [n5] respectively. Mandatory.

类型:标识用于描述对话框的语言类型的MIME类型。application/moml+xml和application/vxml+xml分别用于识别MSML对话框和VoiceXML[n5]。强制性的

name: an instance name for the dialog. If the attribute is not present, the media server will assign an identifier to the dialog. If the attribute is present but the name is already associated with the target, an error (431) will result and MSML document execution will stop. Any results that a dialog generates will be correlated to its identifier.

名称:对话框的实例名称。如果该属性不存在,媒体服务器将为该对话框分配一个标识符。如果属性存在,但名称已与目标关联,则将导致错误(431),MSML文档执行将停止。对话框生成的任何结果都将与其标识符相关联。

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML element is returned in an error response. Therefore, the value of all "mark" attributes within an MSML document should be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML元素的mark属性值。因此,MSML文档中所有“标记”属性的值都应该是唯一的。

The following sections show examples of initiating an external MSML dialog, an inline embedded MSML dialog, and an MSML-initiated VoiceXML dialog.

以下各节显示了启动外部MSML对话框、内嵌MSML对话框和MSML启动VoiceXML对话框的示例。

The following example starts an MSML dialog on a connection.

以下示例在连接上启动MSML对话框。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogstart target="conn:abcd1234"
               type="application/moml+xml"
               name="sample"
               src="http://server.example.com/scripts/foo.moml"/>
       </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogstart target="conn:abcd1234"
               type="application/moml+xml"
               name="sample"
               src="http://server.example.com/scripts/foo.moml"/>
       </msml>
        

The following example starts an inline embedded MSML dialog on a connection.

以下示例在连接上启动内嵌的MSML对话框。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
        <dialogstart target="conn:abcd1234" name="sample">
           <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>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
        <dialogstart target="conn:abcd1234" name="sample">
           <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>
        

The following example starts a VoiceXML dialog on a connection.

以下示例在连接上启动VoiceXML对话框。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogstart target="conn:abcd1234"
             type="application/vxml+xml"
             name="sample"
             src="http://server.example.com/scripts/foo.vxml"/>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogstart target="conn:abcd1234"
             type="application/vxml+xml"
             name="sample"
             src="http://server.example.com/scripts/foo.vxml"/>
      </msml>
        

If this dialog fails once its execution thread had begun, for example, the fetch of the VoiceXML document failed, an example of the event that would be returned would be:

如果此对话框在其执行线程开始后失败,例如,提取VoiceXML文档失败,将返回的事件示例如下:

      <?xml version="1.0" encoding="UTF-8"?>
      <event name="msml.dialog.exit"
             id="conn:abcd1234/dialog:sample">
         <name>dialog.exit.status</name>
         <value>423</value>
         <name>dialog.exit.description</name>
         <value>External document fetch error</value>
      </event>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <event name="msml.dialog.exit"
             id="conn:abcd1234/dialog:sample">
         <name>dialog.exit.status</name>
         <value>423</value>
         <name>dialog.exit.description</name>
         <value>External document fetch error</value>
      </event>
        
9.6.2. <dialogend>
9.6.2. <dialogend>

Dialog end is used to terminate an MSML dialog created through <dialogstart> before it completes of its own accord. The operation of <dialogend> depends on the dialog language being used by the executing context. When that context is VoiceXML, a "connection.disconnected" event will be thrown to the VoiceXML application. When that context is MSML dialog, a "terminate" event will be sent to the MSML core context.

对话框结束用于在MSML对话框自动完成之前,终止通过<dialogstart>创建的MSML对话框。<dialogend>的操作取决于执行上下文所使用的对话语言。当该上下文为VoiceXML时,将向VoiceXML应用程序抛出一个“connection.disconnected”事件。当该上下文为MSML对话时,将向MSML核心上下文发送一个“终止”事件。

<dialogend> allows the executing dialog the opportunity to gracefully complete before generating a "msml.dialog.exit" event. Dialog results may be returned and will be contained as a namelist to that event.

<dialogend>允许正在执行的对话框在生成“msml.dialog.exit”事件之前正常完成。对话框结果可能会返回,并将作为该事件的名称列表包含。

Attributes:

属性:

id: the identifier of a dialog. Mandatory.

id:对话框的标识符。强制性的

mark: a token that can be used to identify execution progress in the case of errors. The value of the mark attribute from the last successfully executed MSML dialog element is returned in an error response. Therefore, the value of all "mark" attributes within an MSML document should be unique.

标记:在出现错误时可用于标识执行进度的标记。在错误响应中返回上次成功执行的MSML对话框元素的mark属性值。因此,MSML文档中所有“标记”属性的值都应该是唯一的。

For example, if the dialog from the previous example was still executing, the following would terminate the dialog and generate an "msml.dialog.exit" event.

例如,如果上一个示例中的对话框仍在执行,则以下操作将终止该对话框并生成“msml.dialog.exit”事件。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogend id="conn:abcd1234/dialog:sample"/>
      </msml>
        
      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <dialogend id="conn:abcd1234/dialog:sample"/>
      </msml>
        
9.6.3. <send>
9.6.3. <send>

The <send> element sends an event and optional namelist to the recipient identified by the target attribute. Event names are defined by the recipient. In the case where the recipient is an MSML dialog group or primitive, the events are defined within this document. Other recipients MAY use names that are suitable for their environment.

<send>元素向由target属性标识的收件人发送事件和可选名称列表。事件名称由收件人定义。如果收件人是MSML对话框组或原语,则在此文档中定义事件。其他收件人可以使用适合其环境的名称。

The "target" attribute specifies the recipient of the event. Recipients MAY be other MSML dialog primitives or groups executing within the object, the object itself, or the environment that invoked the MSML dialog. Sending events to media primitives or groups is supported by the MSML Dialog Group Package. Any target that is

“target”属性指定事件的接收者。收件人可以是在对象、对象本身或调用MSML对话框的环境中执行的其他MSML对话框原语或组。MSML对话组包支持向媒体原语或组发送事件。任何被攻击的目标

unknown within the object is assumed to be destined to the external environment. By convention, the string "source" SHOULD used to address that environment, but any target name distinct from the MSML dialog namespace MAY be used.

假定对象内的未知对象是指向外部环境的。按照惯例,字符串“source”应用于寻址该环境,但可以使用与MSML对话框命名空间不同的任何目标名称。

Attributes:

属性:

event: the name of an event. Mandatory.

事件:事件的名称。强制性的

target: the recipient of the event. The recipient MUST be a MSML dialog primitive, the currently executing group, or the MSML dialog environment. A primitive is specified by a primitive type, optionally appended by a period '.' followed by the identifier of a primitive. Identifiers are only needed when more than one primitive of the same type exists in the object. The executing group is specified using the token "group". The environment is specified using the token "source", optionally appended by a period '.' followed by any environment specific target. Mandatory.

目标:事件的接收者。收件人必须是MSML对话原语、当前正在执行的组或MSML对话环境。基元由基元类型指定,可选地附加句点“.”,后跟基元标识符。只有当对象中存在多个相同类型的基元时,才需要标识符。使用标记“group”指定执行组。环境是使用标记“source”指定的,可以选择附加句点“.”,后跟任何特定于环境的目标。强制性的

namelist: a list of zero or more shadow variables that are included with the event.

名称列表:事件中包含的零个或多个阴影变量的列表。

9.6.4. <exit>
9.6.4. <exit>

The <exit> element causes execution of the MSML dialog to terminate.

元素导致MSML对话框的执行终止。

Attributes:

属性:

namelist: a list of one or more shadow variables that MAY optionally be sent to the context that invoked the MSML Dialog object.

名称列表:一个或多个阴影变量的列表,可以选择发送到调用MSML对话框对象的上下文。

9.6.5. <disconnect>
9.6.5. <disconnect>

The <disconnect> element is similar to <exit> but has the additional semantics of indicating to the context that invoked the MSML dialog that it should disconnect from a media server, the media stream associated with the object. The method of disconnection depends upon how the media stream was initially established. If SIP was used, a <disconnect> would cause a media server to issue a BYE request. The request would be sent for the SIP dialog associated with media session on which the MSML dialog was operating.

<disconnect>元素类似于<exit>,但具有额外的语义,即向调用MSML对话框的上下文指示它应断开与对象关联的媒体流与媒体服务器的连接。断开连接的方法取决于媒体流最初是如何建立的。如果使用SIP,则<disconnect>将导致媒体服务器发出BYE请求。将向与MSML对话框正在运行的媒体会话相关联的SIP对话框发送请求。

Attributes:

属性:

namelist: a list of one or more shadow variables that MAY optionally be sent to the context that invoked the MSML dialog object.

名称列表:一个或多个阴影变量的列表,可以选择发送到调用MSML对话框对象的上下文。

9.7. MSML Dialog Base Package
9.7. MSML对话框基本包

The MSML Dialog Base Package defines a required set of base functionality for the media server. It supports individual media primitives, such as playing an announcement or collection digits, as well as composite operations such as play and collect. When this package is used in conjunction with the MSML Dialog Group Package, the event-based mechanism is used to control primitives. This package may also be used in conjunction with the MSML Speech Package to extend the functionality of prompts to include TTS and user input collection to include ASR.

MSML对话框基本包定义了媒体服务器所需的一组基本功能。它支持单个媒体原语,如播放公告或收藏数字,以及播放和收藏等复合操作。当此包与MSML对话组包一起使用时,将使用基于事件的机制来控制原语。该软件包还可与MSML语音软件包一起使用,以扩展提示功能,使其包括TTS,并将用户输入采集功能包括ASR。

In the following sections, subsections of a primitive define child elements of that primitive and are not themselves considered primitives. They do not receive events or populate shadow variables.

在以下各节中,基本体的子部分定义了该基本体的子元素,而这些子元素本身并不被视为基本体。它们不接收事件或填充阴影变量。

9.7.1. <play>
9.7.1. <play>

Play is used to generate an audio or video stream. It MUST play in sequence the media created by the child media elements <audio>, <video>, <media>, <tts>, and <var>. When the play stops, either because the terminate event is received or all media generation has completed, the <playexit> element, if present, is executed. At least one media generation element must be present.

播放用于生成音频或视频流。它必须按顺序播放由子媒体元素<audio>、<video>、<media>、<tts>和<var>创建的媒体。当播放停止时,由于接收到终止事件或所有媒体生成已完成,将执行<playexit>元素(如果存在)。必须至少存在一个媒体生成元素。

Play supports two states: generate and suspend. Media generation occurs in the generate state and is suspended in the suspend state. Once in the suspend state, media generation continues upon receiving the generate event. The default initial state is generate.

Play支持两种状态:generate和suspend。媒体生成在生成状态下发生,并在挂起状态下挂起。一旦处于挂起状态,媒体生成将在接收到生成事件后继续。默认初始状态为generate。

Audio MAY be generated in different languages by specifying the xml:lang attribute for <play> and/or the child elements of <play>. The language is inherited by the child elements, but each child MAY specify its own language. Except for physical audio clips, it is an error if a language is specified but the media server cannot render the audio in the requested language.

通过为<play>和/或<play>的子元素指定xml:lang属性,可以用不同的语言生成音频。该语言由子元素继承,但每个子元素可以指定自己的语言。除物理音频片段外,如果指定了语言,但媒体服务器无法以请求的语言呈现音频,则为错误。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the play primitive.

id:可选标识符,可在其他地方引用,用于向播放原语发送事件。

interval: specifies the delay between stopping one iteration and beginning another. The attribute has no effect if iterate is not also specified. Default is no interval.

间隔:指定停止一个迭代和开始另一个迭代之间的延迟。如果未指定iterate,则该属性无效。默认值为无间隔。

iterate: specifies the number of times the media specified by the child media elements should be played. Each iteration is a complete play of each of the child media elements in document order. Defaults to once '1'.

迭代:指定子媒体元素指定的媒体应播放的次数。每次迭代都是按文档顺序完整播放每个子媒体元素。默认为一次“1”。

initial: defines the initial state for the play element. Default is "generate".

初始:定义播放元素的初始状态。默认为“生成”。

maxtime: defines the maximum allowed time for the <play> to complete.

maxtime:定义完成<播放>所允许的最长时间。

barge: defines whether or not audio announcements may be interrupted by DTMF detection during play-out. The DTMF digit barging the announcement is stored in the digit buffer. Valid values for barge are "true" or "false", and the attribute is mandatory. When barge is applied to a conference target, DTMF digit detected from any conference participant MUST terminate the announcement.

驳船:定义在播放过程中,DTMF检测是否会中断音频公告。通过公告的DTMF数字存储在数字缓冲区中。驳船的有效值为“真”或“假”,并且该属性是必需的。当驳船应用于会议目标时,从任何会议参与者检测到的DTMF数字必须终止公告。

cleardb: defines whether or not the digit buffer is cleared, prior to starting the announcement. Valid values for cleardb are "true" or "false", and the attribute is mandatory.

cleardb:定义在开始公告之前是否清除数字缓冲区。cleardb的有效值为“true”或“false”,并且该属性是必需的。

offset: defines an offset, measured in units of time, where the <play> is to begin media generation. Offset is only valid when all child media elements are <audio>.

偏移量:定义一个偏移量,以时间单位度量,<play>开始生成媒体。偏移量仅在所有子媒体元素均为<audio>时有效。

skip: an amount, expressed in time, that will be used to skip through the media when "forward" and "backward" events are received. Default is 3 s (three seconds).

跳过:以时间表示的量,当接收到“向前”和“向后”事件时,用于跳过媒体。默认值为3秒(3秒)。

xml:lang: specifies the language to use for content that can be rendered in different languages.

xml:lang:指定可用于以不同语言呈现的内容的语言。

Events:

活动:

The following describes input events to the media primitive object. The MSML Dialog Group Package allows an event exchange mechanism between primitives.

下面介绍媒体原语对象的输入事件。MSML对话组包允许原语之间的事件交换机制。

pause: causes the play to enter the suspend state.

暂停:使播放进入暂停状态。

resume: causes play to enter the generate state.

恢复:使播放进入生成状态。

forward: skips forward through the media. Only has effect when all child media elements are <audio>.

前进:通过媒体向前跳过。仅当所有子媒体元素都是<audio>时才有效。

backward: skips backward through the media. Only has effect when all child media elements are <audio>.

向后:通过媒体向后跳过。仅当所有子媒体元素都是<audio>时才有效。

restart: skips to the beginning of the media. Only has effect when all child media elements are <audio>.

重新启动:跳到媒体的开头。仅当所有子媒体元素都是<audio>时才有效。

toggle-state: causes the suspend / generate state to toggle.

切换状态:导致挂起/生成状态切换。

terminate: terminates the play and assigns values to the shadow variables.

终止:终止播放并为阴影变量赋值。

Shadow Variables:

阴影变量:

play.amt: identifies the length of time for which media was generated before the play was stopped. This does not include time that may have elapsed while the play was in the suspend state.

play.amt:标识停止播放前生成媒体的时间长度。这不包括播放处于暂停状态时可能经过的时间。

play.end: contains the event that caused the play to stop. When the play stops because all media generation has completed, end is assigned the value "play.complete".

play.end:包含导致播放停止的事件。当由于所有媒体生成完成而停止播放时,end将被分配值“play.complete”。

Note: Attributes barge and cleardb provide a simplified mechanism for controlling play operations with implicit DTMF without the use of <group> and event exchange mechanism. When using the <play> element within the group framework and barge is specified, detection of barge condition generates an implicit terminate event to the play primitive.

注:属性驳船和cleardb提供了一种简化的机制,用于使用隐式DTMF控制播放操作,而不使用<group>和事件交换机制。当在集团框架内使用<play>元素并指定驳船时,驳船条件的检测会向play原语生成隐式终止事件。

The following sections describe the child elements of <play>.

以下各节介绍了<play>的子元素。

9.7.1.1. <audio>
9.7.1.1. <audio>

The <audio> element identifies prerecorded audio to play. Local URI references may resolve to a single physical audio clip, a logical clip, or a provisioned sequence of clips (physical or logical). A logical clip is one that can be rendered differently based on the language attribute. Logical clips are provisioned for each of the languages that a media server supports. Remote URI references are resolved according to the capabilities of the remote server.

<audio>元素标识要播放的预录音频。本地URI引用可以解析为单个物理音频片段、逻辑片段或配置的片段序列(物理或逻辑)。逻辑剪辑是可以根据语言属性进行不同渲染的剪辑。为媒体服务器支持的每种语言提供逻辑剪辑。根据远程服务器的功能解析远程URI引用。

Attributes:

属性:

uri: identifies the location of the audio to be played. The file and http schemes are supported. Mandatory.

uri:标识要播放的音频的位置。支持文件和http方案。强制性的

format: defines the encoding and file type of the audio resource. The format attribute is defined as a string type of form "audio/<filetype>;codecs=<codec>". The keyword 'audio' identifies an audio content. The codecs field identifies the audio file's codec to be used for decoding the audio content. If format attribute is not specified, the filetype MUST be determined from the URI and the codec information MUST be determined from the media resource.

格式:定义音频资源的编码和文件类型。format属性定义为格式为“audio/<filetype>;codec=<codec>”的字符串类型。关键字“audio”标识音频内容。codecs字段标识用于解码音频内容的音频文件的编解码器。如果未指定format属性,则必须根据URI确定文件类型,并且必须根据媒体资源确定编解码器信息。

audiosamplerate: identifies audio sample rate in kHz. If not specified, the sample rate SHOULD be determined from the media resource.

audiosamplerate:以kHz为单位标识音频采样率。如果未指定,则应根据媒体资源确定采样率。

audiosamplesize: identifies audio sample size in bits. If not specified, the sample size SHOULD be determined from the media resource.

audiosamplesize:以位为单位标识音频样本大小。如果未指定,则应根据媒体资源确定样本大小。

iterate: specifies the number of times the audio is to be played. Defaults to once '1'.

迭代:指定播放音频的次数。默认为一次“1”。

xml:lang: specifies the language to use when the URI identifies a logical clip, either directly, or as part of a sequence.

xml:lang:指定URI直接或作为序列的一部分标识逻辑剪辑时使用的语言。

9.7.1.2. <video>
9.7.1.2. <video>

The <video> element identifies prerecorded multimedia to play. Contents identified by the URI attribute may contain audio only, video only, or both audio and video. The media server SHOULD attempt to play both audio and video from the identified URI, if both are available in the content.

<video>元素标识要播放的预录制多媒体。URI属性标识的内容可能只包含音频、视频或音频和视频。媒体服务器应尝试播放标识的URI中的音频和视频(如果在内容中两者都可用)。

Attributes:

属性:

uri: identifies the location of the video or multimedia to be played. The file and http schemes are supported. Mandatory.

uri:标识要播放的视频或多媒体的位置。支持文件和http方案。强制性的

format: defines the encoding and file type of the video or multimedia resource. The format attribute is defined as a string type of form "video/<filetype>;codecs=<codecx>,<codecy>". The keyword 'video' identifies video-only media or media containing audio and video. The "codecs" field identifies the audio and/or video codecs to be used for decoding the file content, where the order of the codec values is not significant. In the event of audio and video content, using 'video' keyword, the codecs=<codecx>,<codecy> field MAY be used to identify the audio codec and the video codec. If not specified, the codec information SHOULD be determined from the media file.

格式:定义视频或多媒体资源的编码和文件类型。format属性定义为格式为“video/<filetype>;codecs=<codecx>,<codecy>”的字符串类型。关键字“video”表示仅视频媒体或包含音频和视频的媒体。“codecs”字段标识用于解码文件内容的音频和/或视频编解码器,其中编解码器值的顺序不重要。在音频和视频内容的情况下,使用“video”关键字,codecs=<codecx>,<codecy>字段可用于识别音频编解码器和视频编解码器。如果未指定,则应根据媒体文件确定编解码器信息。

audiosamplerate: identifies audio sample rate in kHz. If not specified, the sample rate SHOULD be determined from the media file.

audiosamplerate:以kHz为单位标识音频采样率。如果未指定,则应根据媒体文件确定采样率。

audiosamplesize: identifies audio sample size in bits. If not specified, the sample size SHOULD be determined from the media file.

audiosamplesize:以位为单位标识音频样本大小。如果未指定,则应根据媒体文件确定样本大小。

codecconfig: identifies an optional special instruction string for codec configuration. Default is to send no special configuration string to the codec.

codecconfig:标识用于编解码器配置的可选特殊指令字符串。默认情况下,不向编解码器发送特殊配置字符串。

profile: identifies a video profile name specific to the codec. If not specified, default video profile of the codec SHOULD be selected.

profile:标识特定于编解码器的视频配置文件名称。如果未指定,则应选择编解码器的默认视频配置文件。

level: identifies a video profile level to the codec. Default is to send no profile information to the codec and allow the codec to select an internal default.

级别:标识编解码器的视频配置文件级别。默认设置是不向编解码器发送配置文件信息,并允许编解码器选择内部默认设置。

imagewidth: identifies the width of video image in pixels. Default is to use image width information from media file.

imagewidth:以像素为单位标识视频图像的宽度。默认设置是使用媒体文件中的图像宽度信息。

imageheight: identifies the height of video image in pixels. Default is to use image height information from media file.

imageheight:以像素为单位标识视频图像的高度。默认情况下,使用媒体文件中的图像高度信息。

maxbitrate: identifies the bitrate of the video signal in kbps. Default is to use maximum bitrate information from the media file.

maxbitrate:以kbps为单位标识视频信号的比特率。默认情况下,使用媒体文件中的最大比特率信息。

framerate: identifies the video frame rate in frames per second. Default is to use frame rate information from the media file.

帧速率:以每秒帧数为单位标识视频帧速率。默认情况下,使用媒体文件中的帧速率信息。

iterate: specifies the number of times the media content is to be played. Defaults to once '1'.

迭代:指定播放媒体内容的次数。默认为一次“1”。

9.7.1.3. <media>
9.7.1.3. <media>

The <media> element identifies multimedia content for play. All content of the <media> element MUST start to play concurrently. This element may be used to generate a multimedia stream from two independent media resources, one identifying audio and the other identifying video.

<media>元素标识要播放的多媒体内容。<media>元素的所有内容必须同时开始播放。该元件可用于从两个独立的媒体资源生成多媒体流,一个用于识别音频,另一个用于识别视频。

The <media> element MUST contain at least one child element. Valid child elements of <media> are <audio> and <video>, as described earlier. <media> element MUST contain at most one <audio> element or at most one <video> element.

<media>元素必须至少包含一个子元素。如前所述,<media>的有效子元素是<audio>和<video><媒体>元素必须最多包含一个<音频>元素或最多一个<视频>元素。

9.7.1.4. <var>
9.7.1.4. <var>

The <var> element specifies the generation of audio from a variable using prerecorded audio segments. A variable represents a semantic concept (such as date or number) and dynamically produces the appropriate speech.

元素指定使用预先录制的音频段从变量生成音频。变量表示语义概念(如日期或数字),并动态生成适当的语音。

Prerecorded audio allows an application vendor or service provider to choose the exact voice for their audio and therefore completely control the "sound and feel" of the service provided to end users. It provides very high audio quality and allows the variables to blend seamlessly into the surrounding audio segments.

预录音频允许应用程序供应商或服务提供商为其音频选择准确的语音,从而完全控制向最终用户提供的服务的“声音和感觉”。它提供非常高的音频质量,并允许变量无缝地融入周围的音频片段。

Text to speech (TTS) using Speech Synthesis Markup Language (SSML) [n11] may also be used to render variables, but may not provide as good quality, or allow as complete control of the "sound and feel" or user experience. TTS is normally used for reading text such as emails and for very large vocabularies such as stock names. TTS results in a very clear difference between the variables and the surrounding audio segments. (See MSML Dialog Speech Package.)

使用语音合成标记语言(SSML)[n11]的文本到语音(TTS)也可用于呈现变量,但可能无法提供良好的质量,或允许完全控制“声音和感觉”或用户体验。TTS通常用于阅读文本(如电子邮件)和非常大的词汇(如股票名称)。TTS导致变量和周围音频段之间存在非常明显的差异。(请参阅MSML对话语音包。)

Attributes:

属性:

type: specifies the type of variable. Mandatory. Variable type must be one of "date", "digits", "duration", "month", "money", "number", "silence", "time", or "weekday".

类型:指定变量的类型。强制性的变量类型必须是“日期”、“数字”、“持续时间”、“月份”、“货币”、“数字”、“静默”、“时间”或“工作日”之一。

subtype: specifies an optional clarification of type. Specific values depend upon the type.

子类型:指定类型的可选说明。具体值取决于类型。

value: text that should be rendered appropriate to the type and subtype attributes. Mandatory.

值:应根据类型和子类型属性呈现的文本。强制性的

xml:lang: specifies the language to use when rendering the variable.

xml:lang:指定呈现变量时要使用的语言。

9.7.1.5. <playexit>
9.7.1.5. <playexit>

The <playexit> element MUST be invoked when generation of all content of the <play> has come to completion. The contents of this element MAY be used to send events.

当<play>的所有内容的生成完成时,必须调用<playexit>元素。此元素的内容可用于发送事件。

Attributes:

属性:

none

没有一个

9.7.2. <dtmfgen>
9.7.2. <dtmfgen>

DTMF generator originates one or more DTMF digits in sequence.

DTMF生成器按顺序生成一个或多个DTMF数字。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the dtmfgen primitive.

id:可选标识符,可在别处引用,用于向dtmfgen原语发送事件。

digits: a string of characters from the alphabet "0-9a-d#*" that correspond to a sequence of DTMF tones. Mandatory.

数字:字母“0-9a-d#*”中的一组字符,对应于一系列DTMF音调。强制性的

level: used to define the power level for which the tones will be generated. Expressed in dBm0 in a range of 0 to -96 dBm0. Larger negative values express lower power levels. Note that values lower than -55 dBm0 will be rejected by most receivers (TR-TSY-000181, ITU-T Q.24A). Default is -6 dBm0.

电平:用于定义将生成音调的功率电平。在0到-96 dBm0的范围内以dBm0表示。负值越大表示功率级别越低。请注意,低于-55 dBm0的值将被大多数接收机拒绝(TR-TSY-000181,ITU-T Q.24A)。默认值为-6dbm0。

dur: the duration in milliseconds for which each tone should be generated. Implementations may round the value if they only support discrete durations. Default is 100 ms.

dur:应生成每个音调的持续时间(毫秒)。如果实现只支持离散的持续时间,则可能会舍入该值。默认值为100毫秒。

interval: the duration in milliseconds of a silence interval following each generated tone. Implementations may round the value if they only support discrete durations. Default is 100 ms.

interval(间隔):每个生成的音调之后的静默间隔的持续时间(以毫秒为单位)。如果实现只支持离散的持续时间,则可能会舍入该值。默认值为100毫秒。

Events:

活动:

terminate: terminates DTMF generation and assigns values to the

终止:终止DTMF生成并将值分配给

shadow variables.

阴影变量。

Shadow Variables:

阴影变量:

dtmfgen.end: contains the event that caused DTMF generation to stop.

dtmfgen.end:包含导致DTMF生成停止的事件。

The following sections describe the child elements of <dtmfgen>.

以下各节介绍<dtmfgen>的子元素。

9.7.2.1. <dtmfgenexit>
9.7.2.1. <dtmfgenexit>

The <dtmfgenexit> element MUST be invoked when the DTMF generation operation completes or is terminated as a result of receiving the terminate event. The <dtmfgenexit> element MAY be used to send events when the DTMF generation has completed.

当DTMF生成操作完成或由于接收到终止事件而终止时,必须调用<dtmfgenexit>元素。dtmfgenexit>元素可用于在DTMF生成完成时发送事件。

Attributes:

属性:

none

没有一个

9.7.3. <tonegen>
9.7.3. <tonegen>

Tone generator allows customized tone generation. A sequence of varying tones with optional silence intervals can be composed using the <tonegen> element. Child elements of <tonegen>, namely <tone> and <silence>, specify a single tone or sequence of tones.

音调生成器允许自定义音调生成。可以使用<tonegen>元素组合具有可选静音间隔的一系列不同音调。<tonegen>的子元素,即<tone>和<silence>,指定一个音调或一系列音调。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the tonegen primitive.

id:可选标识符,可在别处引用,用于向tonegen原语发送事件。

iterate: A numeric value specifying the total number of iterations. A value of 'forever' represents infinite repetitions. Optional. Default is 1.

迭代:指定迭代总数的数值。“永久”值表示无限重复。可选择的默认值为1。

Events:

活动:

terminate: terminates tone generation and assigns values to the shadow variables.

终止:终止色调生成并为阴影变量赋值。

Shadow Variables:

阴影变量:

tonegen.end: contains the event that caused tone generation to stop.

tonegen.end:包含导致音调生成停止的事件。

The following sections describe the child elements of <tonegen>.

以下各节介绍<tonegen>的子元素。

9.7.3.1. <tone>
9.7.3.1. <tone>

The <tone> element specifies a single tone with an optional silence interval. The tone specification consists of two tone frequencies, their attenuation values, a duration of the tone, and the number of times to repeat the tone.

元素指定具有可选静音间隔的单音。音调规范包括两个音调频率、它们的衰减值、音调的持续时间和重复音调的次数。

Attributes:

属性:

duration: time duration or length of the individual tone, specified in "ms" or "s" in increments of 10 ms. A value of 0 represents an infinite duration. Mandatory.

持续时间:单个音调的持续时间或长度,以“ms”或“s”为单位以10 ms为增量指定。值0表示无限持续时间。强制性的

iterate: specifies the number of times to execute the contents of <tone> element. A value of 'forever' represents infinite repetitions. Optional. Default is 1.

迭代:指定执行<tone>元素内容的次数。“永久”值表示无限重复。可选择的默认值为1。

Events:

活动:

none

没有一个

Child Elements:

子元素:

The child elements of <tone> element specify a single tone and an optional silence interval to be inserted at the end of tone generation. A tone is defined by <tone1> and <tone2> elements. Each <tone> element MUST contain at least one of <tone1> or <tone2>, or MAY contain <tone1> and <tone2> exactly once.

<tone>元素的子元素指定在音调生成结束时插入的单音和可选静音间隔。音调由<tone1>和<tone2>元素定义。每个<tone>元素必须至少包含<tone1>或<tone2>中的一个,或者可以只包含<tone1>和<tone2>一次。

<tone1>

<tone1>

Attributes:

属性:

freq: specifies the frequency of the first tone in "Hz", ranging from 0 to 3999 Hz. Mandatory.

频率:指定第一个音调的频率(以“Hz”为单位),范围从0到3999 Hz。强制性的

atten: specifies the attenuation level expressed in dBm0, ranging from 0 to -96 dBm0. Mandatory.

ATEN:指定以dBm0表示的衰减级别,范围从0到-96 dBm0。强制性的

<tone2>

<tone2>

Attributes:

属性:

freq: specifies the frequency of the second tone in "Hz", ranging from 0 to 3999 Hz. Mandatory.

频率:指定第二个音调的频率,单位为“Hz”,范围为0到3999 Hz。强制性的

atten: specifies the attenuation level expressed in dBm0, ranging from 0 to -96 dBm0. Mandatory.

ATEN:指定以dBm0表示的衰减级别,范围从0到-96 dBm0。强制性的

<silence> - Refer to the silence element definition below.

<silence>-请参阅下面的silence元素定义。

9.7.3.2. <silence>
9.7.3.2. <沉默>

The <silence> element inserts a silence interval as optional content of <tonegen> or <tone> elements.

<silence>元素插入一个静默间隔作为<tonegen>或<tone>元素的可选内容。

Attributes:

属性:

duration: specifies the amount of silence interval in "ms" or "s", in increments of 10ms. Mandatory.

持续时间:以“ms”或“s”为单位,以10ms为增量指定静默间隔量。强制性的

Events:

活动:

none

没有一个

9.7.3.3. <tonegenexit>
9.7.3.3. <tonegenexit>

The <tonegenexit> element MUST be invoked when the tone generation operation completes or is terminated as a result of receiving the terminate event. The <tonegenexit> element MAY be used to send events when the tone generation has completed.

当音调生成操作完成或由于接收到终止事件而终止时,必须调用<tonegenexit>元素。当音调生成完成时,<tonegenexit>元素可用于发送事件。

Attributes:

属性:

none

没有一个

9.7.4. <record>
9.7.4. <record>

Record creates a recording. Similar to play, <record> supports two states: create and suspend. Received media becomes part of the recording when <record> is in the create state and is discarded when it is in the suspend state.

记录创建一个记录。与播放类似,<record>支持两种状态:创建和挂起。当<record>处于创建状态时,接收到的媒体将成为记录的一部分;当<record>处于挂起状态时,接收到的媒体将被丢弃。

Recording MUST be terminated when a terminate event is received or when a nospeech event is received and no audio has yet been recorded. <record> differentiates different types of terminate events.

当接收到终止事件或接收到nospeech事件且尚未录制音频时,必须终止录制<记录>区分不同类型的终止事件。

An optional <play> element MAY be specified as a child element of <record>. This mechanism provides a complete play-record operation, where the prompts specified within the <play> element are played in advance of start of recording.

可选的<play>元素可以指定为<record>的子元素。此机制提供完整的播放录制操作,其中在开始录制之前播放<play>元素中指定的提示。

Note: Attributes prespeech, postspeech, and termkey provide a simplified mechanism for controlling record operations using implicit DTMF and VAD, without the use of <group> and event exchange mechanism.

注意:属性prespeech、postspeech和termkey提供了一种简化的机制,用于使用隐式DTMF和VAD控制记录操作,而不使用<group>和事件交换机制。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the record primitive.

id:可选标识符,可在别处引用,用于将事件发送到记录原语。

append: a boolean that defines whether the recording is allowed to be appended to an existing file if dest already exists. Default is "false". The attribute is ignored if the scheme is http.

追加:一个布尔值,定义如果dest已经存在,是否允许将录制追加到现有文件。默认值为“false”。如果方案是http,则忽略该属性。

dest: the destination for the recording, which will contain either audio only, video only, or both audio and video depending on the stream(s) being recorded. Recording MAY be either local or external based upon the attribute value. File and http schemes are supported.

dest:录制的目的地,它将包含仅音频、仅视频或音频和视频,具体取决于正在录制的流。根据属性值,记录可以是本地的,也可以是外部的。支持文件和http方案。

audiodest: the destination for the audio-only recording. Recording MAY be either local or external based upon the attribute value. All combinations of dest, audiodest, and videodest are valid. File and http schemes are supported.

audiodest:仅音频录制的目标。根据属性值,记录可以是本地的,也可以是外部的。dest、audiodest和videodest的所有组合都有效。支持文件和http方案。

videodest: the destination for the video-only recording. Recording MAY be either local or external based upon the attribute value. All combinations of dest, audiodest, and videodest are valid. File and http schemes are supported.

videodest:仅录制视频的目的地。根据属性值,记录可以是本地的,也可以是外部的。dest、audiodest和videodest的所有组合都有效。支持文件和http方案。

format: defines the encoding and file type of the recording. The format attribute is defined as a string type of form "audio|video/filetype;codecs=x,y". The keyword 'audio' identifies an audio only recording, while the keyword 'video' identifies video-only recording or an audio plus video recording. The codecs field identifies the audio and/or video codecs to be used for the recording, where the order of the codec values is not significant. In the event of audio and video recording, using 'video' keyword, the codecs=x,y field MAY be used to identify the audio codec and the video codec. Mandatory.

格式:定义录制的编码和文件类型。format属性定义为“audio | video/filetype;codecs=x,y”形式的字符串类型。关键字“音频”表示仅音频录制,而关键字“视频”表示仅视频录制或音频加视频录制。编解码器字段标识用于录制的音频和/或视频编解码器,其中编解码器值的顺序不重要。在音频和视频录制的情况下,使用“video”关键字,codecs=x,y字段可用于标识音频编解码器和视频编解码器。强制性的

codecconfig: identifies an optional special instruction string for codec configuration. Default is to send no special configuration string to the codec.

codecconfig:标识用于编解码器配置的可选特殊指令字符串。默认情况下,不向编解码器发送特殊配置字符串。

audiosamplerate: identifies audio sample rate in kHz. If not specified, the sample rate SHOULD be determined from the media source.

audiosamplerate:以kHz为单位标识音频采样率。如果未指定,则应从媒体源确定采样率。

audiosamplesize: identifies audio sample size in bits. If not specified, the sample size SHOULD be determined from the media source.

audiosamplesize:以位为单位标识音频样本大小。如果未指定,则应根据媒体源确定样本大小。

profile: identifies a video profile name specific to the codec. If not specified, default video profile of the codec SHOULD be selected for the recording.

profile:标识特定于编解码器的视频配置文件名称。如果未指定,则应为录制选择编解码器的默认视频配置文件。

level: identifies a video profile level to the codec. Default is to send no profile information to the codec and allow the codec to select an internal default.

级别:标识编解码器的视频配置文件级别。默认设置是不向编解码器发送配置文件信息,并允许编解码器选择内部默认设置。

imagewidth: identifies the width of video image in pixels. Default is to use image width information from the media source.

imagewidth:以像素为单位标识视频图像的宽度。默认情况下,使用媒体源中的图像宽度信息。

imageheight: identifies the height of video image in pixels. Default is to use image height information from the media source.

imageheight:以像素为单位标识视频图像的高度。默认情况下,使用媒体源中的图像高度信息。

maxbitrate: identifies the bitrate of the video signal in kbps. Default is to use maximum bitrate information from the media source.

maxbitrate:以kbps为单位标识视频信号的比特率。默认情况下,使用来自媒体源的最大比特率信息。

framerate: identifies the video frame rate in frames per second. Default is to use frame rate information from the media source.

帧速率:以每秒帧数为单位标识视频帧速率。默认情况下,使用来自媒体源的帧速率信息。

initial: defines the initial state for the record element. Default is "create", which starts the recording as soon as the <record> element is executed. The "initial" attribute is applicable only when <record> is used within the <group> structure.

初始:定义记录元素的初始状态。默认值为“create”,它在执行<record>元素后立即开始录制。只有在<group>结构中使用<record>时,“initial”属性才适用。

maxtime: defines the maximum length of the recording in units of time. Mandatory.

maxtime:以时间单位定义录制的最大长度。强制性的

prespeech: defines a timer value, in seconds, for detection of absence of audio energy at the start of the record operation. If no audio energy is detection for the amount of time specified by prespeech, the recording is terminated. Default is 0 s, which does not activate the prespeech timer.

prespeech:定义一个计时器值,以秒为单位,用于在录制操作开始时检测音频能量的缺失。如果在prespeech指定的时间内未检测到音频能量,则录音终止。默认值为0秒,这不会激活预说话计时器。

postspeech: defines a timer value, in seconds, for detection of absence of audio energy while the recoding is in progress. During an in progress recording, if absence of audio energy is detected as specified by the postspeech timer, the recording is terminated. Default is 0 s, which disables the ability to terminate a recording due to postspeech silence.

postspeech:定义一个计时器值,以秒为单位,用于在重新编码过程中检测音频能量的缺失。在正在进行的录制过程中,如果检测到语音后期计时器指定的音频能量缺失,则录制将终止。默认值为0秒,这将禁用由于语音后静音而终止录制的功能。

termkey: defines a single DTMF key that, when detected, terminates the recording. Absence of this attribute prevents the recording from being terminated due to detection of DTMF digits. When termkey is specified, the detected DTMF digit terminates the recording and the DTMF digit is not entered in the digit buffer.

termkey:定义一个DTMF键,当检测到该键时,终止录制。缺少此属性可防止由于检测到DTMF数字而终止录制。指定termkey时,检测到的DTMF数字将终止记录,并且DTMF数字不会输入数字缓冲区。

Events:

活动:

The following describes input events to the media primitive object. The MSML Dialog Group Package allows an event exchange mechanism between primitives.

下面介绍媒体原语对象的输入事件。MSML对话组包允许原语之间的事件交换机制。

pause: causes the record to enter the suspend state. Received media is discarded.

暂停:使记录进入暂停状态。接收到的媒体将被丢弃。

resume: causes the record to resume if it was suspended. It has no effect otherwise.

resume:如果记录被挂起,则使其恢复。否则就没有效果。

toggle-state: causes the suspend / create state to toggle.

切换状态:导致挂起/创建状态切换。

terminate: terminates the recording and assigns values to the shadow variables.

终止:终止录制并为阴影变量赋值。

terminate.cancelled: terminates the recording and assigns values to the shadow variables. If the dest attribute used the file scheme, the local recording is deleted. Applications are responsible for removing external files created using the http scheme.

terminate.cancelled:终止录制并为阴影变量赋值。如果dest属性使用文件方案,则会删除本地录制。应用程序负责删除使用http方案创建的外部文件。

terminate.finalsilence: terminates the recording and assigns values to the shadow variables. If the dest attribute used the file scheme, the final silence is removed from the recording.

terminate.FinalLence:终止录制并为阴影变量赋值。如果dest属性使用文件方案,则最终静音将从录制中删除。

nospeech: terminates the recording and assigns values to the shadow variables if it is received and no recording has yet been created. The "nospeech" event is ignored if audio has already been recorded.

nospeech:如果接收到阴影变量且尚未创建任何记录,则终止记录并为其赋值。如果已录制音频,“nospeech”事件将被忽略。

Shadow Variables:

阴影变量:

record.len: the actual length of the recording measured in units of time. This does not include time that may have elapsed while the record was in the suspend state.

record.len:以时间为单位测量的实际记录长度。这不包括记录处于挂起状态时可能经过的时间。

record.end: contains the event that caused the record to terminate. When the record terminates because maxtime is exceeded, end is assigned the value "record.complete.maxlength".

record.end:包含导致记录终止的事件。当记录因超过maxtime而终止时,end被赋值为“record.complete.maxlength”。

record.recordid: contains the value of the "dest" attribute, if supplied, otherwise contains a media server assigned record identifier.

record.recordid:包含“dest”属性的值(如果提供),否则包含媒体服务器分配的记录标识符。

Record termination due to prespeech silence results in assigned value of "record.failed.prespeech"

由于预说话静音导致记录终止,导致赋值为“Record.failed.prespeech”

Record termination due to postspeech silence results in assigned value of "record.complete.postspeech"

由于发言后沉默导致记录终止,导致分配值为“Record.complete.postspeech”

Record termination due to DTMF detection results in assigned value of "record.complete.termkey"

由于DTMF检测导致记录终止,导致赋值为“Record.complete.termkey”

The following sections describe the child elements of <record>.

以下各节介绍<record>的子元素。

9.7.4.1. <play>
9.7.4.1. <play>

The optional <play> element as a child element of <record> allows a prompt to be played prior to start of recording. The record operation starts at the end of the play sequence or if the play is barged by DTMF, assuming that barge=true is specified for <play>. For a complete description, refer to <play> element.

可选的<play>元素作为<record>的子元素,允许在开始录制之前播放提示。录制操作在播放序列结束时开始,或者如果播放被DTMF打断,则假定为<play>指定了barge=true。有关完整说明,请参阅<play>元素。

9.7.4.2. <tonegen>
9.7.4.2. <tonegen>

The optional <tonegen> element as a child element of <record> allows a tone or sequence of tones to be played prior to start of recording. The record operation starts at the end of the tone generation. For a complete description, refer to <tonegen> element.

可选的<tonegen>元素作为<record>的子元素,允许在开始录制之前播放音调或音调序列。录制操作在音调生成结束时开始。有关完整说明,请参阅<tonegen>元素。

9.7.4.3. <recordexit>
9.7.4.3. <recordexit>

The <recordexit> element MUST be invoked when the record operation completes or when the recording is terminated as a result of receiving the terminate event. The <recordexit> element MAY be used to send events when the recording has completed.

当记录操作完成或由于接收到终止事件而终止记录时,必须调用<recordexit>元素。<recordexit>元素可用于在录制完成时发送事件。

Attributes:

属性:

none

没有一个

9.7.5. <dtmf> or <collect>
9.7.5. <dtmf>或<collect>

DTMF input fulfills several roles within MSML dialogs. It is used to trigger events that will affect the media processing operation of other primitives. It is also used to collect DTMF digits from a media stream that are to be reported back to the user of MSML dialog. Often DTMF detection is used for both purposes. Barge is the most common example, where a prompt is stopped based upon DTMF input but more digits may remain to be collected.

DTMF输入在MSML对话框中扮演多个角色。它用于触发将影响其他原语的媒体处理操作的事件。它还用于从媒体流中收集DTMF数字,并将其报告给MSML对话的用户。DTMF检测通常用于这两个目的。驳船是最常见的例子,根据DTMF输入停止提示,但可能需要收集更多的数字。

DTMF detection supports multiple simultaneous recognition patterns. Different patterns can be used to trigger sending different events in order to implement DTMF controls. Alternatively, one pattern may be

DTMF检测支持多种同时识别模式。为了实现DTMF控制,可以使用不同的模式触发发送不同的事件。或者,可以选择一种模式

used to represent a collection and another pattern, a substring of the first, used as a barge indication.

用于表示一个集合和另一个图案,第一个的子串,用作驳船指示。

An optional <play> element MAY be specified as a child element of <dtmf> or <collect>. This mechanism provides a complete play-collect operation, where the prompt(s) specified within the <play> element are played in advance of DTMF digit collection.

可选的<play>元素可以指定为<dtmf>或<collect>的子元素。此机制提供完整的播放采集操作,其中<play>元素中指定的提示在DTMF数字采集之前播放。

Note that all patterns share the same digit collection buffer, inter-digit timing, a single <nomatch> element, and a single <noinput> element. As such, multiple patterns may not be suitable to support simultaneous collections for different purposes. When this is required, separate <dtmf> elements should be used instead.

请注意,所有模式共享相同的数字收集缓冲区、数字间定时、单个<nomatch>元素和单个<noinput>元素。因此,多个模式可能不适合支持用于不同目的的同时收集。需要时,应使用单独的<dtmf>元素。

<dtmf> terminates if any of the <pattern>, <noinput>, or <nomatch> elements are matched the maximum number of times that they are allowed. The number of times they may match may be specified as an attribute of <dtmf> or of the individual child elements.

如果<pattern>、<noinput>或<nomatch>元素中的任何一个匹配到允许的最大匹配次数,则<dtmf>终止。它们可能匹配的次数可以指定为<dtmf>或单个子元素的属性。

Element identifier <dtmf> is equivalent to <collect>. However, <collect> is the preferred name. MSML clients SHOULD use <collect>, while MSML servers SHOULD support both.

元素标识符<dtmf>相当于<collect>。但是,<collect>是首选名称。MSML客户端应使用<collect>,而MSML服务器应同时支持这两种功能。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to this primitive.

id:可选标识符,可在其他地方引用,用于将事件发送到此原语。

cleardb: a boolean indication of whether the buffer for digit collection should be cleared of any collected digits when the element is instantiated. If set to false, any digits currently in the buffer MUST be immediately compared against the pattern elements.

cleardb:一个布尔值,指示在实例化元素时,是否应清除数字收集缓冲区中收集的任何数字。如果设置为false,则必须立即将缓冲区中当前的任何数字与模式元素进行比较。

fdt: defines the first-digit timer value. The first-digit timer is started when DTMF detection is initially invoked. If no DTMF digits are detected during this initial interval, the <noinput> element MUST be invoked. Optional, default is 0 s (wait forever for the first digit).

fdt:定义第一位计时器值。最初调用DTMF检测时,第一个数字计时器启动。如果在此初始间隔期间未检测到DTMF数字,则必须调用<noinput>元素。可选,默认值为0秒(永远等待第一个数字)。

idt: defines the inter-digit timer to be used when digits are being collected. When specified, the timer is started when the first digit is detected and restarted on each subsequent digit. Timer expiration is applied to all patterns. After that, if any patterns remain active and a nomatch element is specified, the nomatch is executed and DTMF input MUST terminate. The idt attribute should only be used when digit collection is being performed. Optional, default is 4 s.

idt:定义收集数字时要使用的数字间计时器。指定后,当检测到第一个数字时,计时器启动,并在每个后续数字上重新启动。计时器过期将应用于所有模式。之后,如果任何模式保持活动状态并且指定了nomatch元素,则执行nomatch,DTMF输入必须终止。idt属性仅应在执行数字收集时使用。可选,默认值为4秒。

edt: defines the extra-digit timer value. Specifies the length of time the media server MUST wait after a match to detect a termination key, if one is specified by the <pattern> element. Optional, default is 4 s.

edt:定义额外的数字计时器值。如果<pattern>元素指定了终止密钥,则指定媒体服务器在匹配后检测终止密钥必须等待的时间长度。可选,默认值为4秒。

starttimer: boolean value that defines whether the first digit timer (fdt) is started initially. When set to false, the starttimer event must be received for it to start. Default is "false".

starttimer:定义是否初始启动第一位计时器(fdt)的布尔值。设置为false时,必须接收starttimer事件才能启动。默认值为“false”。

iterate: specifies the number of times the <pattern>, <noinput>, and <nomatch> elements may be executed unless those elements specify differently. The value "forever" MAY be used to indicate that these may be executed any number of times. Default is once '1'.

迭代:指定可以执行<pattern>、<noinput>和<nomatch>元素的次数,除非这些元素以不同的方式指定。值“forever”可用于指示可执行任意次数。默认值为一次“1”。

ldd: defines the minimum duration for a digit to be held in order for it to be detected as a long DTMF digit. A long DTMF digit event MUST be treated as a single DTMF event, and MUST contain an extra character 'L' at the end to be distinguished from the other regular digit events. For example, "#L" and "#" are different DTMF events. Optional, default of 0 s. A value of 0 s disables long DTMF digit detection and reporting. Attribute value is an integer with a valid range from 100 ms to 100 s (units MUST be supplied).

ldd:定义数字保持的最短持续时间,以便将其检测为长DTMF数字。长DTMF数字事件必须视为单个DTMF事件,并且必须在末尾包含一个额外的字符“L”,以区别于其他常规数字事件。例如,“#L”和“#”是不同的DTMF事件。可选,默认值为0秒。值为0 s将禁用长DTMF数字检测和报告。属性值是一个有效范围为100 ms到100 s(必须提供单位)的整数。

Events:

活动:

The following describes input events to the media primitive object. The MSML Dialog Group Package allows an event exchange mechanism between primitives.

下面介绍媒体原语对象的输入事件。MSML对话组包允许原语之间的事件交换机制。

starttimer: starts the first digit timer (fdt) if it has not already been started. Has no effect otherwise.

starttimer:如果尚未启动,则启动第一个数字计时器(fdt)。否则没有效果。

terminate: terminates the DTMF input and assigns values to the shadow variables.

终止:终止DTMF输入并为阴影变量赋值。

Shadow Variables:

阴影变量:

dtmf.digits: the string of DTMF digits that have been received (the contents of the digit buffer).

dtmf.digits:已接收的dtmf数字字符串(数字缓冲区的内容)。

dtmf.len: the number of digits in the digit buffer.

dtmf.len:数字缓冲区中的位数。

dtmf.last: the last digit in the digit buffer.

dtmf.last:数字缓冲区中的最后一个数字。

dtmf.end: contains the event that caused the <dtmf> to terminate or is assigned one of "dtmf.match", "dtmf.noinput", or "dtmf.nomatch" depending upon which of the corresponding elements reached its maximum.

dtmf.end:包含导致<dtmf>终止的事件,或根据相应元素中达到其最大值的元素,将其指定为“dtmf.match”、“dtmf.noinput”或“dtmf.nomatch”之一。

The following sections describe the child elements of <dtmf> or <collect>.

以下各节介绍<dtmf>或<collect>的子元素。

9.7.5.1. <play>
9.7.5.1. <play>

The optional <play> element as a child element of <dtmf> or <collect> allows a prompt to be played prior to DTMF digit collection. DTMF digit collection starts at the end of the play sequence or if the play is barged by DTMF, assuming that barge=true is specified for <play>. For a complete description, refer to <play> element.

可选的<play>元素作为<dtmf>或<collect>的子元素,允许在dtmf数字采集之前播放提示。DTMF数字采集在播放序列结束时开始,或者如果播放被DTMF打断,则假定为<play>指定了barge=true。有关完整说明,请参阅<play>元素。

9.7.5.2. <pattern>
9.7.5.2. <pattern>

The <pattern> element describes one or more DTMF digits that are to be recognized. When the pattern is matched, the child elements MUST be executed.

元素描述一个或多个要识别的DTMF数字。当模式匹配时,必须执行子元素。

Attributes:

属性:

digits: the digit pattern that should be matched. Mandatory.

数字:应匹配的数字模式。强制性的

format: an enumerated value that defines the format used to express the digit pattern. The format may be "mgcp" or "megaco" for patterns expressed as a digit map from those specifications, or as one of the simple built-in formats defined within this specification. Currently, a single built-in format "moml+digits" is defined that allows a match based on either one or more specific digits, or based upon a specific length specification with an optional return key. "moml+digits" is the default.

格式:一个枚举值,定义用于表示数字模式的格式。格式可以是“mgcp”或“megaco”,用于表示为这些规范中数字映射的模式,或本规范中定义的简单内置格式之一。目前,定义了单个内置格式“moml+数字”,允许基于一个或多个特定数字或基于具有可选返回键的特定长度规范进行匹配。“moml+数字”是默认值。

iterate: specifies the number of times the <pattern> may be matched. The value "forever" may be used to indicate that <pattern> may be matched any number of times. This value overrides any specified in <dtmf>. Default is once '1'.

迭代:指定可匹配<模式>的次数。值“永远”可用于指示<pattern>可匹配任意次数。此值覆盖<dtmf>中指定的任何值。默认值为一次“1”。

9.7.5.3. <detect>
9.7.5.3. <detect>

The contents of the <detect> element MUST be executed whenever any DTMF is first detected. It MUST be matched at most once.

无论何时首次检测到任何DTMF,都必须执行<detect>元素的内容。它最多只能匹配一次。

Attributes:

属性:

none

没有一个

9.7.5.4. <noinput>
9.7.5.4. <noinput>

The <noinput> element is used when DTMF is being collected. Children of the <noinput> element MUST be executed when DTMF has not been detected and the first digit timeout occurs.

收集DTMF时使用<noinput>元素。当未检测到DTMF且出现第一个数字超时时,必须执行<noinput>元素的子元素。

Attributes:

属性:

iterate: specifies the number of times the <noinput> may be triggered. The value "forever" may be used to indicate that <noinput> may be triggered any number of times. This value overrides any specified in <dtmf>. Default is once '1'.

迭代:指定可以触发<noinput>的次数。值“forever”可用于指示<noinput>可被触发任意次数。此值覆盖<dtmf>中指定的任何值。默认值为一次“1”。

9.7.5.5. <nomatch>
9.7.5.5. <nomatch>

The <nomatch> element is used when DTMF is being collected. Children of the <nomatch> element MUST be executed when it is determined that none of the individual patterns can be matched.

收集DTMF时使用<nomatch>元素。当确定无法匹配任何单个模式时,必须执行<nomatch>元素的子元素。

Attributes:

属性:

iterate: specifies the number of times the <nomatch> may be triggered. The value "forever" may be used to indicate that <nomatch> may be triggered any number of times. This value overrides any specified in <dtmf>. Default is once '1'.

迭代:指定可触发<nomatch>的次数。值“forever”(永久)可用于指示<nomatch>可被触发任意次数。此值覆盖<dtmf>中指定的任何值。默认值为一次“1”。

9.7.5.6. <dtmfexit>
9.7.5.6. <dtmfexit>

The <dtmfexit> element MUST be invoked when the dtmf input completes because one of <pattern>, <noinput>, or <nomatch> occurred its maximum number of times.

dtmf输入完成时必须调用<dtmfexit>元素,因为<pattern>、<noinput>或<nomatch>中的一个出现的次数最多。

Attributes:

属性:

None

没有一个

9.7.6. <moml>
9.7.6. <moml>

The root element <moml> MUST be used when the document is a stand-alone MSML dialog, where the invoking application media type indicates 'application/moml+xml'. Additionally, for backwards compatibility, the <moml> element MUST be used within <dialogstart>, which contains an inline embedded MSML dialog.

当文档是独立的MSML对话框时,必须使用根元素<moml>,其中调用的应用程序媒体类型指示“application/moml+xml”。此外,为了向后兼容,<moml>元素必须在包含内嵌MSML对话框的<dialogstart>中使用。

Valid contents of <moml> are all elements described within this MSML Dialog Base Package.

<moml>的有效内容是此MSML对话框基本包中描述的所有元素。

Attributes:

属性:

version: "1.0" Mandatory.

版本:“1.0”为必填项。

id: an identifier unique to this object. Events returned from MSML dialog (the "target" attribute of a <send> is equal to "source") will be correlated with this identifier. Mandatory.

id:此对象唯一的标识符。从MSML对话框返回的事件(a<send>的“target”属性等于“source”)将与此标识符关联。强制性的

Events:

活动:

terminate: terminates the MOML context. A terminate event gets sent to the currently executing <group> or primitive.

终止:终止MOML上下文。终止事件被发送到当前正在执行的<group>或原语。

9.8. MSML Dialog Group Package
9.8. MSML对话框组包

The group package defines a single control flow construct that specifies concurrent execution. Primitives are composed for concurrent execution by placing them within a <group> element. Groups define how media flows between multiple concurrently executing primitives. They have one or more inputs and one or more outputs. A <group> represents the declaration of a complex media processing operation. The event interaction between primitives (see the following subsection) is defined within the context of one or more groups. However groups themselves do not scope events, they simply define that primitives are concurrently executing and a primitive must be executing in order to receive an event.

组包定义指定并发执行的单个控制流构造。通过将原语放置在<group>元素中,它们被组合为并发执行。组定义媒体如何在多个并发执行的原语之间流动。它们有一个或多个输入和一个或多个输出。<group>表示复杂媒体处理操作的声明。在一个或多个组的上下文中定义了基本体之间的事件交互(请参见下面的小节)。然而,组本身并不限定事件的范围,它们只是定义原语是并发执行的,并且必须执行原语才能接收事件。

Placing primitives within a group structure is an optional feature of this specification. It allows for complex services to created using the event exchange mechanism between the primitives. For simpler services, such as play/collect or play/record, the use of group mechanism is not necessary. MSML Dialog Group Package is dependent on the MSML Dialog Base Package.

在组结构中放置原语是本规范的可选功能。它允许使用原语之间的事件交换机制创建复杂的服务。对于更简单的服务,如播放/收集或播放/录制,不需要使用组机制。MSML对话框组包依赖于MSML对话框基本包。

Groups may also be used to describe media objects that transform a media stream while optionally allowing application or user control of the transformation. For example, a gain control could be defined that responds to user speech or DTMF input. In this case, a recognition primitive would send events to a gain control primitive.

组还可用于描述转换媒体流的媒体对象,同时可选地允许应用程序或用户控制转换。例如,可以定义响应用户语音或DTMF输入的增益控制。在这种情况下,识别原语将向增益控制原语发送事件。

Groups have one attribute that defines the media flow within them. They also have a dimension that defines how many media inputs and outputs they have. Currently, dimensions of 1 and 2 are supported based upon the group topology. These correspond to a group with one input and one output and a group with two inputs and two outputs.

组有一个属性,用于定义其中的媒体流。它们还有一个维度,定义了它们有多少媒体输入和输出。目前,基于组拓扑结构,支持维度1和维度2。它们分别对应一个有一个输入和一个输出的组和一个有两个输入和两个输出的组。

Media flow to and from the primitives within the group is based upon a topology attribute of the <group> element. The topology attribute defines a topology schema and implies the group dimension.

进出组内基本体的媒体流基于<group>元素的拓扑属性。topology属性定义拓扑架构并暗示组维度。

There are several common ways in which primitives are often connected together. A schema provides a convenient template that can be applied to multiple primitives without having to define all of the individual media relationships. The following two schemas are initially defined for one-dimensional groups:

有几种常见的方式可以将原语连接在一起。模式提供了一个方便的模板,可以应用于多个原语,而无需定义所有单独的媒体关系。以下两个模式最初是为一维组定义的:

o parallel: specifies that media sent to the group is sent to every primitive that has an input. The group bridges the output from every primitive that has an output into a single common group output.

o 并行:指定将发送到组的介质发送到每个具有输入的基元。该组将具有输出的每个原语的输出桥接到单个公共组输出中。

o serial: specifies that the first primitive listed in the group receives the media sent to the group. Its output is to be connected to the input of the next primitive defined within the group and so on until the last primitive within the group becomes the group output.

o 串行:指定组中列出的第一个原语接收发送到组的媒体。其输出将连接到组中定义的下一个基元的输入,依此类推,直到组中的最后一个基元成为组输出。

Groups with these topologies are shown in the two diagrams below. The group on the left has a parallel topology and that on the right has a serial topology.

具有这些拓扑的组如下图所示。左侧的组具有并行拓扑,右侧的组具有串行拓扑。

           /-> P1 --\
          /          \
   G(in) +---> P2 ----> G(out)     G(in) --> P1 --> P2 --> P3 --> G(out)
          \          /
           \-> P3 --/
        
           /-> P1 --\
          /          \
   G(in) +---> P2 ----> G(out)     G(in) --> P1 --> P2 --> P3 --> G(out)
          \          /
           \-> P3 --/
        

More complex media flows MAY be created by nesting groups of serial and parallel topologies within each other. For example, the diagram below has a group with a serial topology nested within a star topology.

更复杂的媒体流可以通过将串行和并行拓扑组嵌套在彼此之间来创建。例如,下图中有一个组,其串行拓扑嵌套在星形拓扑中。

               /-----> P1 ------------------------\
              /                                    \
      Gs(in) +-> Gp(in) --> P2 --> P3 --> Gp(out) -+> Gs(out)
        
               /-----> P1 ------------------------\
              /                                    \
      Gs(in) +-> Gp(in) --> P2 --> P3 --> Gp(out) -+> Gs(out)
        

This combination could be used to create record operation where DTMF was to be clamped from the recording itself, but a DTMF key press is still used to stop the recording. In this case, P1 would be a DTMF recognizer, P2 would be a clamp primitive, and P3 a recorder as shown by the following example. This example omits child elements and attributes not concerned with the core concept. The following section discusses sending events, and the details of each of the primitives are found in section 4.

这种组合可用于创建录制操作,其中DTMF将被从录制本身钳制,但仍使用DTMF按键停止录制。在这种情况下,P1将是DTMF识别器,P2将是钳位原语,P3将是记录器,如以下示例所示。本例省略了与核心概念无关的子元素和属性。下一节讨论发送事件,每个原语的详细信息见第4节。

      <group topology="parallel">
         <dtmf/>
         <group topology="serial">
            <clamp/>
            <record/>
         </group>
      </group>
        
      <group topology="parallel">
         <dtmf/>
         <group topology="serial">
            <clamp/>
            <record/>
         </group>
      </group>
        

A single schema, "fullduplex", is defined for a two-dimensional group. A full-duplex two-dimensional group has exactly two immediate children. Those children may be primitives or other one-dimensional groups. A "fullduplex" group must only be used as the top-most group and must not be nested. Each primitive (P1) and group (G2) becomes half of the full-duplex group as shown in the diagram below.

为二维组定义了单个模式“全双工”。全双工二维组正好有两个直接子级。这些孩子可能是原始人或其他一维群体。“全双工”组只能用作最顶层的组,不得嵌套。如下图所示,每个原语(P1)和组(G2)成为全双工组的一半。

      G-A(in1)  +-> G2 --> G-B(out1)
        
      G-A(in1)  +-> G2 --> G-B(out1)
        
      G-A(out2) <-- P1 <-+ G-B(in2)
        
      G-A(out2) <-- P1 <-+ G-B(in2)
        

Full-duplex groups are symmetrical when both halves are the same. They are asymmetrical when they differ. Asymmetric groups need to have a name associated with each side. The left side is defined as the input of the first child of the full-duplex group combined with the output of the second child. The right side is reverse. These sides were labeled A and B respectively in the preceding diagram.

当两半相同时,全双工组是对称的。当它们不同时,它们是不对称的。非对称组需要有一个与每一方关联的名称。左侧定义为全双工组的第一个子级的输入与第二个子级的输出相结合。右边是反面。在上图中,这些边分别标记为A和B。

An example of a full-duplex group is the user operated gain control mentioned at the beginning of this subsection. The gain should operate on the audio that a user hears, but the gain is controlled by recognizing things such as DTMF or spoken commands in media that the user originates. The following shows the XML tag grouping that would accomplish this and corresponds to the media flow shown in the diagram above. If the user's audio is not required for anything other than control of the gain, then the <relay> is not required and the internal group could be omitted. A complete XML description for this is included in the examples section.

全双工组的一个例子是本小节开头提到的用户操作增益控制。增益应作用于用户听到的音频,但增益是通过识别用户发出的媒体中的DTMF或语音命令来控制的。下面显示了实现这一点的XML标记分组,它对应于上图中所示的媒体流。如果除了增益控制之外,不需要用户音频,则不需要<relay>,可以省略内部组。示例部分中包含了对此的完整XML描述。

      <group topology="fullduplex">
         <group topology="parallel">
            <dtmf/>
            <relay/>
         </group>
         <gain/>
      </group>
        
      <group topology="fullduplex">
         <group topology="parallel">
            <dtmf/>
            <relay/>
         </group>
         <gain/>
      </group>
        

Primitives within a group MUST begin concurrently but MAY finish asynchronously based upon events that they receive or their task completes. A group MUST terminate when all of the primitives within

组中的原语必须同时开始,但可以根据接收到的事件或任务完成情况异步结束。当组中的所有基元

it have completed. If the group contains a <groupexit> element, then the contents of that element MUST be executed as part of group termination.

它已经完成了。如果组包含<groupexit>元素,则该元素的内容必须作为组终止的一部分执行。

A group itself MAY receive a terminate event requesting termination. A terminate event sent to the group causes a terminate event to be sent to each of its currently active primitives. The <groupexit> element is not executed until all primitives have processed their respective terminate events.

组本身可能会收到请求终止的终止事件。发送到组的终止事件将导致向其当前活动的每个基本体发送终止事件。在所有原语处理完各自的终止事件之后,<groupexit>元素才会执行。

9.8.1. <group>
9.8.1. <group>

The <group> element allows the contained primitives to be executed concurrently.

<group>元素允许同时执行包含的原语。

Attributes:

属性:

topology: specifies a schema that defines the flow of media within the group. Three schemas are initially defined. "fullduplex" is specified for use with two-dimensional groups. "parallel" and "serial" are for use with one-dimensional groups. The definitions of these topologies are in section 9.8. Mandatory.

拓扑:指定定义组内媒体流的架构。最初定义了三种模式。“全双工”指定用于二维组。“并行”和“串行”用于一维组。这些拓扑的定义见第9.8节。强制性的

id: identifies the name of the group. Mandatory when groups are nested.

id:标识组的名称。嵌套组时为必填项。

Events:

活动:

terminate: causes a terminate event to be sent to each element contained within the group.

终止:导致向组中包含的每个元素发送终止事件。

9.8.2. <groupexit>
9.8.2. <groupexit>

The <groupexit> element allows events to be sent when group processing completes. Group processing completes when all contained primitives terminate.

<groupexit>元素允许在组处理完成时发送事件。当所有包含的原语终止时,组处理完成。

Attributes:

属性:

none

没有一个

Events:

活动:

none

没有一个

9.9. MSML Dialog Transform Package
9.9. MSML对话框转换包

The MSML Dialog Transform Package gathers together the simple primitives that work as filters on half-duplex media streams.

MSML对话框转换包将在半双工媒体流上用作过滤器的简单原语汇集在一起。

9.9.1. <vad>
9.9.1. <vad>

Voice activity detection (VAD) is used to detect voice and silence when speech recognition is not required. Similar to both speech and DTMF, a VAD has different media conditions that it can match. Those conditions can be qualified by a minimum length of time that is required for them to be considered recognized.

语音活动检测(VAD)用于在不需要语音识别时检测语音和静音。与语音和DTMF类似,VAD具有不同的媒体条件,可以匹配。这些条件可以通过被认为是公认的条件所需的最短时间来确定。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the vad primitive.

id:可选标识符,可在别处引用,用于向vad原语发送事件。

starttimer: boolean value that defines whether the timer is started to allow recognition of the initial condition (voice, silence). When set to false, the starttimer event must be received in order for the initial condition to be recognized. The timer does not affect recognition of the transition conditions. Default is "false".

starttimer:布尔值,定义是否启动计时器以允许识别初始条件(语音、静音)。当设置为false时,必须接收starttimer事件才能识别初始条件。计时器不影响转换条件的识别。默认值为“false”。

Events:

活动:

starttimer: starts the timer to allow recognition of the initial condition if it has not already been started. Has no effect otherwise.

starttimer:启动计时器以允许识别初始条件(如果尚未启动)。否则没有效果。

terminate: terminates voice activity detection.

终止:终止语音活动检测。

Shadow Variables:

阴影变量:

none

没有一个

The following sections describe the child elements of <vad>.

以下各节介绍<vad>的子元素。

9.9.1.1. <voice>, <silence>, <tvoice>, <tsilence>
9.9.1.1. <voice>,<silence>,<tvoice>,<tsilence>

Each child element corresponds to a condition that a VAD can detect. The first two detect when voice or silence has been initially present for a minimum length of time since the VAD was started. The second two require that a transition to the voice or silence condition first occur.

每个子元素对应于VAD可以检测到的条件。前两种方法检测自VAD启动后,语音或静音最初出现的最短时间。第二种情况要求首先过渡到语音或静音状态。

Attributes:

属性:

len: the length of time the condition must persist in order to be recognized. Mandatory. In the case of <tvoice> and <tsilence>, the length of time applies only to the final recognized condition.

len:条件必须持续的时间长度才能被识别。强制性的在<tvoice>和<tsilence>的情况下,时间长度仅适用于最终识别的条件。

sen: the maximum length of time the condition not being detected may occur without causing the detector to begin measuring that condition.

sen:在不引起探测器开始测量该条件的情况下,可能出现未被检测到的条件的最长时间。

9.9.2. <gain>
9.9.2. <增益>

Gain MAY be used to adjust of the gain of a media stream by a specific amount. Application of <gain> removes any previous connection AGC setting used by the <agc> element.

增益可用于将媒体流的增益调整特定量。应用<gain>将删除<AGC>元件以前使用的任何连接AGC设置。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the gain primitive.

id:可选标识符,可在别处引用,用于向增益原语发送事件。

incr: an increment, expressed in dB, that will be used to adjust the gain when "louder" and "softer" events are received. Default is 3 dB.

增量:以dB表示的增量,用于在接收到“更大”和“更软”事件时调整增益。默认值为3 dB。

amt: a specific gain to apply specified in dB. Mandatory.

amt:以dB为单位的特定增益。强制性的

Events:

活动:

mute: self-explanatory.

哑巴:不言而喻。

unmute: self-explanatory.

取消静音:不言自明。

reset: sets the gain to zero dB.

重置:将增益设置为零dB。

louder: makes the audio on a stream louder.

更响亮:使流上的音频更响亮。

softer: makes the audio on a stream quieter.

柔和:使流上的音频更安静。

amt: sets the gain to the specified value between -96 dB and 96 dB.

amt:将增益设置为-96 dB到96 dB之间的指定值。

9.9.3. <agc>
9.9.3. <agc>

Automatic gain control MAY be used to have a media server automatically adjust the gain of a media stream. Application of <agc> removes any previous connection gain setting used by the <gain> element.

自动增益控制可用于使媒体服务器自动调整媒体流的增益。应用<agc>将删除<gain>元件以前使用的任何连接增益设置。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the gain primitive.

id:可选标识符,可在别处引用,用于向增益原语发送事件。

tgtlvl: the desired target level for AGC, specified in dBm0 with a valid range of -40 to 0. Mandatory.

tgtlvl:AGC所需的目标级别,以dBm0为单位指定,有效范围为-40到0。强制性的

maxgain: an optional attribute used to specify the maximum gain that AGC will apply, specified in dBm0 with a valid range of 0 to 40, with a default of 10.

maxgain:用于指定AGC将应用的最大增益的可选属性,在dBm0中指定,有效范围为0到40,默认值为10。

Events:

活动:

mute: self-explanatory.

哑巴:不言而喻。

unmute: self-explanatory.

取消静音:不言自明。

9.9.4. <gate>
9.9.4. <gate>

The <gate> element is a simple filter that will pass or halt media, regardless of the format of the media stream, based on the events it receives. <gate> shares the same mute and unmute events for compatibility with the gain primitives <gain> and <agc>.

<gate>元素是一个简单的过滤器,它将根据接收到的事件传递或停止媒体,而不管媒体流的格式如何<gate>共享相同的静音和取消静音事件,以与增益原语<gain>和<agc>兼容。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the gate primitive.

id:可选标识符,可在别处引用,用于将事件发送到gate原语。

initial: the values "pass" and "halt" define whether media is initially allowed to pass. Default is to pass.

初始:值“pass”和“halt”定义最初是否允许介质通过。默认值为通过。

Events:

活动:

mute: halts media flow through the primitive.

静音:停止媒体在原语中的流动。

unmute: allows media to pass through the primitive.

取消静音:允许媒体通过原语。

9.9.5. <clamp>
9.9.5. <clamp>

This element MAY be used to filter DTMF tones from a media stream. Media other than DTMF tones is passed unchanged.

该元件可用于从媒体流过滤DTMF音调。除DTMF音以外的其他媒体的传递方式不变。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the clamp primitive.

id:一个可选标识符,可在别处引用,用于向clamp原语发送事件。

Events:

活动:

none.

没有一个

9.9.6. <relay>
9.9.6. <relay>

This element is a simple primitive that copies its input to its output.

这个元素是一个简单的原语,它将输入复制到输出。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the relay primitive.

id:可选标识符,可在别处引用,用于向中继原语发送事件。

Events:

活动:

none.

没有一个

9.10. MSML Dialog Speech Package
9.10. MSML对话语音包

The MSML speech package defines functionality that MAY be used for automatic speech recognition <speech> and extends the <play> primitive defined in the MSML Dialog Base Package to include speech synthesis. As such, this package depends on the MSML Dialog Base Package.

MSML语音包定义了可用于自动语音识别<speech>的功能,并扩展了MSML对话框基本包中定义的<play>原语,以包括语音合成。因此,此包依赖于MSML对话框基本包。

9.10.1. <speech>
9.10.1. <speech>

The <speech> element activates grammars or user input rules associated with speech recognition. If multiple grammars are specified, all are activated. All active grammars share the same timers, recognition attributes, and <noinput> and <nomatch> elements. Each grammar may have its own <match> element.

<speech>元素激活与语音识别相关的语法或用户输入规则。如果指定了多个语法,则所有语法都将被激活。所有活动语法共享相同的计时器、识别属性以及<noinput>和<nomatch>元素。每个语法都可能有自己的<match>元素。

<speech> terminates if any of the <grammar>, <noinput>, or <nomatch> elements are matched the maximum number of times that they are allowed. The number of times they may match may be specified as an attribute of <speech> or of the individual child elements.

如果<grammar>、<noinput>或<nomatch>元素中的任何一个匹配到允许的最大次数,则<speech>终止。它们可能匹配的次数可以指定为<speech>或单个子元素的属性。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the speech primitive.

id:可选标识符,可在别处引用,用于向语音原语发送事件。

noint: specifies a time period during which speech input must be started; otherwise, the associated <noinput> element is invoked.

noint:指定必须开始语音输入的时间段;否则,将调用关联的<noinput>元素。

norect: specifies a maximum time period during which speech must begin to be matched; otherwise, the associated <nomatch> element is invoked.

norect:指定必须开始匹配语音的最长时间段;否则,将调用关联的<nomatch>元素。

spcmplt: specifies the length of silence necessary after speech before a result will be finalized in the case where there is a complete match of an active grammar. Following the silence, the appropriate <match> element will be triggered if the result is above the confidence level. Otherwise, a <nomatch> element will be triggered.

spcmplt:指定在活动语法完全匹配的情况下,演讲结束后在最终确定结果之前所需的沉默时间。沉默后,如果结果高于置信水平,将触发相应的<match>元素。否则,将触发<nomatch>元素。

spincmplt: specifies the length of silence necessary after speech before a result will be finalized in the case where there is a incomplete match of all active grammars. Following the silence, the <nomatch> element will be triggered.

spincmplt:指定在所有活动语法不完全匹配的情况下,在最终确定结果之前,演讲结束后所需的静默时间长度。静音后,将触发<nomatch>元素。

confidence: the minimum confidence level that the recognizer must have to consider a recognition result as matching a grammar. Expressed as an integer between 1-100.

置信度:识别器必须考虑识别结果与语法匹配的最小置信水平。表示为1-100之间的整数。

sens: specifies the sensitivity of the recognizer to determine whether speech is present. Lower sensitivity may be required for the recognizer to work well in the presence of high background noise or line echo.

sens:指定识别器确定是否存在语音的灵敏度。识别器可能需要较低的灵敏度才能在存在高背景噪声或线回波的情况下正常工作。

starttimer: boolean value that defines whether the no input (noint) and no recognition (norect) are started initially. When set to false, the starttimer event must be received in order to start them. Default is "false".

starttimer:一个布尔值,定义最初是否启动无输入(noint)和无识别(norect)。设置为false时,必须接收starttimer事件才能启动它们。默认值为“false”。

iterate: specifies the number of times the <grammar>, <noinput>, and <nomatch> elements may be executed unless those elements specify differently. The value "forever" may be used to indicate that these may be executed any number of times. Default is once '1'.

迭代:指定可以执行<grammar>、<noinput>和<nomatch>元素的次数,除非这些元素以不同的方式指定。值“forever”可用于指示可执行任意次数。默认值为一次“1”。

Events:

活动:

sens: sets the sensitivity of the recognizer as described above.

传感器:如上所述设置识别器的灵敏度。

starttimer: starts the no input (noint) and no recognition (norect) timers if they have not already been started. Has no effect otherwise.

starttimer:启动无输入(noint)和无识别(norect)计时器(如果尚未启动)。否则没有效果。

terminate: terminates the speech input and assigns values to the shadow variables.

终止:终止语音输入并为阴影变量赋值。

Shadow Variables:

阴影变量:

speech.end: contains the event that caused the <speech> to terminate or is assigned one of "speech.match", "speech.noinput", or "speech.nomatch" depending upon which of the corresponding elements reached its maximum.

speech.end:包含导致<speech>终止的事件,或根据相应元素中达到最大值的元素,将其指定为“speech.match”、“speech.noinput”或“speech.nomatch”之一。

speech.results: contains the results of a matched grammar. The results are formatted using the Natural Language Semantics Markup Language (NLSML) [n4]. When this variable is referenced to return results, the results are returned as a separate MIME entity.

speech.results:包含匹配语法的结果。使用自然语言语义标记语言(NLSML)[n4]对结果进行格式化。当引用此变量以返回结果时,结果将作为单独的MIME实体返回。

The following sections describe the child elements of <speech>.

以下各节介绍<speech>的子元素。

9.10.1.1. <grammar>
9.10.1.1. <语法>

The <grammar> element specifies and activates a speech grammar based on Speech Recognition Grammar Specification (SRGS) [n3] XML notation. Grammars may be referenced by a URI or defined inline. Child elements of <match> MUST be executed when the specified speech grammar is matched.

元素指定并激活基于语音识别语法规范(SRGS)[n3]XML表示法的语音语法。语法可以由URI引用或内联定义。当指定的语音语法匹配时,必须执行<match>的子元素。

Attributes:

属性:

uri: specifies the location of an SRGS grammar when the grammar is not defined inline.

uri:指定未内联定义语法时SRGS语法的位置。

iterate: specifies the number of times the <grammar> may be matched. The value "forever" MAY be used to indicate that <grammar> may be matched any number of times. This value overrides any specified in <speech>. Default is once '1'.

迭代:指定可以匹配<grammar>的次数。值“forever”可用于指示<grammar>可匹配任意次数。此值覆盖<speech>中指定的任何值。默认值为一次“1”。

9.10.1.2. <match>
9.10.1.2. <match>

<match> is a child of <grammar> and specifies the actions to take when the corresponding grammar is matched.

<match>是<grammar>的子级,指定匹配相应语法时要执行的操作。

9.10.1.3. <noinput>
9.10.1.3. <noinput>

The <noinput> element is used when speech is being recognized. Children of the <noinput> element MUST be executed when speech has not been detected and the no input timeout (noint) occurs.

在识别语音时使用<noinput>元素。当未检测到语音且无输入超时(noint)发生时,必须执行<noinput>元素的子元素。

Attributes:

属性:

iterate: specifies the number of times the <noinput> may be triggered. The value "forever" may be used to indicate that <noinput> may be triggered any number of times. This value overrides any specified in <speech>. Default is once '1'.

迭代:指定可以触发<noinput>的次数。值“forever”可用于指示<noinput>可被触发任意次数。此值覆盖<speech>中指定的任何值。默认值为一次“1”。

9.10.1.4. <nomatch>
9.10.1.4. <nomatch>

The <nomatch> element is used when speech is being recognized. Children of the <nomatch> element MUST be executed when it is determined that none of the active grammars will match.

识别语音时使用<nomatch>元素。当确定所有活动语法都不匹配时,必须执行<nomatch>元素的子元素。

Attributes:

属性:

iterate: specifies the maximum number of times the <nomatch> may be triggered. The value "forever" MAY be used to indicate that <nomatch> may be triggered any number of times. This value overrides any specified in <speech>. Default is once '1'.

迭代:指定可触发<nomatch>的最大次数。值“forever”(永久)可用于指示<nomatch>可被触发任意次数。此值覆盖<speech>中指定的任何值。默认值为一次“1”。

9.10.1.5. <speechexit>
9.10.1.5. <speechexit>

The <speechexit> element MUST be invoked when the speech input completes because one of <grammar>, <noinput>, or <nomatch> occurred its maximum number of times.

语音输入完成时必须调用<speechexit>元素,因为<grammar>、<noinput>或<nomatch>中的一个出现的次数最大。

Attributes:

属性:

none

没有一个

9.10.2. <play>
9.10.2. <play>

The <play> element, as defined in the MSML Dialog Base Package, is extended with a new child element for synthesizing speech. From an XML perspective, <tts> is a member of a media substitution group. See the schema at the end of this document for details.

MSML对话框基本包中定义的<play>元素使用新的子元素进行扩展,用于合成语音。从XML的角度来看,<tts>是媒体替换组的成员。有关详细信息,请参阅本文档末尾的模式。

The following sections describe the child elements of <play>.

以下各节介绍了<play>的子元素。

9.10.2.1. <tts>
9.10.2.1. <tts>

Contents of the <tts> element are rendered using text-to-speech services and must be compliant to the SSML specification [n11]. Element content MAY be plain text, contain the SSML <speak> element, or the uri attribute should identify the location of text to be rendered.

<tts>元素的内容使用文本到语音服务呈现,并且必须符合SSML规范[n11]。元素内容可以是纯文本,包含SSML<speak>元素,或者uri属性应该标识要呈现的文本的位置。

Attributes:

属性:

uri: identifies the location of the text to be rendered. The file and http schemes are supported.

uri:标识要呈现的文本的位置。支持文件和http方案。

iterate: specifies the number of times the text-to-speech block is to be rendered. Defaults to once '1'.

迭代:指定文本到语音块的渲染次数。默认为一次“1”。

xml:lang: specifies the language to use when it is not explicitly specified as an attribute for <speak>.

xml:lang:指定未明确指定为<speak>的属性时要使用的语言。

9.11. MSML Dialog Fax Detection Package
9.11. MSML对话框传真检测包

The Fax Detection Package defines primitives that allow a media server to provide facsimile detection services.

传真检测包定义了允许媒体服务器提供传真检测服务的原语。

9.11.1. <faxdetect>
9.11.1. <faxdetect>

Fax tone detection is used to detect the presence of the T.30 Calling Tone (CNG) or Called Station Identification (CED) tone in a media stream. Child elements of <faxdetectexit> MUST be executed when a CNG tone is detected.

传真音调检测用于检测媒体流中是否存在T.30主叫音调(CNG)或被叫站标识(CED)音调。当检测到CNG音调时,必须执行<faxdetectexit>的子元素。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the faxdetect primitive.

id:可选标识符,可在别处引用,用于向faxdetect原语发送事件。

Events:

活动:

terminate: terminates fax tone detection and assigns values to the associated shadow variables.

终止:终止传真音检测并为相关的阴影变量赋值。

Shadow Variables:

阴影变量:

faxdetect.tone: A string that specifies the fax tone type detected by the media server. Values supported SHOULD include "CED", "CNG", or empty string. The empty string MUST be used if fax tone detection terminated before detection of a fax tone, resulting in execution of the <faxdetectexit> element.

faxdetect.tone:指定媒体服务器检测到的传真音调类型的字符串。支持的值应包括“CED”、“CNG”或空字符串。如果在检测传真音之前终止传真音检测,导致执行<faxdetectexit>元素,则必须使用空字符串。

faxdetect.end: A string value that specifies the reason for termination of <faxdetect>. Values supported SHOULD include "faxdetect.complete" (due to detection of CED or CNG tone), "faxdetect.failed.noresource" (failed due to lack of resources on the media server), "faxdetect.failed" (failed due to any other reason) "faxdetect.terminated" (terminated by <dialogend>), or undefined.

faxdetect.end:一个字符串值,指定终止<faxdetect>的原因。支持的值应包括“faxdetect.complete”(由于检测到CED或CNG音调)、“faxdetect.failed.noresource”(由于媒体服务器上缺少资源而失败)、“faxdetect.failed”(由于任何其他原因而失败)、“faxdetect.terminated”(由<dialogend>终止)或未定义。

9.11.2. <faxdetectexit>
9.11.2. <faxdetectexit>

The <faxdetectexit> element MUST be invoked when fax detection, invoked via <faxdetect>, terminates. Child elements of <faxdetectexit>, <send> and <exit>, allow events to be reported by the media server.

当通过<faxdetect>调用的传真检测终止时,必须调用<faxdetectexit>元素。<faxdetectexit>、<send>和<exit>的子元素允许媒体服务器报告事件。

Attributes:

属性:

none

没有一个

9.12. MSML Dialog Fax Send/Receive Package
9.12. MSML对话框传真发送/接收包
9.12.1. <faxsend>
9.12.1. <faxsend>

The <faxsend> primitive provides the functionality of a calling fax terminal. This typically means sending a set of pages. However, it can also mean requesting the called terminal to send pages instead of, or in addition to, receiving pages. The fax images to send are defined by the <sendobj> elements, described below.

<faxsend>原语提供呼叫传真终端的功能。这通常意味着发送一组页面。然而,它也可以意味着请求被叫终端发送页面而不是接收页面,或者除了接收页面之外。要发送的传真图像由<sendobj>元素定义,如下所述。

Requesting the called terminal to send pages happens when the <rxpoll> element is included as part of <faxsend>. This element may be included in addition to, or instead of, the <sendobj> element. One <sendobj> (at a minimum) or <rxpoll> element must be present. When both are present, a media server will first send pages and will then poll the other terminal, requesting pages.

当<rxpoll>元素作为<faxsend>的一部分包含时,请求被调用的终端发送页面。该元素可以包括在<sendobj>元素之外,也可以代替<sendobj>元素。必须存在一个<sendobj>(至少)或<rxpoll>元素。当两者都存在时,媒体服务器将首先发送页面,然后轮询另一个终端,请求页面。

Because fax is a distinct media type, the <faxsend> primitive is not expected to interact with other primitives. Rather, it will interact using fax protocols with a remote fax terminal (or gateway) and will send requested status events to its invoking environment. During fax operation, shadow variables are used to record the progress and parameters of the varying stages of fax operation.

由于传真是一种独特的媒体类型,<faxsend>原语不应与其他原语交互。相反,它将使用传真协议与远程传真终端(或网关)进行交互,并将请求的状态事件发送到其调用环境。在传真操作期间,阴影变量用于记录传真操作不同阶段的进度和参数。

Status events are requested by including one or more status request elements. These elements correspond to different stages or events in fax operation and cause predefined events to be sent to the invoking environment when they occur. Since the only recipient of these events is expected to be a fax control agent, requests are simplified by associating a predefined namelist of shadow variables with each event. This decision may be revisited to allowed tailored namelists based on further implementation experience. Status requests apply both to sending and polling operation.

通过包含一个或多个状态请求元素来请求状态事件。这些元素对应于传真操作中的不同阶段或事件,并导致预定义事件在发生时发送到调用环境。由于预期这些事件的唯一接收者是传真控制代理,因此通过将阴影变量的预定义名称列表与每个事件关联,可以简化请求。根据进一步的实施经验,可重新考虑该决定,以允许定制名单。状态请求同时应用于发送和轮询操作。

Attributes:

属性:

lclid: the identifier that a media server uses to identify itself.

lclid:媒体服务器用来标识自身的标识符。

minspeed: the minimum acceptable speed to negotiate for the operation.

minspeed:操作协商的最小可接受速度。

maxspeed: the maximum speed to negotiate for the operation. This attribute is primarily for testing purposes.

maxspeed:操作协商的最大速度。此属性主要用于测试目的。

ecm: specifies whether Error Correction Mode (ECM) is allowed to be used if supported by the remote terminal. Defaults to "true".

ecm:指定如果远程终端支持,是否允许使用纠错模式(ecm)。默认为“true”。

Events:

活动:

terminate: terminates the fax send operation.

终止:终止传真发送操作。

Shadow Variables:

阴影变量:

fax.rmtid: the identifier of the remote fax terminal.

fax.rmtid:远程传真终端的标识符。

fax.rate: the negotiated speed for the operation.

传真速率:操作的协商速度。

fax.resolution: identifies the resolution of the image. Both metric- and inch-based resolutions are defined. Metric-based resolutions are 75x75, 150x150, 204x98, 204x196, 204x391, and 408x391. Inch-based resolutions are 200x200, 300x300, 400x400, and 600x600.

fax.resolution:标识图像的分辨率。定义了基于公制和英制的分辨率。基于公制的分辨率为75x75、150x150、204x98、204x196、204x391和408x391。基于英寸的分辨率为200x200、300x300、400x400和600x600。

fax.pagesize: identifies the negotiated page size. Metric sizes are "A3", "A4", "A5", "A6", and "B4". Inch-based page sizes are "Letter" and "Legal".

fax.pagesize:标识协商的页面大小。公制尺寸为“A3”、“A4”、“A5”、“A6”和“B4”。基于英寸的页面大小为“字母”和“合法”。

fax.encoding: identifies the image encoding utilized. Valid values are "MH", "R", "MMR", and "JPEG".

fax.encoding:标识使用的图像编码。有效值为“MH”、“R”、“MMR”和“JPEG”。

fax.ecm: identifies whether ECM operation was used.

fax.ecm:标识是否使用了ecm操作。

fax.pagebadlines: the number of bad lines in a page.

fax.pagebadlines:页面中错误行数。

fax.objbadlines: the number of bad lines in an object.

fax.objbadlines:对象中的错误行数。

fax.opbadlines: the number of bad lines in an operation.

fax.opbadlines:操作中的错误行数。

fax.objuri: the objuri of the current object.

fax.objuri:当前对象的objuri。

fax.resendcount: the number of pages resent due to errors.

fax.resendcount:由于错误而重新发送的页数。

fax.totalpages: the number of pages processed or stored.

fax.totalpages:处理或存储的页数。

fax.totalobjects: the count of the objects used in the operation.

fax.totalobjects:操作中使用的对象的计数。

fax.duration: the duration of the operation expressed as a duration in seconds and milliseconds (e.g., "23s250ms").

fax.duration:操作的持续时间,以秒和毫秒表示(例如,“23s250ms”)。

fax.result: contains the reason that caused the fax operation to complete. When the operation completes successfully, the value will be assigned "fax.success". Other values include "fax.partial", "fax.nofax", "fax.remotedisconnect", "fax.uri.access.error", and "fax.invalid.startpage".

fax.result:包含导致传真操作完成的原因。当操作成功完成时,该值将被分配为“fax.success”。其他值包括“fax.partial”、“fax.nofax”、“fax.remotedisconnect”、“fax.uri.access.error”和“fax.invalid.startpage”。

The following sections describe the child elements of <faxsend>.

以下各节介绍<faxsend>的子元素。

9.12.1.1. <sendobj>
9.12.1.1. <sendobj>

<sendobj> is used to define a fax transmission. There MAY be multiple instances of the element, which will be transmitted in order.

<sendobj>用于定义传真传输。元素可能有多个实例,这些实例将按顺序传输。

Attributes:

属性:

objuri: a URI that points to the fax image that will be transmitted. Mandatory.

objuri:指向将要传输的传真图像的URI。强制性的

startpage: the first page of a multi-page objuri to send.

起始页:要发送的多页objuri的第一页。

pagecount: page count.

页面计数:页面计数。

9.12.1.2. <hdrfooter>
9.12.1.2. <hdrfooter>

<hdrfooter> describes the header/footer that a media server MAY put on pages. The header or footer may be defined as the content of the <format> child element. The <format> element is only allowed if the type attribute has a value of "header" or "footer".

<hdrfooter>描述媒体服务器可能在页面上放置的页眉/页脚。页眉或页脚可以定义为<format>子元素的内容。仅当type属性的值为“header”或“footer”时才允许使用<format>元素。

Attributes:

属性:

type: specifies whether a header or a footer should be put on pages and identifies the source of the header or footer. The following enumerated values may be used:

类型:指定是否应在页面上放置页眉或页脚,并标识页眉或页脚的来源。可以使用以下枚举值:

"header" indicates that the media server should put a header on pages using the contents of the <format> element.

“header”表示媒体服务器应该使用<format>元素的内容在页面上放置一个header。

"nohdr" indicates that there should be no header or footer.

“nohdr”表示不应该有页眉或页脚。

"footer" indicates that the media server should put a footer on pages using the contents of the <format> element.

“footer”表示媒体服务器应使用<format>元素的内容在页面上放置一个页脚。

style: defines the style of insertion onto a fax page that a media server should use for the header or footer. Valid styles are "append", "overlay", or "replace".

样式:定义媒体服务器应用于页眉或页脚的传真页插入样式。有效样式为“附加”、“覆盖”或“替换”。

<format> is a child of the <hdrfooter> element that defines the style format to be used for the header or footer. It uses a "C" language style format statement (as shown below) to define the contents and layout of the header or footer.

<format>是<hdrfooter>元素的子元素,该元素定义用于页眉或页脚的样式格式。它使用“C”语言样式的格式语句(如下所示)来定义页眉或页脚的内容和布局。

code length name format %a 3 day of week 3-character abbreviation %d 2 date 01-31 %m 2 month 01-12 %y 2 year 00-99 %Y 4 year 0000-9999 %I 2 12 hour 01-12 %H 2 24 hour 00-23 %M 2 minute 00-59 %S 2 seconds 00-59 %p 2 AM/PM AM or PM %P 2 page number 01-99 %T 2 total pages 01-99 %l 20 local ID (sender) 0-9, + or spaces %r 20 remote ID (rcvr) 0-9, + or spaces %% 1 percent display % in header/ftr

代码长度名称格式%a一周3天3个字符缩写%d 2日期01-31%m 2个月01-12%y 2年00-99%y 4年0000-9999%I 2 12小时01-12%h2 24小时00-23%m 2分钟00-59%S 2秒00-59%p2am/PM上午或下午%p2页码01-99%t2总页数01-99%l20本地ID(发件人)0-9,+或空格%r20远程ID(rcvr)0-9,+或空格%%1%显示在页眉/ftr中

9.12.1.3. <rxpoll>
9.12.1.3. <rxpoll>

<rxpoll> provides the information necessary for a receive polling operation to occur. The object(s) to be received are defined by one or more <rcvobj> elements. The <rcvobj> is defined further under the child elements of <faxrcv>. The <rxpoll> element MAY also include a description of the header/footer that a media server SHOULD put on received pages. The <hdrfooter> element and its usage is described above.

<rxpoll>提供发生接收轮询操作所需的信息。要接收的对象由一个或多个<rcvobj>元素定义。<rcvobj>在<faxrcv>的子元素下进一步定义。<rxpoll>元素还可能包括媒体服务器应在接收到的页面上放置的页眉/页脚的描述。<hdrfooter>元素及其用法如上所述。

Attributes:

属性:

rmtid: specifies the identifier of the remote fax terminal that is to be associated with a polling operation. A media server MUST NOT execute a polling operation unless the value of rmtid matches that of the connected remote machine. Mandatory.

rmtid:指定要与轮询操作关联的远程传真终端的标识符。除非rmtid的值与连接的远程计算机的值匹配,否则媒体服务器不得执行轮询操作。强制性的

9.12.1.4. <faxstart>
9.12.1.4. <faxstart>

The <faxstart> element requests that an event be sent when fax operation has begun. When triggered, the following will be executed:

<faxstart>元素请求在传真操作开始时发送事件。触发时,将执行以下操作:

   <send target="source" event="fax.start"/>
        
   <send target="source" event="fax.start"/>
        
9.12.1.5. <faxnegotiate>
9.12.1.5. <传真协商>

The <faxnegotiate> element requests that an event be sent when a negotiation has been completed. Multiple events MAY be sent each time a Digital Command Signal (DCS) frame is sent or received. When triggered, the following will be executed:

元素请求在协商完成时发送事件。每次发送或接收数字命令信号(DCS)帧时,可能会发送多个事件。触发时,将执行以下操作:

<send target="source" event="fax.negotiate" namelist="fax.rmtid fax.rate fax.resolution fax.pagesize fax.encoding fax.ecm"/>

<send target=“source”event=“fax.negotiate”namelist=“fax.rmtid fax.rate fax.resolution fax.pagesize fax.encoding fax.ecm”/

9.12.1.6. <faxpagedone>
9.12.1.6. <faxpagedone>

The <faxpagedone> element requests that an event be sent when a page has been sent or received. When triggered, the following will be executed:

<faxpagedone>元素请求在发送或接收页面时发送事件。触发时,将执行以下操作:

<send target="source" event="fax.pagedone" namelist="fax.resolution fax.pagesize fax.encoding fax.pagebadlines fax.resendcount"/>

<send target=“source”event=“fax.pagedone”namelist=“fax.resolution fax.pagesize fax.encoding fax.pagebadlines fax.resendcount”/

9.12.1.7. <faxobjectdone>
9.12.1.7. <faxobjectdone>

The <faxobjectdone> element requests that an event be sent when an objuri has been completed. When triggered, the following will be executed:

<faxobjectdone>元素请求在objuri完成时发送事件。触发时,将执行以下操作:

<send target="source" event="fax.objectdone" namelist="fax.objuri fax.objbadlines fax.resendcount fax.totalpages fax.result"/>

<send target=“source”event=“fax.objectdone”namelist=“fax.objuri fax.objbadlines fax.resendcount fax.totalpages fax.result”/

9.12.1.8. <faxopcomplete>
9.12.1.8. <faxopcomplete>

The <faxopcomplete> element requests that an event be sent when an operation has been completed. When triggered, the following will be executed:

<faxopcomplete>元素请求在操作完成时发送事件。触发时,将执行以下操作:

<send target="source" event="fax.opcomplete" namelist="fax.totalpages fax.opbadlines fax.resendcount fax.totalobjects fax.duration fax.result"/>

<send target=“source”event=“fax.opcomplete”namelist=“fax.totalpages fax.opbadlines fax.resendcount fax.totalobjects fax.duration fax.result”/>

9.12.1.9. <faxpollstarted>
9.12.1.9. <faxpollstarted>

The <faxpollstarted> element requests that an event be sent when a polling operation has started. When triggered, the following will be executed:

<faxpollstarted>元素请求在轮询操作启动时发送事件。触发时,将执行以下操作:

<send target="source" event="fax.opcomplete" namelist="fax.rmtid fax.rate fax.resolution fax.pagesize fax.encoding fax.ecm"/>

<send target=“source”event=“fax.opcomplete”namelist=“fax.rmtid fax.rate fax.resolution fax.pagesize fax.encoding fax.ecm”/

9.12.2. <faxrcv>
9.12.2. <faxrcv>

The <faxrcv> primitive provides the functionality of a called fax terminal. Typically this type of operation is to receive pages. However, it can include sending pages instead of, or in addition to, receiving them. The fax objects to receive are defined by the <rcvobj> elements, described below.

<faxrcv>原语提供被调用传真终端的功能。通常这种类型的操作是接收页面。但是,它可以包括发送页面,而不是接收页面,或者除了接收页面之外。要接收的传真对象由<rcvobj>元素定义,如下所述。

A media server SHOULD send pages as a polled terminal when the <txpoll> element is included as part of <faxrcv>. This element may be included in addition to, or instead of, the <rcvobj> element. One <rcvobj> or <txpoll> element must be present. When both are present, a media server SHOULD first receive pages and will then allow the other terminal to poll the media server, requesting pages.

当<txpoll>元素作为<faxrcv>的一部分包含时,媒体服务器应作为轮询终端发送页面。该元素可包括在<rcvobj>元素之外,或代替<rcvobj>元素。必须存在一个<rcvobj>或<txpoll>元素。当两者都存在时,媒体服务器应首先接收页面,然后允许另一终端轮询媒体服务器,请求页面。

Because fax is a distinct media type, the <faxrcv> primitive is not expected to interact with other primitives. Rather, it will interact using fax protocols with a remote fax terminal and will send

由于传真是一种独特的媒体类型,<faxrcv>原语不应与其他原语交互。相反,它将使用传真协议与远程传真终端进行交互,并发送

requested status events to its invoking environment. During fax operation, shadow variables are used to record the progress and parameters of the varying stages of fax operation.

向其调用环境请求的状态事件。在传真操作期间,阴影变量用于记录传真操作不同阶段的进度和参数。

Status events are requested by including one or more status request elements. These elements correspond to different stages or events in fax operation and cause predefined events to be sent to the invoking environment when they occur. Since the only recipient of these events is expected to be a fax control agent, requests are simplified by associating a predefined namelist of shadow variables with each event. This decision may be revisited to allowed tailored namelists based on further implementation experience. Status requests apply both to receiving and polling operation.

通过包含一个或多个状态请求元素来请求状态事件。这些元素对应于传真操作中的不同阶段或事件,并导致预定义事件在发生时发送到调用环境。由于预期这些事件的唯一接收者是传真控制代理,因此通过将阴影变量的预定义名称列表与每个事件关联,可以简化请求。根据进一步的实施经验,可重新考虑该决定,以允许定制名单。状态请求同时适用于接收和轮询操作。

Attributes:

属性:

id: an optional identifier that may be referenced elsewhere for sending events to the faxrecv primitive.

id:可选标识符,可在别处引用,用于向faxrecv原语发送事件。

lclid: the identifier that a media server uses to identify itself.

lclid:媒体服务器用来标识自身的标识符。

ecm: specifies whether ECM mode is allowed to be used if supported by the remote terminal. Defaults to "true".

ecm:指定如果远程终端支持,是否允许使用ecm模式。默认为“true”。

Events:

活动:

terminate: terminates the fax reception operation.

终止:终止传真接收操作。

Shadow Variables:

阴影变量:

      <faxrcv> supports the same set of shadow variables as <faxsend>
        
      <faxrcv> supports the same set of shadow variables as <faxsend>
        

The following sections describe the child elements of <faxrcv>.

以下各节介绍<faxrcv>的子元素。

In addition to the elements defined below, <faxrcv> MAY also have the following child elements, which were defined under <faxsend>:

除了下面定义的元素外,<faxrcv>还可能具有以下子元素,这些子元素是在<faxsend>下定义的:

      o  <hdrfooter>
      o  <faxstart>
      o  <faxnegotiate>
      o  <faxpagedone>
      o  <faxobjectdone>
      o  <faxopcomplete>
      o  <faxpollstarted>
        
      o  <hdrfooter>
      o  <faxstart>
      o  <faxnegotiate>
      o  <faxpagedone>
      o  <faxobjectdone>
      o  <faxopcomplete>
      o  <faxpollstarted>
        

Their meaning and usage are the same as previously defined.

它们的含义和用法与前面定义的相同。

9.12.2.1. <rcvobj>
9.12.2.1. <rcvobj>

<rcvobj> is used to define fax objects that a media server will receive. There may be multiple instances of the element, which will be used in order.

<rcvobj>用于定义媒体服务器将接收的传真对象。该元素可能有多个实例,将按顺序使用。

Attributes:

属性:

objuri: a URI that points to the location that a received image is to be stored. Mandatory.

objuri:一个URI,指向接收到的图像要存储的位置。强制性的

maxpages: the maximum number of pages that will be stored in objuri.

maxpages:将存储在objuri中的最大页数。

9.12.2.2. <txpoll>
9.12.2.2. <txpoll>

<txpoll> provides the information for a polling operation to occur as part of a fax receive operation. An object or multiple objects to be sent may be supplied by one or more <sendobj> elements. In the event of multiple occurrences, a media server MUST select the <sendobj> element whose rmtid attribute matches that of the remote terminal.

<txpoll>提供作为传真接收操作的一部分进行轮询操作的信息。要发送的一个或多个对象可以由一个或多个<sendobj>元素提供。如果多次出现,媒体服务器必须选择rmtid属性与远程终端匹配的<sendobj>元素。

The <sendobj> element was defined previously as a child element of <faxsend>. The <txpoll> element is extended with an rmtid attribute that specifies the identifier of the remote fax terminal and is used to select the specific <sendobj> to send.

先前将<sendobj>元素定义为<faxsend>的子元素。<txpoll>元素使用rmtid属性进行扩展,该属性指定远程传真终端的标识符,并用于选择要发送的特定<sendobj>。

A media server SHOULD put a header/footer on transmitted pages based on any <hdrfooter> element included as part of <txpoll>.

媒体服务器应根据<txpoll>中包含的任何<hdrfooter>元素在传输的页面上放置页眉/页脚。

Attributes:

属性:

rmtid: specifies the identifier of the remote fax terminal that is to be associated with a polling operation. A media server MUST NOT execute a polling operation unless the value of rmtid matches that of the connected remote machine. Mandatory.

rmtid:指定要与轮询操作关联的远程传真终端的标识符。除非rmtid的值与连接的远程计算机的值匹配,否则媒体服务器不得执行轮询操作。强制性的

10. MSML Audit Package
10. MSML审核包
10.1. MSML Audit Core Package
10.1. MSML审核核心包

This section describes the MSML Audit Core Package that MAY be implemented to support auditing services.

本节描述了可用于支持审核服务的MSML审核核心包。

Audit requests and results may vary based on the information being audited. The MSML Audit Core Package specifies the framework to send audit request, defines a state list, and builds audit results. The

审核请求和结果可能因被审核的信息而异。MSML审核核心包指定发送审核请求的框架,定义状态列表,并生成审核结果。这个

additional audit packages define package specific state lists and associated audit result content. The additional audit packages MUST be defined within the framework specified by the Audit Core Package.

其他审核包定义特定于包的状态列表和关联的审核结果内容。附加审计包必须在审计核心包指定的框架内定义。

10.1.1. <audit>
10.1.1. <audit>

The <audit> element is an optional child element of <msml>, which MAY be used by MSML clients to perform state auditing of current media resources allocated and in use by the media server. The requested state information is returned in an MSML response.

<audit>元素是<msml>的可选子元素,msml客户端可以使用它对媒体服务器分配和使用的当前媒体资源执行状态审核。请求的状态信息在MSML响应中返回。

Attributes:

属性:

queryid: the identifier of the MSML object being queried by the MSML client. Mandatory. Supported object types: conference or connection. Wildcards are allowed.

queryid:MSML客户端正在查询的MSML对象的标识符。强制性的支持的对象类型:会议或连接。允许使用通配符。

statelist: a list of one or more state parameters that are being queried. Optional. If not present, the media server SHOULD return the id of audited object only. Each object type may contain a set of states. If the "statelist" contains any state that does not match the audited object type, the request MUST be rejected.

statelist:正在查询的一个或多个状态参数的列表。可选择的如果不存在,则媒体服务器应仅返回已审核对象的id。每个对象类型可能包含一组状态。如果“statelist”包含与已审核对象类型不匹配的任何状态,则必须拒绝该请求。

mark: in the case of an error, the value of the mark attribute from the last successfully executed element that included the mark attribute.

mark:如果出现错误,则为上次成功执行的包含mark属性的元素的mark属性值。

State Parameters:

状态参数:

The state parameter MUST be named using a dot-notation format "audit.X.a.b.c...", where X is the mandatory field that indicates the class name of the object (e.g., "conf" or "conn") and the "a.b.c..." is the optional field used to describe the actual name of the state parameter in a hierarchical manner. The wildcard "*" MAY be used as part of a state name; however, it MUST only be used in the last field of the dot-notation (e.g., "audit.conf.*" is valid, but "audit.conf.*.a" is invalid). When a wildcard is used, it is equivalent to querying all the states below the specified level. Each field (e.g., within "a.b.c...") will result in individual element names <a>, <b>, and <c> in the audit result to contain corresponding state value. The parent/child relationship between these elements follows the hierarchy of the state name (i.e., <c> is child element of <b>, and <b> is child element of <a>).

状态参数必须使用点符号格式“audit.X.a.b.c…”命名,其中X是表示对象类名(例如,“conf”或“conn”)的必填字段,“a.b.c…”是用于以分层方式描述状态参数实际名称的可选字段。通配符“*”可以用作州名称的一部分;但是,它只能在点表示法的最后一个字段中使用(例如,“audit.conf.*”有效,但“audit.conf.*.a”无效)。使用通配符时,相当于查询指定级别以下的所有状态。每个字段(例如,“a.b.c.”内)将在审核结果中生成单个元素名<a>、<b>和<c>,以包含相应的状态值。这些元素之间的父/子关系遵循状态名称的层次结构(即,<c>是<b>的子元素,<b>是<a>的子元素)。

10.1.2. <auditresult>
10.1.2. <auditresult>

The <auditresult> element is an optional child element of <result>, which MUST be used by the media server to return the audit result. A specific instance of the <auditresult> element contains the state information of a single active object. Therefore, if multiple objects are within the scope of the audit request, then one <auditresult> element per object MUST be present. A zero occurrence of <auditresult> element indicates that there are no active resources within the scope of the audit request.

<auditresult>元素是<result>的可选子元素,媒体服务器必须使用它来返回审核结果。<auditresult>元素的特定实例包含单个活动对象的状态信息。因此,如果多个对象在审核请求的范围内,则每个对象必须有一个<auditresult>元素。<auditresult>元素的零表示审核请求范围内没有活动资源。

Attributes:

属性:

targetid: the identifier of a conference or connection. Mandatory. Wildcard is not allowed.

targetid:会议或连接的标识符。强制性的不允许使用通配符。

The <auditresult> may contain child element(s) that return additional state information, corresponding to the "statelist" attribute in the <audit> request. The child element names correspond to the fields of the state parameter name (e.g., "a.b.c..."), following the same hierarchical structure.

<auditresult>可能包含返回附加状态信息的子元素,对应于<audit>请求中的“statelist”属性。子元素名称对应于状态参数名称的字段(例如,“a.b.c…”),遵循相同的层次结构。

10.2. MSML Audit Conference Package
10.2. MSML审核会议包

This section describes the MSML Audit Conference Package that MUST be implemented to support auditing of conference services. The MSML Audit Conference Package follows the framework specified by the MSML Audit Core Package. This package defines the state parameter list and audit result for conference auditing.

本节介绍为支持会议服务的审核而必须实现的MSML审核会议包。MSML审核会议包遵循MSML审核核心包指定的框架。此包定义会议审核的状态参数列表和审核结果。

10.2.1. State Parameters
10.2.1. 状态参数

All conference state parameter names MUST be prefixed by "audit.conf".

所有会议状态参数名称的前缀必须为“audit.conf”。

confconfig: query the conferences general configuration.

confconfig:查询会议常规配置。

confconfig.audiomix: query the audio mixer's general configuration in the conference.

confconfig.audiomix:在会议中查询音频混音器的常规配置。

confconfig.audiomix.asn: query the current ASN setting in the audio mixer.

confconfig.audiomix.asn:查询音频混音器中的当前asn设置。

confconfig.audiomix.n-loudest: query the current n-loudest setting in the audio mixer.

confconfig.audiomix.n-loadmost:查询音频混音器中当前的n-loadmost设置。

confconfig.videolayout: query the video layout's general configuration in the conference.

confconfig.videolayout:在会议中查询视频版面的常规配置。

confconfig.videolayout.root: query the root window setting of the video layout.

confconfig.videolayout.root:查询视频布局的根窗口设置。

confconfig.videolayout.selector: query the video stream selector setting of the video layout.

confconfig.videolayout.selector:查询视频布局的视频流选择器设置。

confconfig.controller: query who is the conference controller.

confconfig.controller:查询谁是会议控制器。

dialog: query the active dialog information on the conference. See MSML Audit Dialog Package for details.

对话框:查询会议上的活动对话框信息。有关详细信息,请参阅MSML审核对话框包。

stream: query the active stream information on the conference. See MSML Audit Stream Package for details.

流:查询会议的活动流信息。有关详细信息,请参阅MSML审核流包。

10.2.2. <auditresult>
10.2.2. <auditresult>

The <auditresult> attribute of "targetid" is required to indicate results for auditing a conference.

需要“targetid”的<auditresult>属性来指示会议的审核结果。

The <auditresult> element may optionally contain the following child elements, returning additional conference state information, if corresponding states are queried and available.

<auditresult>元素可以选择包含以下子元素,如果查询了相应的状态并且可用,则返回附加的会议状态信息。

10.2.2.1. confconfig
10.2.2.1. confconfig

The <confconfig> element is used to return the general configuration state(s) of a conference, using the following attributes.

元素用于使用以下属性返回会议的常规配置状态。

Attributes:

属性:

deletewhen: as defined by <createconference> element in MSML Conference Core Package.

deletewhen:由MSML会议核心包中的<createconference>元素定义。

term: as defined by <createconference> element in MSML Conference Core Package.

术语:由MSML会议核心包中的<createconference>元素定义。

10.2.2.2. confconfig.audiomix
10.2.2.2. confconfig.audiomix

The <audiomix> element contains the general audio mixer configuration using the following attributes.

<audiomix>元素包含使用以下属性的通用音频混音器配置。

Attributes:

属性:

id: as defined by <audiomix> element in MSML Conference Core Package.

id:由MSML会议核心包中的<audiomix>元素定义。

samplerate: as defined by <audiomix> element in MSML Conference Core Package.

采样器:由MSML会议核心包中的<audiomix>元素定义。

10.2.2.3. confconfig.audiomix.asn
10.2.2.3. confconfig.audiomix.asn

The <asn> element contains the current ASN setting of an audio mixer, if ASN is enabled. The state values are included in the following attributes.

如果启用了asn,<asn>元素包含音频混音器的当前asn设置。状态值包含在以下属性中。

Attributes:

属性:

ri: as defined by <asn> element in MSML Conference Core Package.

ri:由MSML会议核心包中的<asn>元素定义。

asth: as defined by <asn> element in MSML Conference Core Package.

ASH:由MSML会议核心包中的<asn>元素定义。

10.2.2.4. confconfig.audiomix.n-loudest
10.2.2.4. confconfig.audiomix.n-最大音量

The <n-loudest> element contains the current n-loudest setting of the audio mixer. The state values are included in the following attributes.

<n-loadmost>元素包含音频混音器的当前n-loadmost设置。状态值包含在以下属性中。

Attributes:

属性:

n: as defined by <n-loudest> element in MSML Conference Core Package.

n:由MSML会议核心包中的<n-loadmost>元素定义。

10.2.2.5. confconfig.videolayout
10.2.2.5. confconfig.videolayout

The <videolayout> element contains the general video layout configuration using the following attributes.

元素包含使用以下属性的常规视频布局配置。

Attributes:

属性:

id: as defined by <videolayout> in MSML Conference Core Package.

id:由MSML会议核心包中的<videolayout>定义。

type: as defined by <videolayout> in MSML Conference Core Package.

类型:由MSML会议核心包中的<videolayout>定义。

10.2.2.6. confconfig.videolayout.root
10.2.2.6. confconfig.videolayout.root

The <root> element is used to contain root window settings.

<root>元素用于包含根窗口设置。

Attributes:

属性:

size: as defined by <root> element in MSML Conference Core Package.

大小:由MSML会议核心包中的<root>元素定义。

backgroundcolor: as defined by <root> element in MSML Conference Core Package.

背景颜色:由MSML会议核心包中的<root>元素定义。

Backgroundimage: as defined by <root> element in MSML Conference Core Package.

背景图像:由MSML会议核心包中的<root>元素定义。

10.2.2.7. confconfig.videolayout.selector
10.2.2.7. confconfig.videolayout.selector

The <selector> element is used to contain selector settings.

<selector>元素用于包含选择器设置。

Attributes:

属性:

id: as defined by <selector> element in MSML Conference Core Package.

id:由MSML会议核心包中的<selector>元素定义。

method: as defined by <selector> element in MSML Conference Core Package.

方法:由MSML会议核心包中的<selector>元素定义。

status: as defined by <selector> element in MSML Conference Core Package.

状态:由MSML会议核心包中的<selector>元素定义。

blankothers: as defined by <selector> element in MSML Conference Core Package.

blankothers:由MSML会议核心包中的<selector>元素定义。

si: as defined by <selector> element in MSML Conference Core Package when selector method is "vas".

si:当选择器方法为“vas”时,由MSML会议核心包中的<selector>元素定义。

speakersees: as defined by <selector> element in MSML Conference Core Package when selector method is "vas".

speakersees:当选择器方法为“vas”时,由MSML会议核心包中的<selector>元素定义。

10.2.2.8. confconfig.controller
10.2.2.8. confconfig.controller

The <controller> element is used to return the conference controller id in its content. The conference controller is the SIP dialog that carries the <createconference> request. The return value is the MSML connection id.

元素用于返回其内容中的会议控制器id。会议控制器是承载<createconference>请求的SIP对话框。返回值是MSML连接id。

10.2.2.9. dialog
10.2.2.9. 对话

If conference dialog state is queried, the audit result is returned using the <dialog> element as specified in the MSML Audit Dialog Package.

如果查询会议对话框状态,将使用MSML audit dialog包中指定的<dialog>元素返回审核结果。

10.2.2.10. stream
10.2.2.10. 流动

If conference stream state is queried, the audit result is returned using the <stream> element as specified in the MSML Audit Stream Package.

如果查询会议流状态,则使用MSML审核流包中指定的<stream>元素返回审核结果。

10.3. MSML Audit Connection Package
10.3. MSML审核连接包

This section describes the MSML Audit Connection Package that MAY be implemented to support auditing connection services. The MSML Audit Connection Package follows the framework specified by the MSML Audit Core Package. This package defines the state parameter list and audit result for connection auditing.

本节介绍了MSML审核连接包,该包可用于支持审核连接服务。MSML审核连接包遵循MSML审核核心包指定的框架。此包定义连接审核的状态参数列表和审核结果。

10.3.1. State Parameters
10.3.1. 状态参数

Connection state parameter names are prefixed by "audit.conn".

连接状态参数名称的前缀为“audit.conn”。

sipdialog: queries the identifier of the SIP dialog with which the connection is associated.

sipdialog:查询与连接关联的SIP对话框的标识符。

sipdialog.localseq: queries one of the SIP dialog states - local sequence number.

sipdialog.localseq:查询SIP对话框状态之一-本地序列号。

sipdialog.remoteseq: queries one of the SIP dialog states - remote sequence number.

sipdialog.remoteseq:查询SIP对话框状态之一-远程序列号。

sipdialog.localURI: queries one of the SIP dialog states - local URI.

sipdialog.localURI:查询SIP对话框状态之一-本地URI。

sipdialog.remoteURI: queries one of the SIP dialog states - remote URI.

sipdialog.remoteURI:查询SIP对话框状态之一-远程URI。

sipdialog.remotetarget: queries one of the SIP dialog states - remote target.

sipdialog.remotetarget:查询SIP对话框状态之一-远程目标。

sipdialog.routeset: queries one of the SIP dialog states - route set.

sipdialog.routeset:查询SIP对话框状态之一-路由集。

localsdp: queries the local SDP body of the connection.

localsdp:查询连接的本地SDP主体。

remotesdp: queries the remote SDP body of the connection.

remotesdp:查询连接的远程SDP主体。

dialog: queries the active dialog information on the connection. See MSML Audit Dialog Package for details.

对话框:查询有关连接的活动对话框信息。有关详细信息,请参阅MSML审核对话框包。

stream: queries the active stream information on the connection. See MSML Audit Stream Package for details.

流:查询连接上的活动流信息。有关详细信息,请参阅MSML审核流包。

10.3.2. <auditresult>
10.3.2. <auditresult>

The <auditresult> attribute "targetid" MUST specify a connection identifier for a connection result.

<auditresult>属性“targetid”必须为连接结果指定连接标识符。

The <auditresult> element MAY contain the following child elements optionally to return additional connection state information if the corresponding states are queried and are available.

<auditresult>元素可以包含以下子元素,如果查询了相应的状态并且这些状态可用,则可以选择返回附加的连接状态信息。

10.3.2.1. sipdialog
10.3.2.1. sipdialog

The <sipdialog> element contains the associated SIP dialog information. The SIP dialog ID information is returned using the following attributes.

元素包含关联的SIP对话框信息。使用以下属性返回SIP对话框ID信息。

Attributes:

属性:

callid: call-ID value as defined in [n1]. Mandatory.

callid:[n1]中定义的调用ID值。强制性的

localtag: local-tag value as defined in [n1]. Mandatory.

localtag:[n1]中定义的本地标记值。强制性的

remotetag: remote-tag value as defined in [n1]. Mandatory.

remotetag:[n1]中定义的远程标记值。强制性的

This element can contain the following child elements optionally to return additional SIP dialog state information to the client if the corresponding states are queried and available.

此元素可以包含以下子元素(可选),以便在查询了相应的状态并可用时向客户端返回附加的SIP对话框状态信息。

10.3.2.2. sipdialog.localseq
10.3.2.2. sipdialog.localseq

The <localseq> element contains the local sequence number. The local sequence number is one of the SIP dialog states as defined in [n1].

<localseq>元素包含本地序列号。本地序列号是[n1]中定义的SIP对话状态之一。

10.3.2.3. sipdialog.remoteseq
10.3.2.3. sipdialog.remoteseq

The <remoteseq> element contains the remote sequence number. The remote sequence number is one of the SIP dialog states as defined in [n1].

<remoteseq>元素包含远程序列号。远程序列号是[n1]中定义的SIP对话框状态之一。

10.3.2.4. sipdialog.localuri
10.3.2.4. sipdialog.localuri

The <localuri> element contains the local URI value. The local URI is one of the SIP dialog states as defined in [n1].

<localuri>元素包含本地URI值。本地URI是[n1]中定义的SIP对话框状态之一。

10.3.2.5. sipdialog.remoteuri
10.3.2.5. sipdialog.remoteuri

The <remoteuri> element contains the remote URI value. The remote URI is one of the SIP dialog states as defined in [n1].

<remoteuri>元素包含远程URI值。远程URI是[n1]中定义的SIP对话框状态之一。

10.3.2.6. sipdialog.remotetarget
10.3.2.6. sipdialog.remotetarget

The <remotetarget> element contains the remote target value. The remote target is one of the SIP dialog states as defined in [n1].

<remotetarget>元素包含远程目标值。远程目标是[n1]中定义的SIP对话状态之一。

10.3.2.7. sipdialog.routeset
10.3.2.7. sipdialog.routeset

The <routeset> element contains the route-set value (an ordered list of URIs separated by comma). The route set is one of the SIP dialog states as defined in [n1].

<routeset>元素包含路由集值(由逗号分隔的URI的有序列表)。路由集是[n1]中定义的SIP对话框状态之一。

10.3.2.8. localsdp
10.3.2.8. 本地SDP

The <localsdp> element contains the local SDP body.

<localsdp>元素包含本地SDP主体。

10.3.2.9. remotesdp
10.3.2.9. remotesdp

The <remotesdp> element contains the remote SDP body.

<remotesdp>元素包含远程SDP主体。

10.3.2.10. dialog
10.3.2.10. 对话

If the connection dialog state is queried, the audit result returns the queried information using the <dialog> element, as specified in the MSML Audit Dialog Package.

如果查询了连接对话框状态,则审核结果将使用MSML审核对话框包中指定的<dialog>元素返回查询的信息。

10.3.2.11. stream
10.3.2.11. 流动

If the connection stream state is queried, the audit result returns the queried information using the <stream> element, as specified in the MSML Audit Stream Package.

如果查询了连接流状态,审计结果将使用MSML审计流包中指定的<stream>元素返回查询的信息。

10.4. MSML Audit Dialog Package
10.4. MSML审核对话框包

This section describes the MSML Audit Dialog Package that MAY be implemented to support auditing dialogs. The MSML Audit Dialog Package follows the framework specified by the MSML Audit Core Package.

本节介绍可用于支持审核对话框的MSML审核对话框包。MSML审核对话框包遵循MSML审核核心包指定的框架。

The MSML Audit Dialog Package must be used together with either the MSML Audit Conference Package or MSML Audit Connection Package, since the dialogs are applicable to conferences or connections.

MSML审核对话框包必须与MSML审核会议包或MSML审核连接包一起使用,因为对话框适用于会议或连接。

10.4.1. State Parameters
10.4.1. 状态参数

Dialog state parameter names are prefixed by "dialog". Since this package must be used together with the MSML Audit Conference Package or MSML Audit Connection Package, the complete dialog state name must be prefixed by "audit.conf.dialog" or "audit.conn.dialog", depending on the context within which the dialog state is queried.

对话框状态参数名称的前缀为“Dialog”。由于此程序包必须与MSML Audit会议程序包或MSML Audit连接程序包一起使用,因此完整的对话框状态名称必须以“Audit.conf.dialog”或“Audit.conn.dialog”作为前缀,具体取决于查询对话框状态的上下文。

dialog: queries the number of active dialog(s) running on the target (a conference or connection); basic dialog information will be returned.

dialog:查询在目标(会议或连接)上运行的活动对话框的数量;将返回基本对话框信息。

dialog.duration: queries the amount of time a dialog has been running.

dialog.duration:查询对话框运行的时间。

dialog.primitive: queries the media primitive currently being executed by the dialog.

dialog.primitive:查询对话框当前正在执行的媒体原语。

dialog.controller: queries the dialog controller.

dialog.controller:查询对话框控制器。

10.4.2. <dialog>
10.4.2. <dialog>

The <dialog> element is a child element of <auditresult>, which contains the active dialog information on the target identified by the attribute "targetid" of the <audioresult> element.

<dialog>元素是<auditresult>的子元素,它包含由<audioresult>元素的属性“targetid”标识的目标上的活动对话信息。

Basic dialog information is returned using the following attributes.

使用以下属性返回基本对话框信息。

Attributes:

属性:

src: as defined by the <dialogstart> element in the MSML Dialog Core Package.

src:由MSML Dialog核心包中的<dialogstart>元素定义。

type: as defined by the <dialogstart> element in the MSML Dialog Core Package. Mandatory.

类型:由MSML Dialog核心包中的<dialogstart>元素定义。强制性的

name: as defined by the <dialogstart> element in the MSML Dialog Core Package. Mandatory.

名称:由MSML Dialog核心包中的<dialogstart>元素定义。强制性的

This element may contain the following child elements optionally to return additional dialog information if the corresponding state parameter has been queried and the state value is available.

如果查询了相应的状态参数且状态值可用,则此元素可以包含以下子元素(可选)以返回其他对话框信息。

10.4.2.1. <duration>
10.4.2.1. <duration>

The <duration> element returns the duration that a dialog has been running on the specified target. The duration value is included in the element content. It is a positive integer value (in unit of seconds).

元素返回对话框在指定目标上运行的持续时间。持续时间值包含在元素内容中。它是一个正整数值(以秒为单位)。

10.4.2.2. <primitive>
10.4.2.2. <primitive>

The <primitive> element returns the currently active media primitive in its content. The active media primitive is the primitive that is currently being executed. Possible return values are play, dtmf, collect, dtmfgen, tonegen, record, or none.

元素在其内容中返回当前活动的媒体原语。活动媒体原语是当前正在执行的原语。可能的返回值为play、dtmf、collect、dtmfgen、tonegen、record或none。

10.4.2.3. <controller>
10.4.2.3. <controller>

The <controller> element returns the dialog controller id in its content. The dialog controller is the SIP dialog that carries the <dialogstart> request. The returned value is the MSML connection id.

元素在其内容中返回对话框控制器id。对话框控制器是承载<dialogstart>请求的SIP对话框。返回的值是MSML连接id。

10.5. MSML Audit Stream Package
10.5. MSML审核流包

This section describes the MSML Audit Stream Package that MAY be implemented to support auditing stream. The MSML Audit Stream Package follows the framework specified by the MSML Audit Core Package.

本节介绍可实现以支持审核流的MSML审核流包。MSML审核流包遵循MSML审核核心包指定的框架。

The MSML Audit Stream Package MUST be used together with either the MSML Audit Conference Package or the MSML Audit Connection Package, since the stream is applicable between conferences, between connections, or between conferences and connections.

MSML审核流包必须与MSML审核会议包或MSML审核连接包一起使用,因为该流适用于会议之间、连接之间或会议与连接之间。

10.5.1. State Parameters
10.5.1. 状态参数

Stream state parameter names are prefixed by "stream". Since this package must be used together with the MSML Audit Conference Package or MSML Audit Connection Package, the complete stream state name must be prefixed by "audit.conf.stream" or "audit.conn.stream", depending on the context within which the stream state is queried.

流状态参数名称的前缀为“Stream”。由于此包必须与MSML Audit Conference包或MSML Audit Connection包一起使用,因此完整的流状态名称必须以“Audit.conf.stream”或“Audit.conn.stream”作为前缀,具体取决于查询流状态的上下文。

stream: queries the number of active streams created on the audited object; basic stream information will be returned.

流:查询被审核对象上创建的活动流的数量;将返回基本流信息。

stream.clamp: queries the clamping status.

stream.clamp:查询夹紧状态。

stream.gain: queries the gain control information.

stream.gain:查询增益控制信息。

stream.visual: queries the visual setting.

stream.visual:查询视觉设置。

10.5.2. <stream>
10.5.2. <stream>

The <stream> element is a child element of <auditresult> and contains the active stream information on the target identified by the attribute "targetid" of the <audioresult> element.

<stream>元素是<auditresult>的子元素,包含由<auditresult>元素的属性“targetid”标识的目标上的活动流信息。

Basic stream information is returned using the following attributes.

使用以下属性返回基本流信息。

Attributes:

属性:

joinwith: an identifier of either a connection or a conference with which the audited object is joined. Mandatory. Wildcard is not allowed.

joinwith:已审核对象加入的连接或会议的标识符。强制性的不允许使用通配符。

media: as defined by the <stream> element in the MSML Conference Core Package. Mandatory.

媒体:由MSML会议核心包中的<stream>元素定义。强制性的

dir: direction of stream, from audited target perspective, "from" or "to". Mandatory.

dir:流的方向,从审计目标的角度来看,“from”或“to”。强制性的

compressed: as defined by the <stream> element in the MSML Conference Core Package.

压缩:由MSML会议核心包中的<stream>元素定义。

display: as defined by the <stream> element in the MSML Conference Core Package.

显示:由MSML会议核心包中的<stream>元素定义。

override: as defined by the <stream> element in the MSML Conference Core Package.

覆盖:由MSML会议核心包中的<stream>元素定义。

preferred: as defined by the <stream> element in the MSML Conference Core Package.

首选:由MSML会议核心包中的<stream>元素定义。

This element MAY contain the following child elements that optionally return additional stream information, if the corresponding state parameter is queried and the state value is available.

如果查询了相应的状态参数且状态值可用,则此元素可能包含以下子元素,这些子元素可以选择性地返回额外的流信息。

10.5.2.1. <clamp>
10.5.2.1. <clamp>

The <clamp> element is included if stream clamping is active. The currently active clamping state values are returned using the attributes as defined by the <clamp> element in the MSML Conference Core Package.

如果流箝位处于活动状态,则包含<climp>元素。使用MSML会议核心包中<clamp>元素定义的属性返回当前活动的夹紧状态值。

10.5.2.2. <gain>
10.5.2.2. <增益>

The <gain> element is included if stream gain is active. The current gain control state values are returned using the attributes as defined by the <gain> element in the MSML Conference Core Package.

如果流增益激活,则包含<gain>元素。使用MSML会议核心包中<gain>元素定义的属性返回当前增益控制状态值。

10.5.2.3. <visual>
10.5.2.3. <visual>

The <visual> element is included if stream visual display is active. The current visual display settings are returned using the attributes as defined by the <visual> element in the MSML Conference Core Package.

如果流视觉显示处于活动状态,则包含<visual>元素。使用MSML会议核心包中<visual>元素定义的属性返回当前视觉显示设置。

11. Response Codes
11. 响应代码

Response codes are used to indicate reasons for failures as well as completion status. The appropriate code and description must be passed to the invoking environment on failure.

响应代码用于指示故障原因以及完成状态。发生故障时,必须将适当的代码和描述传递给调用环境。

The response codes defined in this section are returned as the value of the response attribute to the <result> element. Some values may also be returned as part of a namelist to an "msml.dialog.exit" event generated when an executing MSML dialog fails.

本节中定义的响应代码作为响应属性的值返回给<result>元素。某些值也可能作为名称列表的一部分返回给执行msml对话框失败时生成的“msml.dialog.exit”事件。

Informational (1xx)

信息(1xx)

Reserved for future use

留作将来使用

Success (200)

成功(200)

200 OK

200行

Request Error (4xx)

请求错误(4xx)

400 Bad Request 401 Unknown Element 402 Unsupported Element 403 Missing mandatory element content 404 Forbidden element content 405 Invalid element content 406 Unknown attribute 407 Attribute not supported 408 Missing mandatory attribute 409 Forbidden attribute is present

400错误请求401未知元素402不支持元素403缺少强制元素内容404禁止元素内容405无效元素内容406未知属性407属性不支持408缺少强制属性409禁止属性存在

410 Invalid attribute value

410无效的属性值

420 Unsupported media description language 421 Unknown media description language 422 Ambiguous request (both URI and inline description) 423 External document fetch error 424 Syntax error in foreign language 425 Semantic error in foreign language 426 Unknown error executing foreign language

420不支持的媒体描述语言421未知媒体描述语言422不明确请求(URI和内联描述)423外部文档获取错误424外语语法错误425外语语义错误426执行外语未知错误

430 Object does not exist 431 Object instance name already used 432 Conference name already in use 433 reserved 434 External document fetch error

430对象不存在431对象实例名称已使用432会议名称已使用433保留434外部文档获取错误

440 Cannot join objects of the specified class 441 Objects have incompatible media types 442 reserved 443 reserved 444 Number of media inputs exceeded

440无法连接指定类的对象441对象具有不兼容的媒体类型442保留443保留444超出媒体输入数

450 Objects have incompatible media formats 451 Incompatible media stream format

450对象具有不兼容的媒体格式451不兼容的媒体流格式

Server Error (5xx)

服务器错误(5xx)

500 Internal media server error 503 Service Unavailable 510 Not in service 511 Service Unavailable 520 No resource to fulfill request 521 Internal limit exceeded

500内部媒体服务器错误503服务不可用510不在服务中511服务不可用520没有资源来满足请求521超出内部限制

12. MSML Conference Examples
12. MSML会议示例

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.

这些示例重点介绍由控制代理(CA)用于控制媒体服务器(MS)上的服务的MSML会议核心包。它们显示了建立媒体会话的SIP信令和MSML服务控制命令之间的关系。为简洁起见,仅显示MSML消息的内容。示例假定CA和MS使用音频流(在MS上)的IPv4地址和UDP端口号来标识MSML连接。

12.1. Establishing a Dial-In Conference
12.1. 建立拨号会议
      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          |                           |
        
      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          |                           |
        
      |------------------------>|                           |
      |                         |     <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 |
      |                         |-------------------------->|
      |         ...             |            ...            |
      |                         |                           |
        
      |------------------------>|                           |
      |                         |     <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.

步骤1-3:为会议建立MSML控制通道。或者,可能已经建立了用于所有CA/MS交互的控制通道。每个会议的控制通道只是一种可能的模式。目前,MSML在此SIP对话框上使用SIP信息请求和响应。建议使用此消息交换为MSML建立TCP通道,类似于媒体资源控制协议v2(MRCPv2)所用的方法。这种方法需要将请求标识符添加到<msml>元素中,以关联请求和响应。这当前依赖于此属性的SIP INFO请求和响应。在本例中,显示MSML消息时未指定传输,但它假定基于传输消息的请求/响应关联。

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.

第4步:创建一个会议,该会议将混合最响亮的两个扬声器,并每10秒向控制代理报告这些扬声器。媒体服务器将自动终止剩余的媒体会话,并在控制频道终止时删除会议和相关资源。

      <msml version="1.1">
         <createconference name="exampleConf" deletewhen="nocontrol">
             <audiomix>
                <n-loudest n="3"/>
                <asn ri="10s"/>
             </audiomix>
         </createconference>
      </msml>
        
      <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

步骤5:成功创建会议

      <msml version="1.1">
         <result response="200"/>
      </msml>
        
      <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:

步骤6-11:标准3PCC建立与媒体服务器的用户启动的媒体会话。这相当于拨号会议参与者。MS在步骤F8的200响应中返回的“To:”标题为:

   To: <sip:msml@ms.example.com>;tag=jd87dfg4h
        
   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.

第12步:请求与参与者进行初始对话,以提示其姓名、所需会议等。该对话通过通知参与者他们将参加会议来完成。如果这不是第一个参与者,对话框还可以宣布其他参与者。

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

步骤13:对话框成功启动。将返回对话框标识符。

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

Step 14: sequence of HTTP VoiceXML dialog interactions.

步骤14:HTTP VoiceXML对话交互的顺序。

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.

步骤15:VoiceXML浏览器退出(但不断开连接)。如果在VoiceXML<exit>元素中指定了名称列表,那么它将包含在发送给CA的<event>中。

      <msml version="1.1">
         <event name="msml.dialog.exit"
                id="conn:jd87dfg4h/dialog:12345"/>
      </msml>
        
      <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.

第16步:加入与会者的会议,并让他们的音频音量自动调整到-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>
        
      <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

步骤17:成功加入会议

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

Steps 6 through 17 are repeated for the second participant.

对第二个参与者重复步骤6至17。

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

第18步:播放加入音调或消息,宣布新参与者加入会议。

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

步骤19:对话框成功启动。将返回对话框标识符。由于未在<dialogstart>中指定名称属性,媒体服务器分配了唯一标识符。

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

Step 20: HTTP VoiceXML dialog interaction(s).

步骤20:HTTP VoiceXML对话交互。

Step 21: the VoiceXML browser exits.

步骤21:退出VoiceXML浏览器。

      <msml version="1.1">
         <event name="msml.dialog.exit"
                id="conf:ExampleConf/dialog:j6fs8745"/>
      </msml>
        
      <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.

对第三个和后续参与者重复步骤6至21。

12.2. Example of a Sidebar Audio Conference
12.2. 侧边栏音频会议示例

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.

步骤1:创建侧栏会议。它半双工连接到主会议,并在媒体流中插入手动增益对象。然后将三名与会者从主会议移至侧边栏。尽管没有显示,CA可以在每个元素中包含“mark”属性,以允许在发生中间事务错误时进行恢复。

      <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>
        
      <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>
        

Step 2: sidebar conference created successfully and participants joined.

步骤2:侧边栏会议成功创建,参与者加入。

      <msml version="1.1">
         <result response="200"/>
      </msml>
        
      <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.

步骤3:侧边栏会议完成后,参与者将重新加入主会议。当创建侧栏会议时指定删除最后一个媒体流时,MS会自动销毁侧栏。

      <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>
        
      <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.

步骤4:参与者成功移动到主会议,侧边栏被销毁。

      <msml version="1.1">
         <result response="200"/>
      </msml>
        
      <msml version="1.1">
         <result response="200"/>
      </msml>
        
12.3. Example of Removing a Conference
12.3. 删除会议的示例

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).

此示例假设创建的会议与第一个示例类似,其中存在特定于该会议的MSML控制通道,并且该会议已配置为在移除该通道(使用SIP)时删除。

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

步骤1-2:CA向用于建立会议控制通道的SIP对话框发送BYE信号。

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

步骤3-6:MS发起人终止会议剩余每位参与者的媒体会话。

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

当最后一个参与者被删除时,MS将删除会议并删除所有资源。

12.4. Example of Modifying Video Layout
12.4. 修改视频布局的示例

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

假设使用以下混音器描述创建了一个名为“example”的会议。

      +---+---+
      | 1 | 2 |
      +---+---+
      | 3 | 4 |
      +---+---+
        
      +---+---+
      | 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>
        
      <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".

下面将视频窗口的大小更改为QCIF,背景颜色更改为默认的“黑色”。

      <modifyconference id="conf:example">
         <videolayout>
            <root size="4CIF"/>
         </videolayout>
      </modifyconference>
        
      <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.

以下操作将冻结区域“2”中显示的视频,而不会影响该区域的任何其他属性。

      <modifyconference id="conf:example">
         <videolayout>
            <region id="2" left="50%" top="0" relativesize="1/4"
                           freeze="true"/>
         </videolayout>
      </modifyconference>
        
      <modifyconference id="conf:example">
         <videolayout>
            <region id="2" left="50%" top="0" relativesize="1/4"
                           freeze="true"/>
         </videolayout>
      </modifyconference>
        
13. MSML Dialog Examples
13. MSML对话框示例

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

这些示例侧重于MSML对话基本包和MSML对话组包。

13.1. Announcement
13.1. 公告

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>
        
      <?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
13.2. 语音邮件检索

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 '#'.

下面的示例显示了一个简单的语音邮件检索操作,该操作包括播放消息,并允许用户使用“5”切换状态暂停并继续播放。播放完成或用户输入“#”后,操作将终止。

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

在播放过程中,用户可以通过消息向前和向后移动,也可以倒带到开头。

      <?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>
        
      <?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>
        
13.3. Play and Record
13.3. 播放和录制

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.

一个更复杂的例子是播放和录制操作。这是媒体的源和汇,并使用语音活动DTMF检测和识别来影响行为。任何DTMF输入或语音活动都会干扰播放并导致录制开始。但是,如果提示被DTMF位“#”打断,则记录将终止而不启动。当播放终止时,它向VAD发送starttimer事件,以允许其识别初始静音条件。当VAD检测到最初3秒的静音时,记录将终止(不启动)。

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.

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.translate error, please retry

      <?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>
        
      <?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>
        

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.

如下所述,在使用MSML Dialog基本包时,使用用于播放和录制操作的<record>复合机制,实现了相同的功能。

   <?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>
        
   <?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>
        
13.4. Speech Recognition
13.4. 语音识别

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>
        
      <?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
13.5. 玩和收集

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.

此示例提示用户输入以“#”键结尾的4位DTMF数字(以下用“xxxx#”表示)。提示将被打断,用户有10秒时间开始输入,否则将不显示输入。

      <?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>
        
      <?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>
        

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.

如下所述,使用MSML对话框基本包,使用播放和收集操作的<collect>复合机制,实现相同的功能。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
       <dialogstart target="conn:12345" name="12345">
        
      <?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>
        
         <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>
        
13.6. User Controlled Gain
13.6. 用户控制增益

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.

这显示了嵌套组以创建任意全双工介质控件的示例。DTMF在单向流动的介质上检测,并用于调整应用于反向流动介质的增益。此外,用于检测DTMF的流已删除DTMF,并在离开组之前自动调整其增益。这个小部件可以在会议参与者和会议混合器之间使用。

      <?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>
        
      <?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
14. MSML审核示例

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.

以下示例介绍了MSML审核会议包和MSML审核连接包,以及它们与MSML审核对话框包或/和MSML审核流包一起使用的情况。

14.1. Audit All Conferences
14.1. 审核所有会议

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

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.

以下结果假设媒体服务器当前分配了两个会议。会议“conf:1”包含音频混音器(启用ASN)和创建的视频布局(vas),而会议“conf:2”仅包含禁用ASN创建的音频混音器。

      <?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>
        
      <?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
14.2. 审计会议对话

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>
        
      <?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.

示例结果假定一个对话框在会议“conf:1”上运行,该对话框已运行60秒,并且该对话框当前正在执行记录操作。

      <?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>
        
      <?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
14.3. 审计会议流

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>
        
      <?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.

示例结果假定会议中有三名音频参与者。连接“conn:1234”是同时启用箝位和增益控制的对话收听参与者。连接“conn:1235”是仅限对话的参与者。连接“conn:1236”是启用自动增益控制的仅侦听参与者。

      <?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>
        
      <?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
14.4. 审核所有连接

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>
        
      <?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>
        
      <?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
14.5. 审核连接对话框

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

此请求示例描述了对特定连接上活动对话框的审核。不查询其他对话框状态。

      <?xml version="1.0" encoding="UTF-8"?>
      <msml version="1.1">
         <audit queryid="conn:1234" statelist="audit.conn.dialog"/>
      </msml>
        
      <?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>
        
      <?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
14.6. 审核连接流

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>
        
      <?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.

示例结果假设在目标连接和其他MSML对象之间创建了三个音频流,其中一个是目标连接和会议之间的双向流,两个是其他两个连接之间的单向流。

      <?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>
        
      <?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>
        
14.7. Audit Connection with Selective States
14.7. 审计与选择性国家的联系

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

此示例描述对特定连接的审核,查询关联的SIP对话ID和SDP信息。

      <?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">
         <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
        
      <?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
        
                  a=sendrecv
               </remotesdp>
            </auditresult>
         </result>
      </msml>
        
                  a=sendrecv
               </remotesdp>
            </auditresult>
         </result>
      </msml>
        
15. Future Work
15. 今后的工作

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 MSML客户端能够在媒体服务器上审核或查询支持的MSML包和配置文件集。

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

o 能够对MSML包和配置文件进行版本设置,并为MSML扩展包提供命名方案。

16. XML Schema
16. XML模式

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.

MSML规范由一组XML模式组成,所有这些模式可以一起使用,也可以为每个MSML包使用模式的任何子集。以下各节定义了涵盖所有MSML包的完整模式集。

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.

每个包都包含一个模式文件,<package name>-datatypes.xsd。此架构文件可以包含在其扩展包中。每个包都可以选择包含另一个模式文件<package_name>.xsd,该文件可直接用于为给定包构建或验证MSML脚本。

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

完整的MSML模式(MSML.xsd)包括所有单独的MSML包。

   <?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"/>
        
   <?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"/>
        
    <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>
        
    <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>
        
       </xs:element>
      </xs:choice>
      <xs:attribute name="version" type="xs:string" use="required"
                    fixed="1.1"/>
     </xs:complexType>
    </xs:element>
   </xs:schema>
        
       </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. MSML磁芯
16.1.1. msml-core.xsd
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"
        
   <?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"
        
                       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>
        
                       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
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"/>
        
   <?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"/>
        
    </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">
        
    </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">
        
     <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>
        
     <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>
        
16.2. MSML Conference Core Package
16.2. 会议核心包
16.2.1. msml-conf-core.xsd
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>
        
   <?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
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"/>
        
<?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"/>
        
     <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>
        
     <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>
        
      <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"
        
      <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"
        
                   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"/>
        
                   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"/>
        
         </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>
        
         </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>
        
       </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"/>
        
       </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"/>
        
              </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"/>
        
              </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"/>
        
    </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>
        
    </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>
        
   </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>
        
   </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>
        
16.3. MSML Dialog Packages
16.3. MSML对话框包
16.3.1. msml-dialog-core.xsd
16.3.1. msml-dialog-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-dialog-core-datatypes.xsd"/>
</xs:schema>
        
<?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-dialog-core-datatypes.xsd"/>
</xs:schema>
        
16.3.2. msml-dialog-core-datatypes.xsd
16.3.2. msml-dialog-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:group name="momlRequest">
  <xs:choice>
   <xs:group ref="executeType"/>
        
<?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:group name="momlRequest">
  <xs:choice>
   <xs:group ref="executeType"/>
        
   <xs:group ref="sendType"/>
  </xs:choice>
 </xs:group>
 <xs:element name="dialogstart" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:choice>
      <xs:group ref="momlRequest" minOccurs="0"/>
     </xs:choice>
     <xs:attribute name="target" type="independentID.datatype"
                   use="required"/>
     <xs:attribute name="type" type="dialogLanguage.datatype"
                   use="required"/>
     <xs:attribute name="name" type="msmlInstanceID.datatype"/>
     <xs:attribute name="src" type="xs:anyURI" use="optional"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dialogend" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:attribute name="id" type="dialogID.datatype" use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dialogid" type="msmlResultSimpleType"
             substitutionGroup="msmlResultSimple"/>
 <xs:group name="executeType">
  <xs:choice>
   <xs:element ref="primitive" maxOccurs="unbounded"/>
   <xs:element ref="control" maxOccurs="unbounded"/>
  </xs:choice>
 </xs:group>
 <xs:element name="primitive" type="primitiveType" abstract="true"/>
 <xs:complexType name="primitiveType">
  <xs:attribute name="id" type="momlID.datatype"/>
 </xs:complexType>
 <xs:element name="control" abstract="true"/>
 <xs:group name="sendType">
  <xs:choice>
   <xs:choice>
    <xs:element name="exit" type="exitType"/>
    <xs:element name="disconnect" type="exitType"/>
   </xs:choice>
        
   <xs:group ref="sendType"/>
  </xs:choice>
 </xs:group>
 <xs:element name="dialogstart" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:choice>
      <xs:group ref="momlRequest" minOccurs="0"/>
     </xs:choice>
     <xs:attribute name="target" type="independentID.datatype"
                   use="required"/>
     <xs:attribute name="type" type="dialogLanguage.datatype"
                   use="required"/>
     <xs:attribute name="name" type="msmlInstanceID.datatype"/>
     <xs:attribute name="src" type="xs:anyURI" use="optional"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dialogend" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:attribute name="id" type="dialogID.datatype" use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dialogid" type="msmlResultSimpleType"
             substitutionGroup="msmlResultSimple"/>
 <xs:group name="executeType">
  <xs:choice>
   <xs:element ref="primitive" maxOccurs="unbounded"/>
   <xs:element ref="control" maxOccurs="unbounded"/>
  </xs:choice>
 </xs:group>
 <xs:element name="primitive" type="primitiveType" abstract="true"/>
 <xs:complexType name="primitiveType">
  <xs:attribute name="id" type="momlID.datatype"/>
 </xs:complexType>
 <xs:element name="control" abstract="true"/>
 <xs:group name="sendType">
  <xs:choice>
   <xs:choice>
    <xs:element name="exit" type="exitType"/>
    <xs:element name="disconnect" type="exitType"/>
   </xs:choice>
        
   <xs:sequence>
    <xs:element ref="send" maxOccurs="unbounded"/>
    <xs:choice minOccurs="0">
     <xs:element name="exit" type="exitType"/>
     <xs:element name="disconnect" type="exitType"/>
    </xs:choice>
   </xs:sequence>
  </xs:choice>
 </xs:group>
 <xs:element name="send">
  <xs:complexType>
   <xs:attribute name="event" type="momlEvent.datatype" use="required"/>
   <xs:attribute name="target" type="momlTarget.datatype"
                 use="required"/>
   <xs:attribute name="namelist" type="momlNamelist.datatype"/>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="exitType">
  <xs:attribute name="namelist" type="momlNamelist.datatype"/>
 </xs:complexType>
 <xs:simpleType name="momlID.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9._\-]*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="momlEvent.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9._\-]*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="momlNamelist.datatype">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:simpleType name="dtmfDigits.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[0-9#*]+"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="iterate.datatype">
  <xs:union memberTypes="xs:positiveInteger">
   <xs:simpleType>
    <xs:restriction base="xs:negativeInteger">
     <xs:minInclusive value="-1"/>
    </xs:restriction>
   </xs:simpleType>
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="forever"/>
        
   <xs:sequence>
    <xs:element ref="send" maxOccurs="unbounded"/>
    <xs:choice minOccurs="0">
     <xs:element name="exit" type="exitType"/>
     <xs:element name="disconnect" type="exitType"/>
    </xs:choice>
   </xs:sequence>
  </xs:choice>
 </xs:group>
 <xs:element name="send">
  <xs:complexType>
   <xs:attribute name="event" type="momlEvent.datatype" use="required"/>
   <xs:attribute name="target" type="momlTarget.datatype"
                 use="required"/>
   <xs:attribute name="namelist" type="momlNamelist.datatype"/>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="exitType">
  <xs:attribute name="namelist" type="momlNamelist.datatype"/>
 </xs:complexType>
 <xs:simpleType name="momlID.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9._\-]*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="momlEvent.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9._\-]*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="momlNamelist.datatype">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:simpleType name="dtmfDigits.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[0-9#*]+"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="iterate.datatype">
  <xs:union memberTypes="xs:positiveInteger">
   <xs:simpleType>
    <xs:restriction base="xs:negativeInteger">
     <xs:minInclusive value="-1"/>
    </xs:restriction>
   </xs:simpleType>
   <xs:simpleType>
    <xs:restriction base="xs:string">
     <xs:enumeration value="forever"/>
        
    </xs:restriction>
   </xs:simpleType>
  </xs:union>
 </xs:simpleType>
 <xs:simpleType name="momlTarget.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9._\-]*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="duration.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="(\+|\-)?([0-9]*\.)?[0-9]+(ms|s)"/>
  </xs:restriction>
 </xs:simpleType>
</xs:schema>
        
    </xs:restriction>
   </xs:simpleType>
  </xs:union>
 </xs:simpleType>
 <xs:simpleType name="momlTarget.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[a-zA-Z0-9][a-zA-Z0-9._\-]*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="duration.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="(\+|\-)?([0-9]*\.)?[0-9]+(ms|s)"/>
  </xs:restriction>
 </xs:simpleType>
</xs:schema>
        
16.3.3. msml-dialog-base.xsd
16.3.3. msml-dialog-base.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
</xs:schema>
        
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
</xs:schema>
        
16.3.4. msml-dialog-base-datatypes.xsd
16.3.4. msml-dialog-base-datatypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:import namespace="http://www.w3.org/XML/1998/namespace"
            schemaLocation="http://www.w3.org/2001/xml.xsd"/>
 <xs:element name="play" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:choice maxOccurs="unbounded">
       <xs:element name="audio" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:attribute name="uri" type="xs:anyURI" use="required"/>
         <xs:attribute name="iterate" type="iterate.datatype"
                       default="1"/>
         <xs:attribute name="format" type="xs:string" use="optional"/>
        
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:import namespace="http://www.w3.org/XML/1998/namespace"
            schemaLocation="http://www.w3.org/2001/xml.xsd"/>
 <xs:element name="play" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:choice maxOccurs="unbounded">
       <xs:element name="audio" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:attribute name="uri" type="xs:anyURI" use="required"/>
         <xs:attribute name="iterate" type="iterate.datatype"
                       default="1"/>
         <xs:attribute name="format" type="xs:string" use="optional"/>
        
         <xs:attribute name="audiosamplerate" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="audiosamplesize" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute ref="xml:lang"/>
        </xs:complexType>
       </xs:element>
       <xs:element name="video" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:attribute name="uri" type="xs:anyURI" use="required"/>
         <xs:attribute name="iterate" type="iterate.datatype"
                       use="optional" default="1"/>
         <xs:attribute name="format" type="xs:string" use="optional"/>
         <xs:attribute name="audiosamplerate" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="audiosamplesize" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="codecconfig" type="xs:string"
                       use="optional"/>
         <xs:attribute name="profile" type="xs:string" use="optional"/>
         <xs:attribute name="level" type="xs:string" use="optional"/>
         <xs:attribute name="imagewidth" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="imageheight" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="maxbitrate" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="framerate" type="xs:positiveInteger"
                       use="optional"/>
        </xs:complexType>
       </xs:element>
       <xs:element name="media" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="audio" minOccurs="0">
           <xs:complexType>
            <xs:attribute name="uri" type="xs:anyURI" use="required"/>
            <xs:attribute name="iterate" type="iterate.datatype"
                          default="1"/>
            <xs:attribute name="format" type="xs:string"
                          use="optional"/>
            <xs:attribute name="audiosamplerate"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute name="audiosamplesize"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute ref="xml:lang"/>
           </xs:complexType>
          </xs:element>
        
         <xs:attribute name="audiosamplerate" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="audiosamplesize" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute ref="xml:lang"/>
        </xs:complexType>
       </xs:element>
       <xs:element name="video" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:attribute name="uri" type="xs:anyURI" use="required"/>
         <xs:attribute name="iterate" type="iterate.datatype"
                       use="optional" default="1"/>
         <xs:attribute name="format" type="xs:string" use="optional"/>
         <xs:attribute name="audiosamplerate" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="audiosamplesize" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="codecconfig" type="xs:string"
                       use="optional"/>
         <xs:attribute name="profile" type="xs:string" use="optional"/>
         <xs:attribute name="level" type="xs:string" use="optional"/>
         <xs:attribute name="imagewidth" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="imageheight" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="maxbitrate" type="xs:positiveInteger"
                       use="optional"/>
         <xs:attribute name="framerate" type="xs:positiveInteger"
                       use="optional"/>
        </xs:complexType>
       </xs:element>
       <xs:element name="media" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="audio" minOccurs="0">
           <xs:complexType>
            <xs:attribute name="uri" type="xs:anyURI" use="required"/>
            <xs:attribute name="iterate" type="iterate.datatype"
                          default="1"/>
            <xs:attribute name="format" type="xs:string"
                          use="optional"/>
            <xs:attribute name="audiosamplerate"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute name="audiosamplesize"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute ref="xml:lang"/>
           </xs:complexType>
          </xs:element>
        
          <xs:element name="video" minOccurs="0">
           <xs:complexType>
            <xs:attribute name="uri" type="xs:anyURI" use="required"/>
            <xs:attribute name="iterate" type="iterate.datatype"
                          use="optional" default="1"/>
            <xs:attribute name="format" type="xs:string"
                          use="optional"/>
            <xs:attribute name="audiosamplerate"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute name="audiosamplesize"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute name="codecconfig" type="xs:string"
                          use="optional"/>
            <xs:attribute name="profile" type="xs:string"
                          use="optional"/>
            <xs:attribute name="level" type="xs:string" use="optional"/>
            <xs:attribute name="imagewidth" type="xs:positiveInteger"
                          use="optional"/>
            <xs:attribute name="imageheight" type="xs:positiveInteger"
                          use="optional"/>
            <xs:attribute name="maxbitrate" type="xs:positiveInteger"
                          use="optional"/>
            <xs:attribute name="framerate" type="xs:positiveInteger"
                          use="optional"/>
           </xs:complexType>
          </xs:element>
         </xs:choice>
        </xs:complexType>
       </xs:element>
       <xs:element ref="smedia" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:choice minOccurs="0">
       <xs:element name="playexit">
        <xs:complexType>
         <xs:group ref="sendType"/>
        </xs:complexType>
       </xs:element>
      </xs:choice>
     </xs:sequence>
     <xs:attribute name="interval" type="posDuration.datatype"
                   use="optional"/>
     <xs:attribute name="iterate" type="iterate.datatype" use="optional"
                   default="1"/>
     <xs:attribute name="offset" type="duration.datatype"
                   use="optional"/>
     <xs:attribute name="initial" use="optional" default="generate">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        
          <xs:element name="video" minOccurs="0">
           <xs:complexType>
            <xs:attribute name="uri" type="xs:anyURI" use="required"/>
            <xs:attribute name="iterate" type="iterate.datatype"
                          use="optional" default="1"/>
            <xs:attribute name="format" type="xs:string"
                          use="optional"/>
            <xs:attribute name="audiosamplerate"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute name="audiosamplesize"
                          type="xs:positiveInteger" use="optional"/>
            <xs:attribute name="codecconfig" type="xs:string"
                          use="optional"/>
            <xs:attribute name="profile" type="xs:string"
                          use="optional"/>
            <xs:attribute name="level" type="xs:string" use="optional"/>
            <xs:attribute name="imagewidth" type="xs:positiveInteger"
                          use="optional"/>
            <xs:attribute name="imageheight" type="xs:positiveInteger"
                          use="optional"/>
            <xs:attribute name="maxbitrate" type="xs:positiveInteger"
                          use="optional"/>
            <xs:attribute name="framerate" type="xs:positiveInteger"
                          use="optional"/>
           </xs:complexType>
          </xs:element>
         </xs:choice>
        </xs:complexType>
       </xs:element>
       <xs:element ref="smedia" minOccurs="0" maxOccurs="unbounded"/>
      </xs:choice>
      <xs:choice minOccurs="0">
       <xs:element name="playexit">
        <xs:complexType>
         <xs:group ref="sendType"/>
        </xs:complexType>
       </xs:element>
      </xs:choice>
     </xs:sequence>
     <xs:attribute name="interval" type="posDuration.datatype"
                   use="optional"/>
     <xs:attribute name="iterate" type="iterate.datatype" use="optional"
                   default="1"/>
     <xs:attribute name="offset" type="duration.datatype"
                   use="optional"/>
     <xs:attribute name="initial" use="optional" default="generate">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        
        <xs:enumeration value="generate"/>
        <xs:enumeration value="suspend"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="maxtime" type="posDuration.datatype"
                   use="optional"/>
     <xs:attribute name="skip" type="duration.datatype" use="optional"
                   default="3s"/>
     <xs:attribute name="barge" type="boolean.datatype" use="optional"
                   default="false"/>
     <xs:attribute name="cleardb" type="boolean.datatype" use="optional"
                   default="false"/>
     <xs:attribute ref="xml:lang"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="record" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element ref="play" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tonegen" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="recordexit">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
     <xs:attribute name="append" type="boolean.datatype" use="optional"
                   default="false"/>
     <xs:attribute name="dest" type="xs:anyURI" use="optional"/>
     <xs:attribute name="audiodest" type="xs:anyURI" use="optional"/>
     <xs:attribute name="videodest" type="xs:anyURI" use="optional"/>
     <xs:attribute name="format" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="codecconfig" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="audiosamplerate" type="xs:positiveInteger"
                   use="optional"/>
        
        <xs:enumeration value="generate"/>
        <xs:enumeration value="suspend"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="maxtime" type="posDuration.datatype"
                   use="optional"/>
     <xs:attribute name="skip" type="duration.datatype" use="optional"
                   default="3s"/>
     <xs:attribute name="barge" type="boolean.datatype" use="optional"
                   default="false"/>
     <xs:attribute name="cleardb" type="boolean.datatype" use="optional"
                   default="false"/>
     <xs:attribute ref="xml:lang"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="record" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element ref="play" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="tonegen" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="recordexit">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
     <xs:attribute name="append" type="boolean.datatype" use="optional"
                   default="false"/>
     <xs:attribute name="dest" type="xs:anyURI" use="optional"/>
     <xs:attribute name="audiodest" type="xs:anyURI" use="optional"/>
     <xs:attribute name="videodest" type="xs:anyURI" use="optional"/>
     <xs:attribute name="format" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="codecconfig" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="audiosamplerate" type="xs:positiveInteger"
                   use="optional"/>
        
     <xs:attribute name="audiosamplesize" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="profile" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="level" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="imagewidth" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="imageheight" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="maxbitrate" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="framerate" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="maxtime" type="posDuration.datatype"
                   use="required"/>
     <xs:attribute name="initial" use="optional" default="create">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="create"/>
        <xs:enumeration value="suspend"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="prespeech" type="posDuration.datatype"
                   use="optional" default="0s"/>
     <xs:attribute name="postspeech" type="posDuration.datatype"
                   use="optional" default="0s"/>
     <xs:attribute name="termkey" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:pattern value="[0-9#*ABCD]"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dtmf" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
        
     <xs:attribute name="audiosamplesize" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="profile" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="level" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string"/>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="imagewidth" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="imageheight" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="maxbitrate" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="framerate" type="xs:positiveInteger"
                   use="optional"/>
     <xs:attribute name="maxtime" type="posDuration.datatype"
                   use="required"/>
     <xs:attribute name="initial" use="optional" default="create">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="create"/>
        <xs:enumeration value="suspend"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="prespeech" type="posDuration.datatype"
                   use="optional" default="0s"/>
     <xs:attribute name="postspeech" type="posDuration.datatype"
                   use="optional" default="0s"/>
     <xs:attribute name="termkey" use="optional">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:pattern value="[0-9#*ABCD]"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dtmf" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
        
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="pattern" maxOccurs="unbounded">
       <xs:complexType>
        <xs:group ref="sendType"/>
        <xs:attribute name="digits" type="xs:string" use="required"/>
        <xs:attribute name="format">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:enumeration value="mgcp"/>
           <xs:enumeration value="megaco"/>
           <xs:enumeration value="moml+digits"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iterate" type="iterate.datatype"
                      default="1"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="detect" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="noinput" type="iterateSendType" minOccurs="0"/>
      <xs:element name="nomatch" type="iterateSendType" minOccurs="0"/>
      <xs:element name="dtmfexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element ref="play" minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="cleardb" type="boolean.datatype"
                   default="true"/>
     <xs:attribute name="fdt" type="posDuration.datatype" default="0s"/>
     <xs:attribute name="idt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="edt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
     <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
     <xs:attribute name="ldd" type="posDuration.datatype" default="0s"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="collect" substitutionGroup="primitive">
  <xs:complexType>
        
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="pattern" maxOccurs="unbounded">
       <xs:complexType>
        <xs:group ref="sendType"/>
        <xs:attribute name="digits" type="xs:string" use="required"/>
        <xs:attribute name="format">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:enumeration value="mgcp"/>
           <xs:enumeration value="megaco"/>
           <xs:enumeration value="moml+digits"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iterate" type="iterate.datatype"
                      default="1"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="detect" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="noinput" type="iterateSendType" minOccurs="0"/>
      <xs:element name="nomatch" type="iterateSendType" minOccurs="0"/>
      <xs:element name="dtmfexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element ref="play" minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="cleardb" type="boolean.datatype"
                   default="true"/>
     <xs:attribute name="fdt" type="posDuration.datatype" default="0s"/>
     <xs:attribute name="idt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="edt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
     <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
     <xs:attribute name="ldd" type="posDuration.datatype" default="0s"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="collect" substitutionGroup="primitive">
  <xs:complexType>
        
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="pattern" maxOccurs="unbounded">
       <xs:complexType>
        <xs:group ref="sendType"/>
        <xs:attribute name="digits" type="xs:string" use="required"/>
        <xs:attribute name="format">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:enumeration value="mgcp"/>
           <xs:enumeration value="megaco"/>
           <xs:enumeration value="moml+digits"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iterate" type="iterate.datatype"
                      default="1"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="detect" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="noinput" type="iterateSendType" minOccurs="0"/>
      <xs:element name="nomatch" type="iterateSendType" minOccurs="0"/>
      <xs:element name="dtmfexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element ref="play" minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="cleardb" type="boolean.datatype"
                   default="true"/>
     <xs:attribute name="fdt" type="posDuration.datatype" default="0s"/>
     <xs:attribute name="idt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="edt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
     <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
     <xs:attribute name="ldd" type="posDuration.datatype"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dtmfgen" substitutionGroup="primitive">
        
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="pattern" maxOccurs="unbounded">
       <xs:complexType>
        <xs:group ref="sendType"/>
        <xs:attribute name="digits" type="xs:string" use="required"/>
        <xs:attribute name="format">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:enumeration value="mgcp"/>
           <xs:enumeration value="megaco"/>
           <xs:enumeration value="moml+digits"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iterate" type="iterate.datatype"
                      default="1"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="detect" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="noinput" type="iterateSendType" minOccurs="0"/>
      <xs:element name="nomatch" type="iterateSendType" minOccurs="0"/>
      <xs:element name="dtmfexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element ref="play" minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="cleardb" type="boolean.datatype"
                   default="true"/>
     <xs:attribute name="fdt" type="posDuration.datatype" default="0s"/>
     <xs:attribute name="idt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="edt" type="posDuration.datatype" default="4s"/>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
     <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
     <xs:attribute name="ldd" type="posDuration.datatype"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="dtmfgen" substitutionGroup="primitive">
        
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element name="dtmfgenexit">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
     <xs:attribute name="level" use="optional" default="-6">
      <xs:simpleType>
       <xs:restriction base="xs:nonPositiveInteger">
        <xs:maxInclusive value="0"/>
        <xs:minInclusive value="-96"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="digits" type="dtmfDigits.datatype"
                   use="required"/>
     <xs:attribute name="dur" type="posDuration.datatype" use="optional"
                   default="100ms"/>
     <xs:attribute name="interval" type="posDuration.datatype"
                   use="optional" default="100ms"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="tonegen" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element name="tonegenexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="tone" maxOccurs="unbounded">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="tone1">
          <xs:complexType>
           <xs:attribute name="freq" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:unsignedInt">
              <xs:minInclusive value="0"/>
              <xs:maxInclusive value="3999"/>
        
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element name="dtmfgenexit">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
     <xs:attribute name="level" use="optional" default="-6">
      <xs:simpleType>
       <xs:restriction base="xs:nonPositiveInteger">
        <xs:maxInclusive value="0"/>
        <xs:minInclusive value="-96"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="digits" type="dtmfDigits.datatype"
                   use="required"/>
     <xs:attribute name="dur" type="posDuration.datatype" use="optional"
                   default="100ms"/>
     <xs:attribute name="interval" type="posDuration.datatype"
                   use="optional" default="100ms"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="tonegen" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element name="tonegenexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
      <xs:element name="tone" maxOccurs="unbounded">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="tone1">
          <xs:complexType>
           <xs:attribute name="freq" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:unsignedInt">
              <xs:minInclusive value="0"/>
              <xs:maxInclusive value="3999"/>
        
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="atten" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:nonPositiveInteger">
              <xs:minInclusive value="-96"/>
              <xs:maxInclusive value="0"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
          </xs:complexType>
         </xs:element>
         <xs:element name="tone2">
          <xs:complexType>
           <xs:attribute name="freq" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:unsignedInt">
              <xs:minInclusive value="0"/>
              <xs:maxInclusive value="3999"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="atten" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:nonPositiveInteger">
              <xs:minInclusive value="-96"/>
              <xs:maxInclusive value="0"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
          </xs:complexType>
         </xs:element>
         <xs:element name="silence" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
           <xs:attribute name="duration" type="duration.datatype"
                         use="required"/>
          </xs:complexType>
         </xs:element>
        </xs:sequence>
        <xs:attribute name="duration" use="required">
         <xs:simpleType>
          <xs:restriction base="duration.datatype"/>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iterate" type="iterate.datatype"
                      use="optional" default="1"/>
       </xs:complexType>
        
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="atten" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:nonPositiveInteger">
              <xs:minInclusive value="-96"/>
              <xs:maxInclusive value="0"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
          </xs:complexType>
         </xs:element>
         <xs:element name="tone2">
          <xs:complexType>
           <xs:attribute name="freq" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:unsignedInt">
              <xs:minInclusive value="0"/>
              <xs:maxInclusive value="3999"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
           <xs:attribute name="atten" use="required">
            <xs:simpleType>
             <xs:restriction base="xs:nonPositiveInteger">
              <xs:minInclusive value="-96"/>
              <xs:maxInclusive value="0"/>
             </xs:restriction>
            </xs:simpleType>
           </xs:attribute>
          </xs:complexType>
         </xs:element>
         <xs:element name="silence" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
           <xs:attribute name="duration" type="duration.datatype"
                         use="required"/>
          </xs:complexType>
         </xs:element>
        </xs:sequence>
        <xs:attribute name="duration" use="required">
         <xs:simpleType>
          <xs:restriction base="duration.datatype"/>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="iterate" type="iterate.datatype"
                      use="optional" default="1"/>
       </xs:complexType>
        
      </xs:element>
      <xs:element name="silence" minOccurs="0" maxOccurs="unbounded">
       <xs:complexType>
        <xs:attribute name="duration" type="duration.datatype"
                      use="required"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
     <xs:attribute name="iterate" type="iterate.datatype" use="optional"
                   default="1"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="iterateSendType">
  <xs:group ref="sendType"/>
  <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
 </xs:complexType>
 <xs:element name="smedia" type="smediaType" abstract="true"/>
 <xs:complexType name="smediaType">
  <xs:attribute ref="xml:lang"/>
  <xs:attribute name="iterate" type="iterate.datatype"/>
 </xs:complexType>
 <xs:element name="var" substitutionGroup="smedia">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="smediaType">
     <xs:attribute name="type" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="date"/>
        <xs:enumeration value="digits"/>
        <xs:enumeration value="duration"/>
        <xs:enumeration value="month"/>
        <xs:enumeration value="money"/>
        <xs:enumeration value="number"/>
        <xs:enumeration value="silence"/>
        <xs:enumeration value="time"/>
        <xs:enumeration value="weekday"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="subtype" type="xs:string" use="optional"/>
     <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:extension>
   </xs:complexContent>
        
      </xs:element>
      <xs:element name="silence" minOccurs="0" maxOccurs="unbounded">
       <xs:complexType>
        <xs:attribute name="duration" type="duration.datatype"
                      use="required"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
     <xs:attribute name="iterate" type="iterate.datatype" use="optional"
                   default="1"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="iterateSendType">
  <xs:group ref="sendType"/>
  <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
 </xs:complexType>
 <xs:element name="smedia" type="smediaType" abstract="true"/>
 <xs:complexType name="smediaType">
  <xs:attribute ref="xml:lang"/>
  <xs:attribute name="iterate" type="iterate.datatype"/>
 </xs:complexType>
 <xs:element name="var" substitutionGroup="smedia">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="smediaType">
     <xs:attribute name="type" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="date"/>
        <xs:enumeration value="digits"/>
        <xs:enumeration value="duration"/>
        <xs:enumeration value="month"/>
        <xs:enumeration value="money"/>
        <xs:enumeration value="number"/>
        <xs:enumeration value="silence"/>
        <xs:enumeration value="time"/>
        <xs:enumeration value="weekday"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="subtype" type="xs:string" use="optional"/>
     <xs:attribute name="value" type="xs:string" use="required"/>
    </xs:extension>
   </xs:complexContent>
        
  </xs:complexType>
 </xs:element>
</xs:schema>
        
  </xs:complexType>
 </xs:element>
</xs:schema>
        
16.3.5. msml-dialog-transform.xsd
16.3.5. msml-dialog-transform.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-transform-datatypes.xsd"/>
</xs:schema>
        
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-transform-datatypes.xsd"/>
</xs:schema>
        
16.3.6. msml-dialog-transform-datatypes.xsd
16.3.6. msml-dialog-transform-datatypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:import namespace="http://www.w3.org/XML/1998/namespace"
            schemaLocation="http://www.w3.org/2001/xml.xsd"/>
 <xs:element name="vad" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:all>
      <xs:element name="voice" type="vadPatternType" minOccurs="0"/>
      <xs:element name="silence" type="vadPatternType" minOccurs="0"/>
      <xs:element name="tvoice" type="vadPatternType" minOccurs="0"/>
      <xs:element name="tsilence" type="vadPatternType" minOccurs="0"/>
     </xs:all>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="gain" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:attribute name="incr" default="3">
      <xs:simpleType>
       <xs:restriction base="xs:positiveInteger">
        <xs:maxInclusive value="96"/>
        
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:import namespace="http://www.w3.org/XML/1998/namespace"
            schemaLocation="http://www.w3.org/2001/xml.xsd"/>
 <xs:element name="vad" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:all>
      <xs:element name="voice" type="vadPatternType" minOccurs="0"/>
      <xs:element name="silence" type="vadPatternType" minOccurs="0"/>
      <xs:element name="tvoice" type="vadPatternType" minOccurs="0"/>
      <xs:element name="tsilence" type="vadPatternType" minOccurs="0"/>
     </xs:all>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="gain" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:attribute name="incr" default="3">
      <xs:simpleType>
       <xs:restriction base="xs:positiveInteger">
        <xs:maxInclusive value="96"/>
        
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="amt" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:integer">
        <xs:minInclusive value="-96"/>
        <xs:maxInclusive value="96"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="agc" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:attribute name="tgtlvl" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:nonPositiveInteger">
        <xs:minInclusive value="-40"/>
        <xs:maxInclusive value="0"/>
       </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:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="gate" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:attribute name="initial" default="pass">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="pass"/>
        <xs:enumeration value="halt"/>
        
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="amt" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:integer">
        <xs:minInclusive value="-96"/>
        <xs:maxInclusive value="96"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="agc" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:attribute name="tgtlvl" use="required">
      <xs:simpleType>
       <xs:restriction base="xs:nonPositiveInteger">
        <xs:minInclusive value="-40"/>
        <xs:maxInclusive value="0"/>
       </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:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="gate" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:attribute name="initial" default="pass">
      <xs:simpleType>
       <xs:restriction base="xs:string">
        <xs:enumeration value="pass"/>
        <xs:enumeration value="halt"/>
        
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="clamp" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType"/>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="relay" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType"/>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="vadPatternType">
  <xs:group ref="sendType"/>
  <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
  <xs:attribute name="len" type="posDuration.datatype" use="required"/>
  <xs:attribute name="sen" type="posDuration.datatype" use="optional"/>
 </xs:complexType>
</xs:schema>
        
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="clamp" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType"/>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="relay" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType"/>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="vadPatternType">
  <xs:group ref="sendType"/>
  <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
  <xs:attribute name="len" type="posDuration.datatype" use="required"/>
  <xs:attribute name="sen" type="posDuration.datatype" use="optional"/>
 </xs:complexType>
</xs:schema>
        
16.3.7. msml-dialog-group.xsd
16.3.7. msml-dialog-group.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-group-datatypes.xsd"/>
</xs:schema>
        
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-group-datatypes.xsd"/>
</xs:schema>
        
16.3.8. msml-dialog-group-datatypes.xsd
16.3.8. msml-dialog-group-datatypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-core-datatypes.xsd"/>
        
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="unqualified"
           attributeFormDefault="unqualified">
 <xs:include schemaLocation="msml-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:element name="group" substitutionGroup="control">
  <xs:complexType>
   <xs:sequence>
    <xs:group ref="executeType"/>
    <xs:element name="groupexit" minOccurs="0">
     <xs:complexType>
      <xs:group ref="sendType"/>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
   <xs:attribute name="id" type="momlID.datatype"/>
   <xs:attribute name="topology" use="required">
    <xs:simpleType>
     <xs:restriction base="xs:string">
      <xs:enumeration value="serial"/>
      <xs:enumeration value="parallel"/>
      <xs:enumeration value="fullduplex"/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
 </xs:element>
</xs:schema>
        
 <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:element name="group" substitutionGroup="control">
  <xs:complexType>
   <xs:sequence>
    <xs:group ref="executeType"/>
    <xs:element name="groupexit" minOccurs="0">
     <xs:complexType>
      <xs:group ref="sendType"/>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
   <xs:attribute name="id" type="momlID.datatype"/>
   <xs:attribute name="topology" use="required">
    <xs:simpleType>
     <xs:restriction base="xs:string">
      <xs:enumeration value="serial"/>
      <xs:enumeration value="parallel"/>
      <xs:enumeration value="fullduplex"/>
     </xs:restriction>
    </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
 </xs:element>
</xs:schema>
        
16.3.9. msml-dialog-speech.xsd
16.3.9. msml-dialog-speech.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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-speech-datatypes.xsd"/>
</xs:schema>
        
<?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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-speech-datatypes.xsd"/>
</xs:schema>
        
16.3.10. msml-dialog-speech-datatypes.xsd
16.3.10. msml-dialog-speech-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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
 <xs:include schemaLocation="http://www.w3.org/TR/2002/WD-speech-
        
<?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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-base-datatypes.xsd"/>
 <xs:include schemaLocation="http://www.w3.org/TR/2002/WD-speech-
        
             synthesis-20020405/synthesis-core.xsd"/>
 <xs:include schemaLocation="http://www.w3.org/TR/speech-
             grammar/grammar-core.xsd"/>
 <xs:element name="speech" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="grammar" maxOccurs="unbounded">
       <xs:complexType>
        <xs:complexContent>
         <xs:extension base="grammar">
          <xs:choice>
           <xs:element name="match" type="iterateSendType"
                       minOccurs="0"/>
          </xs:choice>
          <xs:attribute name="uri" type="xs:anyURI"/>
          <xs:attribute name="iterate" type="iterate.datatype"
                        default="1"/>
         </xs:extension>
        </xs:complexContent>
       </xs:complexType>
      </xs:element>
      <xs:element name="noinput" type="iterateSendType" minOccurs="0"/>
      <xs:element name="nomatch" type="iterateSendType" minOccurs="0"/>
      <xs:element name="speechexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
     <xs:attribute name="noint" type="posDuration.datatype"/>
     <xs:attribute name="norect" type="posDuration.datatype"/>
     <xs:attribute name="spcmplt" type="posDuration.datatype"/>
     <xs:attribute name="confidence">
      <xs:simpleType>
       <xs:restriction base="xs:positiveInteger">
        <xs:maxInclusive value="100"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="sens" type="xs:positiveInteger"/>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
     <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
        
             synthesis-20020405/synthesis-core.xsd"/>
 <xs:include schemaLocation="http://www.w3.org/TR/speech-
             grammar/grammar-core.xsd"/>
 <xs:element name="speech" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="grammar" maxOccurs="unbounded">
       <xs:complexType>
        <xs:complexContent>
         <xs:extension base="grammar">
          <xs:choice>
           <xs:element name="match" type="iterateSendType"
                       minOccurs="0"/>
          </xs:choice>
          <xs:attribute name="uri" type="xs:anyURI"/>
          <xs:attribute name="iterate" type="iterate.datatype"
                        default="1"/>
         </xs:extension>
        </xs:complexContent>
       </xs:complexType>
      </xs:element>
      <xs:element name="noinput" type="iterateSendType" minOccurs="0"/>
      <xs:element name="nomatch" type="iterateSendType" minOccurs="0"/>
      <xs:element name="speechexit" minOccurs="0">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:sequence>
     <xs:attribute name="noint" type="posDuration.datatype"/>
     <xs:attribute name="norect" type="posDuration.datatype"/>
     <xs:attribute name="spcmplt" type="posDuration.datatype"/>
     <xs:attribute name="confidence">
      <xs:simpleType>
       <xs:restriction base="xs:positiveInteger">
        <xs:maxInclusive value="100"/>
       </xs:restriction>
      </xs:simpleType>
     </xs:attribute>
     <xs:attribute name="sens" type="xs:positiveInteger"/>
     <xs:attribute name="starttimer" type="boolean.datatype"
                   default="false"/>
     <xs:attribute name="iterate" type="iterate.datatype" default="1"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
        
 </xs:element>
 <xs:element name="tts" type="smediaType" substitutionGroup="smedia"/>
</xs:schema>
        
 </xs:element>
 <xs:element name="tts" type="smediaType" substitutionGroup="smedia"/>
</xs:schema>
        
16.3.11. msml-dialog-fax-detect.xsd
16.3.11. msml-dialog-fax-detect.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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-fax-detect-datatypes.xsd"/>
</xs:schema>
        
<?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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-fax-detect-datatypes.xsd"/>
</xs:schema>
        
16.3.12. msml-dialog-fax-detect-datatypes.xsd
16.3.12. msml-dialog-fax-detect-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-dialog-core-datatypes.xsd"/>
 <xs:element name="faxdetect" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element name="faxdetectexit">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
</xs:schema>
        
<?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-dialog-core-datatypes.xsd"/>
 <xs:element name="faxdetect" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:choice minOccurs="0">
      <xs:element name="faxdetectexit">
       <xs:complexType>
        <xs:group ref="sendType"/>
       </xs:complexType>
      </xs:element>
     </xs:choice>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
</xs:schema>
        
16.3.13. msml-dialog-fax-sendrecv.xsd
16.3.13. msml-dialog-fax-sendrecv.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-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-fax-sendrecv-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.xsd"/>
 <xs:include schemaLocation="msml-dialog-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-dialog-fax-sendrecv-datatypes.xsd"/>
        
</xs:schema>
        
</xs:schema>
        
16.3.14. msml-dialog-fax-sendrecv-datatypes.xsd
16.3.14. msml-dialog-fax-sendrecv-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-dialog-core-datatypes.xsd"/>
 <xs:element name="faxsend" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="sendobj" type="sendobjType" minOccurs="0"
          maxOccurs="unbounded"/>
      <xs:element name="hdrfooter" type="hdrfooterType" minOccurs="0"/>
      <xs:element name="rxpoll" minOccurs="0">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="rcvobj" type="rcvobjType"
                     maxOccurs="unbounded"/>
         <xs:element name="hdrfooter" type="hdrfooterType"
                     minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="rmtid" type="faxid.datatype"
                      use="required"/>
       </xs:complexType>
      </xs:element>
      <xs:group ref="faxstatusrequest"/>
     </xs:sequence>
     <xs:attribute name="lclid" type="faxid.datatype" use="optional"/>
     <xs:attribute name="minspeed" type="faxspeed.datatype"
                   use="optional"/>
     <xs:attribute name="maxspeed" type="faxspeed.datatype"
                   use="optional"/>
     <xs:attribute name="ecm" type="boolean.datatype" use="optional"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="faxrecv" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="rcvobj" type="rcvobjType" minOccurs="0"
                  maxOccurs="unbounded"/>
        
<?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-dialog-core-datatypes.xsd"/>
 <xs:element name="faxsend" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="sendobj" type="sendobjType" minOccurs="0"
          maxOccurs="unbounded"/>
      <xs:element name="hdrfooter" type="hdrfooterType" minOccurs="0"/>
      <xs:element name="rxpoll" minOccurs="0">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="rcvobj" type="rcvobjType"
                     maxOccurs="unbounded"/>
         <xs:element name="hdrfooter" type="hdrfooterType"
                     minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="rmtid" type="faxid.datatype"
                      use="required"/>
       </xs:complexType>
      </xs:element>
      <xs:group ref="faxstatusrequest"/>
     </xs:sequence>
     <xs:attribute name="lclid" type="faxid.datatype" use="optional"/>
     <xs:attribute name="minspeed" type="faxspeed.datatype"
                   use="optional"/>
     <xs:attribute name="maxspeed" type="faxspeed.datatype"
                   use="optional"/>
     <xs:attribute name="ecm" type="boolean.datatype" use="optional"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="faxrecv" substitutionGroup="primitive">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="primitiveType">
     <xs:sequence>
      <xs:element name="rcvobj" type="rcvobjType" minOccurs="0"
                  maxOccurs="unbounded"/>
        
      <xs:element name="hdrfooter" type="hdrfooterType" minOccurs="0"/>
      <xs:element name="txpoll" minOccurs="0">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="sendobj" type="sendobjType"
                     maxOccurs="unbounded"/>
         <xs:element name="hdrfooter" type="hdrfooterType"
                     minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="rmtid" type="faxid.datatype"/>
       </xs:complexType>
      </xs:element>
      <xs:group ref="faxstatusrequest"/>
     </xs:sequence>
     <xs:attribute name="lclid" type="faxid.datatype" use="optional"/>
     <xs:attribute name="ecm" type="boolean.datatype" default="true"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:group name="faxstatusrequest">
  <xs:sequence>
   <xs:element name="faxstart" minOccurs="0"/>
   <xs:element name="faxnegotiate" minOccurs="0"/>
   <xs:element name="faxpagedone" minOccurs="0"/>
   <xs:element name="faxobjectdone" minOccurs="0"/>
   <xs:element name="faxopcomplete" minOccurs="0"/>
   <xs:element name="faxpollstart" minOccurs="0"/>
  </xs:sequence>
 </xs:group>
 <xs:complexType name="hdrfooterType">
  <xs:choice>
   <xs:element name="format" type="xs:string" minOccurs="0"
               maxOccurs="unbounded"/>
  </xs:choice>
  <xs:attribute name="type" type="hdrfooter.datatype"/>
  <xs:attribute name="style" type="hdrfooterstyle.datatype"/>
 </xs:complexType>
 <xs:complexType name="formatType">
  <xs:simpleContent>
   <xs:extension base="xs:string">
    <xs:attribute name="style">
     <xs:simpleType>
      <xs:restriction base="xs:string">
       <xs:enumeration value="append"/>
       <xs:enumeration value="overlay"/>
       <xs:enumeration value="replace"/>
      </xs:restriction>
        
      <xs:element name="hdrfooter" type="hdrfooterType" minOccurs="0"/>
      <xs:element name="txpoll" minOccurs="0">
       <xs:complexType>
        <xs:sequence>
         <xs:element name="sendobj" type="sendobjType"
                     maxOccurs="unbounded"/>
         <xs:element name="hdrfooter" type="hdrfooterType"
                     minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="rmtid" type="faxid.datatype"/>
       </xs:complexType>
      </xs:element>
      <xs:group ref="faxstatusrequest"/>
     </xs:sequence>
     <xs:attribute name="lclid" type="faxid.datatype" use="optional"/>
     <xs:attribute name="ecm" type="boolean.datatype" default="true"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:group name="faxstatusrequest">
  <xs:sequence>
   <xs:element name="faxstart" minOccurs="0"/>
   <xs:element name="faxnegotiate" minOccurs="0"/>
   <xs:element name="faxpagedone" minOccurs="0"/>
   <xs:element name="faxobjectdone" minOccurs="0"/>
   <xs:element name="faxopcomplete" minOccurs="0"/>
   <xs:element name="faxpollstart" minOccurs="0"/>
  </xs:sequence>
 </xs:group>
 <xs:complexType name="hdrfooterType">
  <xs:choice>
   <xs:element name="format" type="xs:string" minOccurs="0"
               maxOccurs="unbounded"/>
  </xs:choice>
  <xs:attribute name="type" type="hdrfooter.datatype"/>
  <xs:attribute name="style" type="hdrfooterstyle.datatype"/>
 </xs:complexType>
 <xs:complexType name="formatType">
  <xs:simpleContent>
   <xs:extension base="xs:string">
    <xs:attribute name="style">
     <xs:simpleType>
      <xs:restriction base="xs:string">
       <xs:enumeration value="append"/>
       <xs:enumeration value="overlay"/>
       <xs:enumeration value="replace"/>
      </xs:restriction>
        
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
 <xs:complexType name="rcvobjType">
  <xs:attribute name="objuri" type="xs:anyURI" use="required"/>
  <xs:attribute name="maxpages" type="xs:positiveInteger"/>
 </xs:complexType>
 <xs:complexType name="sendobjType">
  <xs:attribute name="objuri" type="xs:anyURI" use="required"/>
  <xs:attribute name="startpage" type="xs:positiveInteger"/>
  <xs:attribute name="pagecount" type="xs:positiveInteger"/>
 </xs:complexType>
 <xs:simpleType name="faxid.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[0-9+*- ]{20}"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="faxspeed.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="2400"/>
   <xs:enumeration value="4800"/>
   <xs:enumeration value="7200"/>
   <xs:enumeration value="9600"/>
   <xs:enumeration value="12000"/>
   <xs:enumeration value="14400"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="hdrfooter.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="header"/>
   <xs:enumeration value="footer"/>
   <xs:enumeration value="autohdr"/>
   <xs:enumeration value="nohdr"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="hdrfooterstyle.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="append"/>
   <xs:enumeration value="overlay"/>
   <xs:enumeration value="replace"/>
  </xs:restriction>
 </xs:simpleType>
</xs:schema>
        
     </xs:simpleType>
    </xs:attribute>
   </xs:extension>
  </xs:simpleContent>
 </xs:complexType>
 <xs:complexType name="rcvobjType">
  <xs:attribute name="objuri" type="xs:anyURI" use="required"/>
  <xs:attribute name="maxpages" type="xs:positiveInteger"/>
 </xs:complexType>
 <xs:complexType name="sendobjType">
  <xs:attribute name="objuri" type="xs:anyURI" use="required"/>
  <xs:attribute name="startpage" type="xs:positiveInteger"/>
  <xs:attribute name="pagecount" type="xs:positiveInteger"/>
 </xs:complexType>
 <xs:simpleType name="faxid.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="[0-9+*- ]{20}"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="faxspeed.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="2400"/>
   <xs:enumeration value="4800"/>
   <xs:enumeration value="7200"/>
   <xs:enumeration value="9600"/>
   <xs:enumeration value="12000"/>
   <xs:enumeration value="14400"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="hdrfooter.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="header"/>
   <xs:enumeration value="footer"/>
   <xs:enumeration value="autohdr"/>
   <xs:enumeration value="nohdr"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="hdrfooterstyle.datatype">
  <xs:restriction base="xs:string">
   <xs:enumeration value="append"/>
   <xs:enumeration value="overlay"/>
   <xs:enumeration value="replace"/>
  </xs:restriction>
 </xs:simpleType>
</xs:schema>
        
16.4. MSML Audit Packages
16.4. MSML审核包
16.4.1. msml-audit-core.xsd
16.4.1. msml-audit-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-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>
</xs:schema>
        
<?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-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>
</xs:schema>
        
16.4.2. msml-audit-core-datatypes.xsd
16.4.2. msml-audit-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="audit" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:attribute name="queryid" type="auditQueryId.datatype"
                   use="required"/>
     <xs:attribute name="statelist" type="auditStateList.datatype"
                   use="optional"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="auditresult" substitutionGroup="msmlResultComplex">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlResultComplexType">
    <xs:choice maxOccurs="unbounded">
     <xs:element ref="stateParameter"/>
     <xs:element ref="stateParameterSimple"/>
     </xs:choice>
     <xs:attribute name="targetid" type="independentID.datatype"
                   use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="stateParameter" type="stateParameterType"
             abstract="true"/>
        
<?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="audit" substitutionGroup="msmlRequest">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlRequestType">
     <xs:attribute name="queryid" type="auditQueryId.datatype"
                   use="required"/>
     <xs:attribute name="statelist" type="auditStateList.datatype"
                   use="optional"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="auditresult" substitutionGroup="msmlResultComplex">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="msmlResultComplexType">
    <xs:choice maxOccurs="unbounded">
     <xs:element ref="stateParameter"/>
     <xs:element ref="stateParameterSimple"/>
     </xs:choice>
     <xs:attribute name="targetid" type="independentID.datatype"
                   use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="stateParameter" type="stateParameterType"
             abstract="true"/>
        
 <xs:element name="stateParameterSimple" type="stateParameterSimpleType"
             abstract="true"/>
 <xs:complexType name="stateParameterType"/>
 <xs:simpleType name="stateParameterSimpleType">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:simpleType name="auditQueryId.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="conf:[a-zA-Z0-9.:\-_]+"/>
   <xs:pattern value="conn:[a-zA-Z0-9.:\-_]+"/>
   <xs:pattern value="conf:\*"/>
   <xs:pattern value="conn:\*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="auditStateList.datatype">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
</xs:schema>
        
 <xs:element name="stateParameterSimple" type="stateParameterSimpleType"
             abstract="true"/>
 <xs:complexType name="stateParameterType"/>
 <xs:simpleType name="stateParameterSimpleType">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:simpleType name="auditQueryId.datatype">
  <xs:restriction base="xs:string">
   <xs:pattern value="conf:[a-zA-Z0-9.:\-_]+"/>
   <xs:pattern value="conn:[a-zA-Z0-9.:\-_]+"/>
   <xs:pattern value="conf:\*"/>
   <xs:pattern value="conn:\*"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="auditStateList.datatype">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
</xs:schema>
        
16.4.3. msml-audit-conf.xsd
16.4.3. msml-audit-conf.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-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-dialog-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-stream-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-conf-datatypes.xsd"/>
</xs:schema>
        
<?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-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-dialog-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-stream-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-conf-datatypes.xsd"/>
</xs:schema>
        
16.4.4. msml-audit-conf-datatypes.xsd
16.4.4. msml-audit-conf-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-conf-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>
 <xs:element name="confconfig" substitutionGroup="stateParameter">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="stateParameterType">
     <xs:sequence>
      <xs:element name="audiomix" type="audioMixType" minOccurs="0"
                  maxOccurs="unbounded"/>
        
<?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-conf-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-core-datatypes.xsd"/>
 <xs:element name="confconfig" substitutionGroup="stateParameter">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="stateParameterType">
     <xs:sequence>
      <xs:element name="audiomix" type="audioMixType" minOccurs="0"
                  maxOccurs="unbounded"/>
        
      <xs:element name="videolayout" type="videoLayoutType"
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="controller" type="connID.datatype"
                  minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="deletewhen" use="optional" 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" use="optional"
                   default="true"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
</xs:schema>
        
      <xs:element name="videolayout" type="videoLayoutType"
                  minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="controller" type="connID.datatype"
                  minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="deletewhen" use="optional" 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" use="optional"
                   default="true"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
</xs:schema>
        
16.4.5. msml-audit-conn.xsd
16.4.5. msml-audit-conn.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-audit-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-dialog-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-stream-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-conn-datatypes.xsd"/>
</xs:schema>
        
<?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-audit-core-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-dialog-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-stream-datatypes.xsd"/>
 <xs:include schemaLocation="msml-audit-conn-datatypes.xsd"/>
</xs:schema>
        
16.4.6. msml-audit-conn-datatypes.xsd
16.4.6. msml-audit-conn-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-audit-core-datatypes.xsd"/>
 <xs:element name="sipdialog" substitutionGroup="stateParameter">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="stateParameterType">
     <xs:sequence>
      <xs:element name="localseq" type="xs:integer" minOccurs="0"/>
        
<?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-audit-core-datatypes.xsd"/>
 <xs:element name="sipdialog" substitutionGroup="stateParameter">
  <xs:complexType>
   <xs:complexContent>
    <xs:extension base="stateParameterType">
     <xs:sequence>
      <xs:element name="localseq" type="xs:integer" minOccurs="0"/>
        
      <xs:element name="remoteseq" type="xs:int" minOccurs="0"/>
      <xs:element name="localuri" type="xs:string" minOccurs="0"/>
      <xs:element name="remoteuri" type="xs:string" minOccurs="0"/>
      <xs:element name="remotetarget" type="xs:string" minOccurs="0"/>
      <xs:element name="routeset" type="xs:string" minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="callid" type="xs:string" use="required"/>
     <xs:attribute name="localtag" type="xs:string" use="required"/>
     <xs:attribute name="remotetag" type="xs:string" use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="localsdp" type="stateParameterSimpleType"
             substitutionGroup="stateParameterSimple"/>
 <xs:element name="remotesdp" type="stateParameterSimpleType"
             substitutionGroup="stateParameterSimple"/>
</xs:schema>
        
      <xs:element name="remoteseq" type="xs:int" minOccurs="0"/>
      <xs:element name="localuri" type="xs:string" minOccurs="0"/>
      <xs:element name="remoteuri" type="xs:string" minOccurs="0"/>
      <xs:element name="remotetarget" type="xs:string" minOccurs="0"/>
      <xs:element name="routeset" type="xs:string" minOccurs="0"/>
     </xs:sequence>
     <xs:attribute name="callid" type="xs:string" use="required"/>
     <xs:attribute name="localtag" type="xs:string" use="required"/>
     <xs:attribute name="remotetag" type="xs:string" use="required"/>
    </xs:extension>
   </xs:complexContent>
  </xs:complexType>
 </xs:element>
 <xs:element name="localsdp" type="stateParameterSimpleType"
             substitutionGroup="stateParameterSimple"/>
 <xs:element name="remotesdp" type="stateParameterSimpleType"
             substitutionGroup="stateParameterSimple"/>
</xs:schema>
        
16.4.7. msml-audit-dialog-datatypes.xsd
16.4.7. msml-audit-dialog-datatypes.xsd

Audit Dialog functionality requires use of either the Audit Conf Package or the Audit Conn Package.

审核对话框功能要求使用审核配置包或审核连接包。

   <?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-audit-core-datatypes.xsd"/>
    <xs:element name="dialog" substitutionGroup="stateParameter">
     <xs:complexType>
      <xs:complexContent>
       <xs:extension base="stateParameterType">
        <xs:sequence>
         <xs:element name="duration" type="xs:positiveInteger"
                     minOccurs="0"/>
         <xs:element name="primitive" minOccurs="0">
          <xs:simpleType>
           <xs:restriction base="xs:string">
            <xs:pattern value="play"/>
            <xs:pattern value="dtmf"/>
            <xs:pattern value="collect"/>
            <xs:pattern value="dtmfgen"/>
            <xs:pattern value="tonegen"/>
            <xs:pattern value="record"/>
            <xs:pattern value="none"/>
           </xs:restriction>
          </xs:simpleType>
        
   <?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-audit-core-datatypes.xsd"/>
    <xs:element name="dialog" substitutionGroup="stateParameter">
     <xs:complexType>
      <xs:complexContent>
       <xs:extension base="stateParameterType">
        <xs:sequence>
         <xs:element name="duration" type="xs:positiveInteger"
                     minOccurs="0"/>
         <xs:element name="primitive" minOccurs="0">
          <xs:simpleType>
           <xs:restriction base="xs:string">
            <xs:pattern value="play"/>
            <xs:pattern value="dtmf"/>
            <xs:pattern value="collect"/>
            <xs:pattern value="dtmfgen"/>
            <xs:pattern value="tonegen"/>
            <xs:pattern value="record"/>
            <xs:pattern value="none"/>
           </xs:restriction>
          </xs:simpleType>
        
         </xs:element>
         <xs:element name="controller" type="connID.datatype"
                     minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="name" type="msmlInstanceID.datatype"
                      use="required"/>
        <xs:attribute name="src" type="xs:anyURI" use="optional"/>
        <xs:attribute name="type" type="dialogLanguage.datatype"
                      use="required"/>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
    </xs:element>
   </xs:schema>
        
         </xs:element>
         <xs:element name="controller" type="connID.datatype"
                     minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="name" type="msmlInstanceID.datatype"
                      use="required"/>
        <xs:attribute name="src" type="xs:anyURI" use="optional"/>
        <xs:attribute name="type" type="dialogLanguage.datatype"
                      use="required"/>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
    </xs:element>
   </xs:schema>
        
16.4.8. msml-audit-stream-datatypes.xsd
16.4.8. msml-audit-stream-datatypes.xsd

Audit Stream functionality requires use of either the Audit Conf Package or the Audit Conn Package.

审计流功能要求使用审计配置包或审计连接包。

   <?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-audit-core-datatypes.xsd"/>
    <xs:element name="stream" substitutionGroup="stateParameter">
     <xs:complexType>
      <xs:complexContent>
       <xs:extension base="stateParameterType">
        <xs:all>
         <xs:element name="clamp" minOccurs="0">
          <xs:complexType>
           <xs:attribute name="dtmf" type="boolean.datatype"/>
           <xs:attribute name="tones" type="boolean.datatype"/>
          </xs:complexType>
         </xs:element>
         <xs:element name="gain" minOccurs="0">
          <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">
        
   <?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-audit-core-datatypes.xsd"/>
    <xs:element name="stream" substitutionGroup="stateParameter">
     <xs:complexType>
      <xs:complexContent>
       <xs:extension base="stateParameterType">
        <xs:all>
         <xs:element name="clamp" minOccurs="0">
          <xs:complexType>
           <xs:attribute name="dtmf" type="boolean.datatype"/>
           <xs:attribute name="tones" type="boolean.datatype"/>
          </xs:complexType>
         </xs:element>
         <xs:element name="gain" minOccurs="0">
          <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"/>
             </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="visual" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="joinwith" type="independentID.datatype"
                      use="required"/>
        <xs:attribute name="media" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="audio"/>
           <xs:pattern value="video"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="dir" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="from"/>
           <xs:pattern value="to"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="compressed" type="boolean.datatype"/>
        <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:element>
   </xs:schema>
        
            <xs:simpleType>
             <xs:restriction base="xs:nonPositiveInteger">
              <xs:minInclusive value="-40"/>
              <xs:maxInclusive value="0"/>
             </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="visual" minOccurs="0"/>
        </xs:all>
        <xs:attribute name="joinwith" type="independentID.datatype"
                      use="required"/>
        <xs:attribute name="media" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="audio"/>
           <xs:pattern value="video"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="dir" use="required">
         <xs:simpleType>
          <xs:restriction base="xs:string">
           <xs:pattern value="from"/>
           <xs:pattern value="to"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:attribute>
        <xs:attribute name="compressed" type="boolean.datatype"/>
        <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:element>
   </xs:schema>
        
17. Security Considerations
17. 安全考虑

MSML being an XML-based language, security considerations as defined by RFC 3023 [i2] are applicable.

MSML是一种基于XML的语言,RFC 3023[i2]定义的安全注意事项是适用的。

Media server interfaces driven using MSML are under the explicit control of a SIP application server. SIP call legs are used to deliver XML-based MSML transactions to the media server. The security and integrity of MSML transactions, whenever required, SHOULD use sips: and TLS for encryption and authentication of the SIP control channel used to carry MSML payloads. Further information related to security, privacy, and integrity of MSML media types is described in the IANA Considerations section.

使用MSML驱动的媒体服务器接口受SIP应用服务器的显式控制。SIP呼叫分支用于将基于XML的MSML事务传递到媒体服务器。在需要时,MSML事务的安全性和完整性应使用sips:和TLS对用于承载MSML有效负载的SIP控制通道进行加密和身份验证。有关MSML媒体类型的安全性、隐私性和完整性的更多信息,请参见IANA注意事项部分。

Media streams, such as audio/video, MAY optionally be protected, encrypted/decrypted, and authenticated, utilizing Secure Real Time Protocol (SRTP), wherever media stream security is required. Media negotiation establishes the required level of security and is initiated by the clients, which is outside the scope of the control interface specified by MSML.

在任何需要媒体流安全性的地方,可以选择性地利用安全实时协议(SRTP)对诸如音频/视频的媒体流进行保护、加密/解密和认证。媒体协商建立了所需的安全级别,并由客户端发起,这超出了MSML指定的控制接口的范围。

18. IANA Considerations
18. IANA考虑
18.1. IANA Registrations for 'application' MIME Media Type
18.1. “应用程序”MIME媒体类型的IANA注册

The following registrations have been made:

已进行了以下登记:

Type Name: "application"

类型名称:“应用程序”

Subtype names:

子类型名称:

'application/vnd.radisys.msml+xml',

'application/vnd.radisys.msml+xml',

'application/vnd.radisys.moml+xml',

'application/vnd.radisys.moml+xml',

'application/vnd.radisys.msml-conf+xml',

'application/vnd.radisys.msml conf+xml',

'application/vnd.radisys.msml-dialog+xml',

'application/vnd.radisys.msml dialog+xml',

'application/vnd.radisys.msml-dialog-base+xml',

“application/vnd.radisys.msml dialog base+xml”,

'application/vnd.radisys.msml-dialog-group+xml',

“application/vnd.radisys.msml对话框组+xml”,

'application/vnd.radisys.msml-dialog-speech+xml',

“application/vnd.radisys.msml对话框语音+xml”,

'application/vnd.radisys.msml-dialog-transform+xml',

'application/vnd.radisys.msml dialog transform+xml',

'application/vnd.radisys.msml-dialog-fax-detect+xml',

'应用程序/vnd.radisys.msml对话框传真检测+xml',

'application/vnd.radisys.msml-dialog-fax-sendrecv+xml',

'application/vnd.radisys.msml对话框fax sendrecv+xml',

'application/vnd.radisys.msml-audit+xml',

'application/vnd.radisys.msml audit+xml',

'application/vnd.radisys.msml-audit-conf+xml',

'application/vnd.radisys.msml audit conf+xml',

'application/vnd.radisys.msml-audit-conn+xml',

'application/vnd.radisys.msml audit conn+xml',

'application/vnd.radisys.msml-audit-dialog+xml',

'应用程序/vnd.radisys.msml审核对话框+xml',

'application/vnd.radisys.msml-audit-stream+xml'

'application/vnd.radisys.msml审计流+xml'

Required parameters: none

所需参数:无

Optional parameters: charset

可选参数:字符集

charset semantics as specified in RFC 3023 [i2] for "application/xml" media type.

RFC 3023[i2]中为“application/xml”媒体类型指定的字符集语义。

Encoding considerations:

编码注意事项:

As specified in RFC 3023 [i2].

按照RFC 3023[i2]的规定。

Security Considerations:

安全考虑:

Media types included in this section are XML based, and therefore security considerations as defined by RFC 3023 [i10] are applicable.

本节中包含的媒体类型是基于XML的,因此RFC 3023[i10]定义的安全注意事项是适用的。

These media types do not contain active or executable content as the content itself merely provides control of the underlying media streams.

这些媒体类型不包含活动或可执行内容,因为内容本身仅提供对底层媒体流的控制。

Secure exchange of content associated with these media types for purposes of authentication and privacy, whenever applicable, shall require the establishment of a secure control channel using sips: and TLS.

出于认证和隐私目的,与这些媒体类型相关的内容的安全交换(如适用)应要求使用sips:和TLS建立安全控制通道。

Privacy and integrity of media content associated with these media types shall be considered when applications using these media types are exchanging personal information such as personal identification codes or conference access codes. Whenever such content is deemed to require secure transport and authentication, a secure channel using sips: and TLS MUST be used, as these media types themselves provide no such inherent mechanisms for security.

当使用这些媒体类型的应用程序交换个人信息(如个人识别码或会议访问码)时,应考虑与这些媒体类型相关的媒体内容的隐私性和完整性。当此类内容被认为需要安全传输和认证时,必须使用使用sips:和TLS的安全通道,因为这些媒体类型本身不提供此类固有的安全机制。

Interoperability considerations:

互操作性注意事项:

As specified in RFC 3023 [i2] and as specified within this document.

按照RFC 3023[i2]和本文件的规定。

Published specification: RFC 5707

已发布规范:RFC 5707

Intended applications for these media types:

这些媒体类型的预期应用程序:

Multimedia Conferencing, Interactive Voice Response systems

多媒体会议、交互式语音响应系统

Additional information:

其他信息:

Magic number(s): None

幻数:无

File extension(s): None

文件扩展名:无

Macintosh file type code(s): None

Macintosh文件类型代码:无

Person & email address to contact for further information:

联系人和电子邮件地址,以获取更多信息:

      Adnan Saleem <adnan.saleem@radisys.com>
        
      Adnan Saleem <adnan.saleem@radisys.com>
        

Intended usage: COMMON

预期用途:普通

18.2. IANA Registrations for 'text' MIME Media Type
18.2. “文本”MIME媒体类型的IANA注册

The following registrations are planned:

计划进行以下登记:

'text/vnd.radisys.msml-basic-layout'

“text/vnd.radisys.msml基本布局”

Required parameters: none

所需参数:无

Optional parameters: charset

可选参数:字符集

charset semantics as specified in RFC 3023 [i2] for "text/xml" media type.

RFC 3023[i2]中为“text/xml”媒体类型指定的字符集语义。

Encoding considerations: As specified in RFC 3023 [i2].

编码注意事项:如RFC 3023[i2]所述。

Security Considerations:

安全考虑:

Media types included in this section are XML based, and therefore security considerations as defined by RFC 3023 [i10] are applicable.

本节中包含的媒体类型是基于XML的,因此RFC 3023[i10]定义的安全注意事项是适用的。

The media type defined in this section does not contain active or executable content. The media type defines only a visual layout scheme of a video conference. Establishment of active connections associated with the video conference are outside the scope of this media type.

本节中定义的媒体类型不包含活动或可执行内容。媒体类型仅定义视频会议的视觉布局方案。与视频会议相关的活动连接的建立不在此媒体类型的范围内。

Since this media type only defines a visual layout scheme, with no reference or information about client connections or participants within the conference, privacy and integrity concerns are not applicable to this media type.

由于此媒体类型仅定义视觉布局方案,没有关于会议内客户端连接或参与者的参考或信息,因此隐私和完整性问题不适用于此媒体类型。

Interoperability considerations:

互操作性注意事项:

As specified in RFC 3023 [i2] and as specified within this document.

按照RFC 3023[i2]和本文件的规定。

Published specification: RFC 5707

已发布规范:RFC 5707

Intended applications for these media types:

这些媒体类型的预期应用程序:

Multimedia Conferencing, Interactive Voice Response systems