Please refer to theerratafor this document, which may include normative corrections.
See alsotranslations.
Copyright© 2012W3C® (MIT,ERCIM,Keio),All Rights Reserved. W3Cliability,trademark anddocumentuse rules apply.
This document describes a loosely coupled architecture formultimodal user interfaces, which allows for co-resident anddistributed implementations, and focuses on the role of markup andscripting, and the use of well defined interfaces between itsconstituents.
This section describes the status of this document at thetime of its publication. Other documents may supersede thisdocument. A list of current W3C publications and the latestrevision of this technical report can be found in theW3C technical reports index athttp://www.w3.org/TR/.
This is theRecommendationof "Multimodal Architecture and Interfaces". It has been publishedby theMultimodal InteractionWorking Group, which is part of theMultimodalInteraction Activity.
Comments are welcome atwww-multimodal@w3.org (archive).SeeW3C mailing list and archiveusage guidelines.
This specification has been widely reviewed (see theCandidate Recommendation Disposition of Comments and theLast Call Working Draft Disposition of Comments) and satisfiesthe Working Group's technical requirements. A list ofimplementations is included in theMultimodalArchitecture Implementation Report. There are no substantialchanges to this document since the publication of the14 August2012 Proposed Recommendation.
This document has been reviewed by W3C Members, by softwaredevelopers, and by other W3C groups and interested parties, and isendorsed by the Director as a W3C Recommendation. It is a stabledocument and may be used as reference material or cited fromanother document. W3C's role in making the Recommendation is todraw attention to the specification and to promote its widespreaddeployment. This enhances the functionality and interoperability ofthe Web.
This specification describes an architecture for multimodalinterfaces, along with a protocol for communication between thecomponents that implement such interfaces. It forms part of theproposals forthe W3CMultimodal Interaction Framework.
This document was produced by a group operating under the5February 2004 W3C Patent Policy. W3C maintainsa publiclist of any patent disclosures made in connection with thedeliverables of the group; that page also includes instructions fordisclosing a patent. An individual who has actual knowledge of apatent which the individual believes containsEssential Claim(s) must disclose the information in accordancewithsection 6 of the W3C Patent Policy.
The sections in the main body of this document are normativeunless otherwise specified. The appendices in this document areinformative unless otherwise indicated explicitly.
1ConformanceRequirements
2Summary
3Overview
4Design versus Run-Time considerations
4.1Markup and TheDesign-Time View
4.2SoftwareConstituents and The Run-Time View
4.3Relationship to EMMA
5Overview ofArchitecture
5.1Run-TimeArchitecture Diagram
5.2TheConstituents
5.2.1The Interaction Manager
5.2.2The Data Component
5.2.3The Modality Components
5.2.4The Runtime Framework
5.2.4.1The Event Transport Layer
5.2.4.1.1Event and Information Security
5.2.5System and OS Security
5.2.6Media stream handling
5.2.7Examples
6Interface between the Interaction Managerand the Modality Components
6.1CommonEvent Fields
6.1.1Context
6.1.2Source
6.1.3Target
6.1.4RequestID
6.1.5Status
6.1.6StatusInfo
6.1.7Data
6.2StandardLife Cycle Events
6.2.1NewContextRequest/NewContextResponse
6.2.1.1NewContextRequest Properties
6.2.1.2NewContextResponse Properties
6.2.2PrepareRequest/PrepareResponse
6.2.2.1PrepareRequest Properties
6.2.2.2PrepareResponse Properties
6.2.3StartRequest/StartResponse
6.2.3.1StartRequest Properties
6.2.3.2StartResponse Properties
6.2.4DoneNotification
6.2.4.1DoneNotification Properties
6.2.5CancelRequest/CancelResponse
6.2.5.1CancelRequest Properties
6.2.5.2CancelResponse Properties
6.2.6PauseRequest/PauseResponse
6.2.6.1PauseRequest Properties
6.2.6.2PauseResponse Properties
6.2.7ResumeRequest/ResumeResponse
6.2.7.1ResumeRequest Properties
6.2.7.2ResumeResponse Properties
6.2.8ExtensionNotification
6.2.8.1ExtensionNotification Properties
6.2.9ClearContextRequest/ClearContextResponse
6.2.9.1ClearContextRequest Properties
6.2.9.2ClearContextResponse Properties
6.2.10StatusRequest/StatusResponse
6.2.10.1Status Request Properties
6.2.10.2StatusResponse Properties
AModality ComponentStates
BExamples of Life-Cycle Events
B.1NewContextRequest(from MC to IM)
B.2NewContextResponse(from IM to MC)
B.3PrepareRequest (fromIM to MC, with external markup)
B.4PrepareRequest (fromIM to MC, inline VoiceXML markup)
B.5PrepareResponse(from MC to IM, Success)
B.6PrepareResponse(from MC to IM, Failure)
B.7StartRequest (fromIM to MC)
B.8StartResponse (fromMC to IM)
B.9DoneNotification(from MC to IM, with EMMA result)
B.10DoneNotification(from MC to IM, with EMMA "no-input" result)
B.11CancelRequest (fromIM to MC)
B.12CancelResponse(from MC to IM)
B.13PauseRequest (fromIM to MC)
B.14PauseResponse (fromMC to IM)
B.15ResumeRequest (fromIM to MC)
B.16ResumeResponse(from MC to IM)
B.17ExtensionNotification (formerly the data event,sent in both directions)
B.18ClearContextRequest(from the IM to MC)
B.19ClearContextResponse (from the MC to IM)
B.20StatusRequest (fromthe IM to the MC)
B.21StatusResponse(from the MC to the IM)
CEvent Schemas
C.1mmi.xsd
C.2mmi-datatypes.xsd
C.3mmi-attribs.xsd
C.4mmi-elements.xsd
C.5NewContextRequest.xsd
C.6NewContextResponse.xsd
C.7PrepareRequest.xsd
C.8PrepareResponse.xsd
C.9StartRequest.xsd
C.10StartResponse.xsd
C.11DoneNotification.xsd
C.12CancelRequest.xsd
C.13CancelResponse.xsd
C.14PauseRequest.xsd
C.15PauseResponse.xsd
C.16ResumeRequest.xsd
C.17ResumeResponse.xsd
C.18ExtensionNotification.xsd
C.19ClearContextRequest.xsd
C.20ClearContextResponse.xsd
C.21StatusRequest.xsd
C.22StatusResponse.xsd
DLadder Diagrams for the MMIArchitecture with a Web Browser and VXML Interpreter
D.1Creating aSession
D.2Processing UserInput
D.3Ending aSession
ELocalization andCustomization
FHTTP transport of MMI lifecycleevents
F.1Lifecycle eventtransport from modality components to Interaction Manager
F.2Lifecycle eventtransport from IM to modality components (HTTP clientsonly)
F.3Lifecycle eventtransport from Interaction Manager to modality components (HTTPservers)
F.4Errorhandling
GGlossary
HTypes of Modality Components
H.1Simple modalitycomponents
H.2Complex modalitycomponents
H.3Nested modalitycomponents
INormative References
JInformative References
KAcknowledgements
An implementation is conformant with the MMI Architecture if itconsists of one or more software constituents that are conformantwith the MMI Life-Cycle Event specification.
A constituent is conformant with the MMI Life-Cycle Eventspecification if it supports the Life-Cycle Event interface betweenthe Interaction Manager and the Modality Component defined in6 Interface between the InteractionManager and the Modality Components. To support theLife-Cycle Event interface, a constituent must be able to handleall Life-Cycle events defined in6.2 Standard Life CycleEvents either as an Interaction Manager or as aModality Component or as both.
Transport and format of Life-Cycle Event messages may beimplemented in any manner, as long as their contents conform to thestandard Life-Cycle Event definitions given in6.2 Standard Life CycleEvents. Any implementation that uses XML format torepresent the life-cycle events must comply with the normative MMIXML schemas contained inC EventSchemas.
The key wordsMUST,MUST NOT,
The termsBASE URI and
Any section that is not marked as 'informative' isnormative.
This section is informative.
This document describes a loosely coupled architecture formultimodal user interfaces, which allows for co-resident anddistributed implementations, and focuses on the role of markup andscripting, and the use of well defined interfaces between itsconstituents.
This section is informative.
This document describes the architecture of the MultimodalInteraction (MMI) framework[MMIF] and theinterfaces between its constituents. The MMI Working Group is awarethat multimodal interfaces are an area of active research and thatcommercial implementations are only beginning to emerge. Thereforewe do not view our goal as standardizing a hypothetical existingcommon practice, but rather providing a platform to facilitateinnovation and technical development. Thus the aim of this designis to provide a general and flexible framework providinginteroperability among modality-specific components from differentvendors - for example, speech recognition from one vendor andhandwriting recognition from another. This framework places veryfew restrictions on the individual components, but instead focuseson providing a general means for communication, plus basicinfrastructure for application control and platform services.
Our framework is motivated by several basic design goals:
Even though multimodal interfaces are not yet common, thesoftware industry as a whole has considerable experience witharchitectures that can accomplish these goals. Since the 1980s, forexample, distributed message-based systems have been common. Theyhave been used for a wide range of tasks, including in particularhigh-end telephony systems. In this paradigm, the overall system isdivided up into individual components which communicate by sendingmessages over the network. Since the messages are the only means ofcommunication, the internals of components are hidden and thesystem may be deployed in a variety of topologies, eitherdistributed or co-located. One specific instance of this type ofsystem is the DARPA Hub Architecture, also known as the GalaxyCommunicator Software Infrastructure[Galaxy]. This is a distributed,message-based, hub-and-spoke infrastructure designed forconstructing spoken dialogue systems. It was developed in the late1990's and early 2000's under funding from DARPA. Thisinfrastructure includes a program called the Hub, together withservers which provide functions such as speech recognition, naturallanguage processing, and dialogue management. The serverscommunicate with the Hub and with each other using key-valuestructures called frames.
Another recent architecture that is relevant to our concerns isthe model-view-controller (MVC) paradigm. This is a well knowndesign pattern for user interfaces in object oriented programminglanguages, and has been widely used with languages such as Java,Smalltalk, C, and C++. The design pattern proposes three mainparts:a Data Model that represents the underlying logicalstructure of the data and associated integrity constraints, one ormoreViews which correspond to the objects that the userdirectly interacts with, anda Controller which sitsbetween the data model and the views. The separation between dataand user interface provides considerable flexibility in how thedata is presented and how the user interacts with that data. Whilethe MVC paradigm has been traditionally applied to graphical userinterfaces, it lends itself to the broader context of multimodalinteraction where the user is able to use a combination of visual,aural and tactile modalities.
This section is informative.
In discussing the design of MMI systems, it is important to keepin mind the distinction between the design-time view (i.e., themarkup) and the run-time view (the software that executes themarkup). At the design level, we assume that multimodalapplications will take the form of multiple documents fromdifferent namespaces. In many cases, the different namespaces andmarkup languages will correspond to different modalities, but we donot require this. A single language may cover multiple modalitiesand there may be multiple languages for a single modality.
At runtime, the MMI architecture features loosely coupledsoftware constituents that may be either co-resident on a device ordistributed across a network. In keeping with the loosely-couplednature of the architecture, the constituents do not share contextand communicate only by exchanging events. The nature of theseconstituents and the APIs between them is discussed in more detailin Sections 3-5, below. Though nothing in the MMI architecturerequires that there be any particular correspondence between thedesign-time and run-time views, in many cases there will be aspecific software component responsible for each different markuplanguage (namespace).
At the markup level, an application consists of multipledocuments. A single document may contain markup from differentnamespaces if the interaction of those namespaces has been defined.By the principle of encapsulation, however, the internal structureof documents is invisible at the MMI level, which defines only howthe different documents communicate. One document has a specialstatus, namely the Root or Controller Document, which containsmarkup defining the interaction between the other documents. Suchmarkup is called Interaction Manager markup. The other documentsare called Presentation Documents, since they contain markup tointeract directly with the user. The Controller Document mayconsist solely of Interaction Manager markup (for example a statemachine defined in CCXML[CCXML] or SCXML[SCXML]) or it may contain Interaction Managermarkup combined with presentation or other markup. As an example ofthe latter design, consider a multimodal application in which aCCXML document provides call control functionality as well as theflow control for the various Presentation documents. Similarly, anSCXML flow control document could contain embedded presentationmarkup in addition to its native Interaction Management markup.
These relationships are recursive, so that any PresentationDocument may serve as the Controller Document for another set ofdocuments. This nested structure is similar to 'Russian Doll' modelof Modality Components, described below in4.2 Software Constituents and The Run-TimeView.
The different documents are loosely coupled and co-exist withoutinteracting directly. Note in particular that there are no sharedvariables that could be used to pass information between them.Instead, all runtime communication is handled by events, asdescribed below in6 Interfacebetween the Interaction Manager and the ModalityComponents. Note, however, that this only applies tonon-root documents. The IM, which loads the root document,interacts with "other components". I.e., the IM (having theroot-document) interacts directly through life-cycle events withModality Components (having different documents and/ornamespaces).
Furthermore, it is important to note that the asynchronicity ofthe underlying communication mechanism does not impose therequirement that the markup languages present a purely asynchronousprogramming model to the developer. Given the principle ofencapsulation, markup languages are not required to reflectdirectly the architecture and APIs defined here. As an example,consider an implementation containing a Modality Componentproviding Text-to-Speech (TTS) functionality. This Component mustcommunicate with the Interaction Manager via asynchronous events(see4.2 Software Constituents and TheRun-Time View). In a typical implementation, therewould likely be events to start a TTS play and to report the end ofthe play, etc. However, the markup and scripts that were used toauthor this system might well offer only a synchronous "play TTS"call, it being the job of the underlying implementation to convertthat synchronous call into the appropriate sequence of asynchronousevents. In fact, there is no requirement that the TTS resource beindividually accessible at all. It would be quite possible for themarkup to present only a single "play TTS and do speechrecognition" call, which the underlying implementation wouldrealize as a series of asynchronous events involving multipleComponents.
Existing languages such as HTML may be used as either theController Documents or as Presentation Documents. Further examplesof potential markup components are given in5.2.7 Examples
At the core of the MMI runtime architecture is the distinctionbetween the Interaction Manager (IM) and the Modality Components,which is similar to the distinction between the Controller Documentand the Presentation Documents. The Interaction Manager interpretsthe Controller Document while the individual Modality Componentsare responsible for specific tasks, particularly handling input andoutput in the various modalities, such as speech, pen, video,etc.
The Interaction Manager receives all the events that the variousModality Components generate. Those events may be commands orreplies to commands, and it is up to the Interaction Manager todecide what to do with them, i.e., what events to generate inresponse to them. In general, the MMI architecture follows a'targetless' event model. That is, the Component that raises anevent does not specify its destination. Rather, it passes it up tothe Runtime Framework, which will pass it to the InteractionManager. The IM, in turn, decides whether to forward the event toother Components, or to generate a different event, etc.
Modality Components are black boxes, required only to implementthe Modality Component Interface API which is described below. ThisAPI allows the Modality Components to communicate with the IM andthus indirectly with each other, since the IM is responsible fordelivering events/messages among the Components. Since theinternals of a Component are hidden, it is possible for anInteraction Manager and a set of Components to present themselvesas a Component to a higher-level Interaction Manager. All that isrequired is that the IM implement the Component API. The result isa "Russian Doll" model in which Components may be nested insideother Components to an arbitrary depth. Nesting components in thismanner is one way to produce a 'complex' Modality Component, namelyone that handles multiple modalities simultaneously. However, it isalso possible to produce complex Modality Components withoutnesting, as discussed in5.2.3 The ModalityComponents.
In addition to the Interaction Manager and the modalitycomponents, there is a Runtime Framework that providesinfrastructure support, in particular a transport layer whichdelivers events among the components.
Because we are using the term 'Component' to refer to a specificset of entities in our architecture, we will use the term'Constituent' as a cover term for all the elements in ourarchitecture which might normally be called 'softwarecomponents'.
The Extended Multimodal Annotation Language[EMMA], is a set of specifications for multimodalsystems, and provides details of an XML markup language forcontaining and annotating the interpretation of user input. Forexample, a user of a multimodal application might use both speechto express a command, and keystroke gesture to select or drawcommand parameters. The Speech Recognition Modality would expressthe user command using EMMA to indicate the input source (speech).The Pen Gesture Modality would express the command parameters usingEMMA to indicate the input source (pen gestures). Both modalitiesmay include timing information in the EMMA notation. Using thetiming information, a fusion module combines the speech and pengesture information into a single EMMA notation representing boththe command and its parameters. The use of EMMA enables theseparation of recognition process from the information fusionprocess, and thus enables reusable recognition modalities andgeneral purpose information fusion algorithms.
Here is a list of the Constituents of the MMI architecture. Theyare discussed in more detail below.
All life-cycle events that the Modality Components generate
Due to the Russian Doll model, Modality Components
If the Interaction Manager does not contain an explicit handlerfor an event, itMUST respect any default behavior that hasbeen established for the event. If there is no default behavior,the Interaction ManagerMUST ignore the event. (In effect, theInteraction Manager's default handler for all events is to ignorethem.)
The following paragraph is informative.
Normally there will be specific markup associated with the IMinstructing it how to respond to events. This markup will thuscontain a lot of the most basic interaction logic of anapplication. Existing languages such as SMIL, CCXML, SCXML, orECMAScript can be used for IM markup as an alternative to definingspecial-purpose languages aimed specifically at multimodalapplications. The IM fulfills multiple functions. For example, itis responsible for synchronization of data and focus, etc., acrossdifferent Modality Components as well as the higher-levelapplication flow that is independent of Modality Components. Italso maintains the high-level application data model and may handlecommunication with external entities and back-end systems.Logically these functions could be separated into separateconstituents and implementations may want to introduce internalstructure to the IM. However, for the purposes of this standard, weleave the various functions rolled up in a single monolithicInteraction Manager component. We note that state machine languagessuch as SCXML are a good choice for authoring such a multi-functioncomponent, since state machines can be composed. Thus it ispossible to define a high-level state machine representing theoverall application flow, with lower-level state machines nestedinside it handling the the cross-modality synchronization at eachphase of the higher-level flow.
This section is informative.
The Data Component is responsible for storing application-leveldata. The Interaction Manager is a client of the Data Component andis able to access and update it as part of its control flow logic,but Modality Components do not have direct access to it. SinceModality Components are black boxes, they may have their owninternal Data Components and may interact directly with backendservers. However, the only way that Modality Components can sharedata among themselves and maintain consistency is via theInteraction Manager. It is therefore a good application designpractice to divide data into two logical classes: private data,which is of interest only to a given modality component, and publicdata, which is of interest to the Interaction Manager or to morethan one Modality Component. Private data may be managed as theModality Component sees fit, but all modification of public data,including submission to back end servers, should be entrusted tothe Interaction Manager.
This specification does not define an interface between the DataComponent and the Interaction Manager. This amounts to treating theData Component as part of the Interaction Manager. (Note that thismeans that the data access language will be whatever one the IMprovides.) The Data Component is shown with a dotted outline in thediagram above, however, because it is logically distinct and couldbe placed in a separate component.
This section is informative.
Modality Components, as their name would indicate, areresponsible for controlling the various input and output modalitieson the device. They are therefore responsible for handling allinteraction with the user(s). Their only responsibility is toimplement the interface defined in6Interface between the Interaction Manager and the ModalityComponents. Any further definition of theirresponsibilities will be highly domain- and application-specific.In particular we do not define a set of standard modalities or theevents that they should generate or handle. Platform providers areallowed to define new Modality Components and are allowed to placeinto a single Component functionality that might logically seem tobelong to two or more different modalities. Thus a platform couldprovide a handwriting-and-speech Modality Component that wouldaccept simultaneous voice and pen input. Such combined Componentspermit a much tighter coupling between the two modalities than theloose interface defined here. Furthermore, modality components maybe used to perform general processing functions not directlyassociated with any specific interface modality, for example,dialog flow control or natural language processing.
In most cases, there will be specific markup in the applicationcorresponding to a given modality, specifying how the interactionwith the user should be carried out. However, we do not requirethis and specifically allow for a markup-free modality componentwhose behavior is hard-coded into its software.
The Runtime Framework is a cover term for all the infrastructureservices that are necessary for successful execution of amultimodal application. This includes starting the components,handling communication, and logging, etc. For the most part, thisversion of the specification leaves these functions to be definedin a platform-specific way, but we do specifically define aTransport Layer which handles communications between thecomponents.
The Event Transport Layer is responsible for delivering eventsamong the IM and the Modality Components. Clearly, there aremultiple transport mechanisms (protocols) that can be used toimplement a Transport Layer and different mechanisms may be used tocommunicate with different modality components. Thus the EventTransport Layer consists of one or more transport mechanismslinking the IM to the various Modality Components.
We place the following requirements on all transportmechanisms:
For a sample definition of a Transport Layer relying on HTTP,seeF HTTP transport of MMIlifecycle events. This definition is provided as anexample only.
This section is informative.
Events will often carry sensitive information, such as bankaccount numbers or health care information. In addition events mustalso be reliable to both sides of transaction: for example, if anevent carries an assent to a financial transaction, both sides ofthe transaction must be able to rely on that assent.
We do not currently specify delivery mechanisms or internalsecurity safeguards to be used by the Modality Components and theInteraction Manager. However, we believe that any secure systemwill have to meet the following requirements at a minimum:
The following two optional requirements can be met by using theW3C's XML-Signature Syntax and Processing specification[XMLSig].
The remaining optional requirements for event delivery andinformation security can be met by following otherindustry-standard procedures.
Multiple protocols may be necessary to implement theserequirements. For example, TCP/IP and HTTP provide reliable eventdelivery, but additional protocols such as TLS or HTTPS could berequired to meet security requirements.
This section is informative.
This architecture does not and will not specify the internalsecurity requirements of a Modality Component or RuntimeFramework.
Media streams do not typically flow through the InteractionManager. This specification does not specify how media connectionsare established, as the main focus of this specification is theflow of control data. However, all control data logically sentbetween modality componentsMUST flow through the Interaction Manager.
This section is informative.
For the sake of concreteness, here are some examples ofcomponents that could be implemented using existing languages. Notethat we are mixing the design-time and run-time views here, sinceit is the implementation of the language (the browser) that servesas the run-time component.
The most important interface in this architecture is the onebetween the Modality Components and the Interaction Manager.Modality Components communicate with the IM via asynchronousevents. ConstituentsMUST be able to send events and to handleevents that are delivered to them asynchronously. It is notrequired that Constituents use these events internally since theimplementation of a given Constituent is black box to the rest ofthe system. In general, it is expected that Constituents will sendevents both automatically (i.e., as part of their implementation)and under mark-up control.
The majority of the events defined here come in request/responsepairs. That is, one party (either the IM or an MC) sends a requestand the other returns a response. (The exceptions are theExtensionNotification, StatusRequest and StatusResponse events,which can be sent by either party.) In each case it is specifiedwhich party sends the request and which party returns the response.If the wrong party sends a request or response, or if the requestor response is sent under the wrong conditions (e.g. responsewithout a previous request) the behavior of the receiving party isundefined. In the descriptions below, we say that the originatingparty"MAY" send the request, because it is up tothe internal logic of the originating party to decide if it wantsto invoke the behavior that the request would trigger. On the otherhand, we say that the receiving party
The concept of 'context' is basic to these events describedbelow. A context represents a single extended interaction with zeroor more users across one or more modality components. In a simpleunimodal case, a context can be as simple as a phone call or SSLsession. Multimodal cases are more complex, however, since thevarious modalities may not be all used at the same time. Forexample, in a voice-plus-web interaction, e.g., web sharing with anassociated VoIP call, it would be possible to terminate the websharing and continue the voice call, or to drop the voice call andcontinue via web chat. In these cases, a single context persistsacross various modality configurations. In general, the 'context'SHOULDcover the longest period of interaction over which it would makesense for components to store information.
For examples of the concrete XML syntax for all these events,seeB Examples of Life-CycleEvents
The following common fields are shared by multiple life-cycleevents:
A URI thatMUST be unique for the lifetime of the system.It is used to identify this interaction. All events relating to agiven interactionMUST use the same context URI. Eventscontaining a different context URI
A URI representing the address of the sender of the event. Therecipient of the eventMUST be able to send an event back to thesender by using this value as the 'target' of a message.
A unique identifier for a Request/Response pair. Most life-cycleevents come in Request/Response pairs that share a commonRequestID. For any such pair, the RequestID in the Response eventMUST matchthe RequestID in the request event. The RequestID for such a pairMUST beunique within the given context.
An enumeration of 'Success' and 'Failure'. The Response event ofa Request/Response pairMUST use this field to report whether itsucceeded in carrying out the request.
The Multimodal Architecture defines the following basiclife-cycle events which the Interaction Manager and ModalityComponentsMUST support. These events allow theInteraction Manager to invoke modality components and receiveresults from them. They thus form the basic interface between theIM and the Modality components. Note that the ExtensionNotificationevent offers extensibility since it contains arbitrary content andcan be raised by either the IM or the Modality Components at anytime once the context has been established. For example, anapplication relying on speech recognition could use the 'Extension'event to communicate recognition results or the fact that speechhad started, etc.
In the definitions below, all fields are mandatory, unlessexplicitly stated to be optional.
A Modality ComponentMAY send a NewContextRequest to the IM torequest that a new context be created. If this event is sent, theIMMUSTrespond with the NewContextResponse event. The NewContextResponseeventMUSTONLY be sent in response to the NewContextRequest event. Notethat the IMMAY create a new context without a previousNewContextRequest by sending a PrepareRequest or StartRequestcontaining a new context ID to the Modality Components. Furthermorethe IM may respond with the same context in response toNewContextRequests from different (multiple) Modality Components,since the interaction can be started by different ModalityComponents independently.
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the NewContextRequest event.Status
See6.1.5Status. If IM has accepted the NewContextRequest, itMUST setthis field to Success andMUST include a new context identifier.Context
See6.1.1Context. A newly created context identifier. ThisfieldMUSTbe empty if status is Failure.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The IMMAY send a PrepareRequest to allow theModality Components to pre-load markup and prepare to run. ModalityComponents are not required to take any particular action inresponse to this event, but they
The Interaction ManagerMAY send multiple PrepareRequest events to aModality Component for the same Context before sending aStartRequest. Each requestMAY reference a different ContentURL orcontain different in-line Content. When it receives multiplePrepareRequests, the Modality Component
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. Note that the IMMAY use the same contextvalue in multiple PrepareRequest events when it wishes to executemultiple instances of markup in the same context.ContentURL
Optional URL of the content that theModality ComponentSHOULD prepare to execute.Content
Optional Inline markup that the ModalityComponentSHOULD prepare to execute.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The IMMUST NOT specify both the ContentURL andContent in a single PrepareRequest. The IMcontentURL
andcontent
empty. In such acase, the Modality ComponentMUST revert to its default behavior. Forexample, this behavior could consist of returning an error event orof running a preconfigured or hard-coded script.
RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the PrepareRequest event.Context
See6.1.1Context. ThisMUST match the value in the PrepareRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.To invoke a modality component, the IM
If a Modality Component receives a new StartRequest while it isexecuting a previous one, itMUST either cease execution of the previousStartRequest and begin executing the content specified in the mostrecent StartRequest, or reject the new StartRequest, returning aStartResponse with status equal to 'Failure'.
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. Note that the IMMAY use the same contextvalue in multiple StartRequest events when it wishes to executemultiple instances of markup in the same context.ContentURL
Optional URL of the content that theModality ComponentMUST attempt to execute.Content
Optional Inline markup that the ModalityComponentMUST attempt to execute.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The IMMUST NOT specify both the ContentURL andContent in a single StartRequest. The IM
RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the StartRequest event.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.If the Modality Component reaches the end of its processing, itMUSTreturn a DoneNotification to the IM that issued theStartRequest.
RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID of the StartRequest event.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The DoneNotification event is intended to indicate thecompletion of the processing that has been initiated by theInteraction Manager with a StartRequest. As an example a voicemodality component might use the DoneNotification event to indicatethe completion of a recognition task. In this case theDoneNotification event might carry the recognition result expressedusing EMMA. However, there may be tasks which do not have aspecific end. For example the Interaction Manager might send aStartRequest to a graphical modality component requesting it todisplay certain information. Such a task does not necessarily havea specific end and thus the graphical modality component mightnever send a DoneNotification event to the Interaction Manager.Thus the graphical modality component would display the screenuntil it received another StartRequest (or some other lifecycleevent) from the Interaction Manager.
The IMMAY send a CancelRequest to stop processing inthe Modality Component. In this case, the Modality Component
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the CancelRequest event.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The IMMAY send a PauseRequest to suspend processingby the Modality Component. Modality Components
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the PauseRequest event.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The IMMAY send the ResumeRequest to resumeprocessing that was paused by a previous PauseRequest. The IM
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the ResumeRequest event.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.This eventMAY be generated by the IM and
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Name
The name of the application-specificevent.Context
See6.1.1Context.MUST match the value in the StartRequestevent.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The IMMAY send a ClearContextRequest to indicatethat the specified context is no longer active and that anyresources associated with it may be freed. Modality Components arenot required to take any particular action in response to thiscommand, butMUST return a ClearContextResponse. Once theIM has sent a ClearContextRequest to a Modality Component, it
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the ClearContextRequest event.Context
See6.1.1Context. ThisMUST match the value in the StartRequestevent.Status
See6.1.5Status.StatusInfo
Optional. See6.1.6 StatusInfo.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.The StatusRequest message and the corresponding StatusResponseare intended to provide keep-alive functionality. Either the IM orthe Modality ComponentMAY send the StatusRequest message. TherecipientMUST respond with the StatusResponse message,unless the request specifies a context which is unknown to it, inwhich case the behavior is undefined.
RequestID
. See6.1.4 RequestID. Anewly generated identifier used to identify this request.Context
See6.1.1Context. Optional specification of the context forwhich the status is requested. If it is present, the recipient MUSTrespond with a StatusResponse message indicating the status of thespecified context. If it is not present, the recipient MUST send aStatusResponse message indicating the status of the underlyingserver, namely the software that would host a new context if onewere created.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.RequestID
. See6.1.4 RequestID. ThisMUST matchthe RequestID in the StatusRequest event.Context
See6.1.1Context. An optional specification of the context forwhich the status is being returned. If it is present, the responseMUST represent the status of the specified context. If it is notpresent, the response MUST represent the status of the underlyingserver.Status
An enumeration of 'Alive' or 'Dead'. Themeaning of these values depends on whether the 'context' parameteris present. If it is, and the specified context is still active andcapable of handling new life cycle events, the sender MUST set thisfield to 'Alive'. If the 'context' parameter is present and thecontext has terminated or is otherwise unable to process new lifecycle events, the sender MUST set the status to 'Dead'. If the'context' parameter is not provided, the status refers to theunderlying server. If the sender is able to create new contexts, itMUST set the status to 'Alive', otherwise, it MUST set it to'Dead'.Source
See6.1.2Source.Target
See6.1.3Target.Data
Optional. See6.1.7 Data.Within an established context, a Modality Component can beviewed as functioning in one of three states: Idle, Running orPaused. Lifecycle events received from the Interaction Managerimply specific actions and transitions between states. The tablebelow shows possible MC actions, state transitions and responsecontents for each Request event the IM may send to a MC in aparticular state.
AFailure: ErrorMessage annotation indicates that thespecified Request event is either invalid or redundant in thespecified state. In this case, the Modality Component responds bysending a matching Response event with Status=Failure andStatusInfo=ErrorMessage. In all other cases, the Modality performsthe requested action, possibly transitioning to another state asindicated.
Note that this diagram shows only those transitions that the MCtakes in response to requests from the IM. The MC may take othertransitions on its own. In particular, it may reach the end of itsprocessing and send a DoneNotification to the IM. In that case, theIM may consider it to have returned to the Idle state, but this isnot shown in the diagram below.
event / state | Idle | Running | Paused |
---|---|---|---|
PrepareRequest | preload or update content | preload or update content | preload or update content |
StartRequest | Transition: Running use new content if provided, otherwise use last availablecontent | stop processing current content, restart as inIdle | Transition: Running stop processing current content, restart as in Idle |
Failure: NoContent if MC requires content to run andnone has been provided | |||
CancelRequest | Failure: NotRunning | Transition: Idle | Transition: Idle |
PauseRequest | Failure: NotRunning | Transition: Paused | Failure: AlreadyPaused |
Failure: CantPause if MC is unable to pause | |||
ResumeRequest | Failure: NotPaused | Failure: AlreadyRunning | Transition: Running |
StatusRequest | send status | send status | send status |
ClearContextRequest | close session | close session | close session |
Here is a state chart representation of these transitions:
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:NewContextRequest mmi:Source="someURI" mmi:Target="someOtherURI" mmi:RequestID="request-1"> </mmi:NewContextRequest></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:NewContextResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:RequestID="request-1" mmi:Status="success" mmi:Context="URI-1"> </mmi:NewContextResponse></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:PrepareRequest mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="URI-1" mmi:RequestID="request-1"> <mmi:ContentURL mmi:href="someContentURI" mmi:max-age="" mmi:fetchtimeout="1s"/> </mmi:PrepareRequest></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0" xmlns:vxml="http://www.w3.org/2001/vxml"> <mmi:PrepareRequest mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="URI-1" mmi:RequestID="request-1" > <mmi:content> <vxml:vxml version="2.0"> <vxml:form> <vxml:block>Hello World!</vxml:block> </vxml:form> </vxml:vxml> </mmi:content> </mmi:PrepareRequest></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:PrepareResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1" mmi:Status="success"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:PrepareResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1" mmi:Status="failure"> <mmi:statusInfo> NotAuthorized </mmi:statusInfo> </mmi:PrepareResponse></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:StartRequest mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="URI-1" mmi:RequestID="request-1"> <mmi:ContentURL mmi:href="someContentURI" mmi:max-age="" mmi:fetchtimeout="1s"/> </mmi:StartRequest></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:StartResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1" mmi:Status="failure"> <mmi:statusInfo> NotAuthorized </mmi:statusInfo> </mmi:StartResponse></mmi:mmi>
This requestID corresponds to the requestID of the"StartRequest" event that started it.
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0" xmlns:emma="http://www.w3.org/2003/04/emma"> <mmi:DoneNotification mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:Status="success" mmi:RequestID="request-1" mmi:Confidential="true"> <mmi:Data> <emma:emma version="1.0"> <emma:interpretation emma:medium="acoustic" emma:confidence=".75" emma:mode="voice" emma:tokens="flights from boston to denver"> <origin>Boston</origin> <destination>Denver</destination> </emma:interpretation> </emma:emma> </mmi:Data> </mmi:DoneNotification></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0" xmlns:emma="http://www.w3.org/2003/04/emma"> <mmi:DoneNotification mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:Status="success" mmi:RequestID="request-1" > <mmi:Data> <emma:emma version="1.0"> <emma:interpretation emma:no-input="true"/> </emma:emma> </mmi:Data> </mmi:DoneNotification></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:CancelRequest mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:CancelResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1" mmi:Status="success"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:PauseRequest mmi:Context="someURI" mmi:Source="someURI" mmi:Target="someOtherURI" mmi:RequestID="request-1"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:PauseResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1" mmi:Status="success"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:ResumeRequest mmi:Context="someURI" mmi:Source="someURI" mmi:Target="someOtherURI" mmi:RequestID="request-1"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:ResumeResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1" mmi:Status="success"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:ExtensionNotification mmi:Name="appEvent" mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-1"> </mmi:ExtensionNotification></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:ClearContextRequest mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-2"/></mmi:mmi>
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:ClearContextResponse mmi:Source="someURI" mmi:Target="someOtherURI" mmi:Context="someURI" mmi:RequestID="request-2" mmi:Status="success"/></mmi:mmi>
This specification does not require any particular transportformat for life cycle events, however in the case where XML isused, the following schemas are normative.
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> Schema definition for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="NewContextRequest.xsd"/> <xs:include schemaLocation="NewContextResponse.xsd"/> <xs:include schemaLocation="ClearContextRequest.xsd"/> <xs:include schemaLocation="ClearContextResponse.xsd"/> <xs:include schemaLocation="CancelRequest.xsd"/> <xs:include schemaLocation="CancelResponse.xsd"/> <xs:include schemaLocation="DoneNotification.xsd"/> <xs:include schemaLocation="ExtensionNotification.xsd"/> <xs:include schemaLocation="PauseRequest.xsd"/> <xs:include schemaLocation="PauseResponse.xsd"/> <xs:include schemaLocation="PrepareRequest.xsd"/> <xs:include schemaLocation="PrepareResponse.xsd"/> <xs:include schemaLocation="ResumeRequest.xsd"/> <xs:include schemaLocation="ResumeResponse.xsd"/> <xs:include schemaLocation="StartRequest.xsd"/> <xs:include schemaLocation="StartResponse.xsd"/> <xs:include schemaLocation="StatusRequest.xsd"/> <xs:include schemaLocation="StatusResponse.xsd"/> <xs:element name="mmi"> <xs:complexType> <xs:choice> <xs:sequence> <xs:element ref="mmi:NewContextRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:NewContextResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:ClearContextRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:ClearContextResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:CancelRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:CancelResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:DoneNotification"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:ExtensionNotification"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:PauseRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:PauseResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:PrepareRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:PrepareResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:ResumeRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:ResumeResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:StartRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:StartResponse"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:StatusRequest"/> </xs:sequence> <xs:sequence> <xs:element ref="mmi:StatusResponse"/> </xs:sequence> </xs:choice> <xs:attribute form="unqualified" name="version" type="xs:decimal" use="required"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> general Type definition schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:simpleType name="targetType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="requestIDType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="contextType"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:simpleType name="statusType"> <xs:restriction base="xs:string"> <xs:enumeration value="success"/> <xs:enumeration value="failure"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="statusResponseType"> <xs:restriction base="xs:string"> <xs:enumeration value="alive"/> <xs:enumeration value="dead"/> </xs:restriction> </xs:simpleType> <xs:complexType name="contentURLType"> <xs:attribute name="href" type="xs:anyURI" use="required"/> <xs:attribute name="max-age" type="xs:string" use="optional"/> <xs:attribute name="fetchtimeout" type="xs:string" use="optional"/> </xs:complexType> <xs:complexType name="contentType"> <xs:sequence> <xs:any maxOccurs="unbounded" namespace="http://www.w3.org/2001/vxml" processContents="skip"/> </xs:sequence> </xs:complexType> <xs:complexType name="emmaType"> <xs:sequence> <xs:any maxOccurs="unbounded" namespace="http://www.w3.org/2003/04/emma" processContents="skip"/> </xs:sequence> </xs:complexType> <xs:complexType mixed="true" name="anyComplexType"> <xs:complexContent mixed="true"> <xs:restriction base="xs:anyType"> <xs:sequence> <xs:any maxOccurs="unbounded" minOccurs="0" processContents="skip"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> general Type definition schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:attributeGroup name="source.attrib"> <xs:attribute name="Source" type="xs:string" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="target.attrib"> <xs:attribute name="Target" type="mmi:targetType" use="optional"/> </xs:attributeGroup> <xs:attributeGroup name="requestID.attrib"> <xs:attribute name="RequestID" type="mmi:requestIDType" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="context.attrib"> <xs:attribute name="Context" type="mmi:contextType" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="confidential.attrib"> <xs:attribute name="Confidential" type="xs:boolean" use="optional"/> </xs:attributeGroup> <xs:attributeGroup name="context.optional.attrib"> <xs:attribute name="Context" type="mmi:contextType" use="optional"/> </xs:attributeGroup> <xs:attributeGroup name="status.attrib"> <xs:attribute name="Status" type="mmi:statusType" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="statusResponse.attrib"> <xs:attribute name="Status" type="mmi:statusResponseType" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="extension.name.attrib"> <xs:attribute name="Name" type="xs:string" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="requestAutomaticUpdate.attrib"> <xs:attribute name="RequestAutomaticUpdate" type="xs:boolean" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="automaticUpdate.attrib"> <xs:attribute name="AutomaticUpdate" type="xs:boolean" use="required"/> </xs:attributeGroup> <xs:attributeGroup name="group.allEvents.attrib"> <xs:attributeGroup ref="mmi:source.attrib"/> <xs:attributeGroup ref="mmi:target.attrib"/> <xs:attributeGroup ref="mmi:requestID.attrib"/> <xs:attributeGroup ref="mmi:context.attrib"/> <xs:attributeGroup ref="mmi:confidential.attrib"/> </xs:attributeGroup> <xs:attributeGroup name="group.allResponseEvents.attrib"> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> <xs:attributeGroup ref="mmi:status.attrib"/> </xs:attributeGroup></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> general elements definition schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <!-- ELEMENTS --> <xs:element name="statusInfo" type="mmi:anyComplexType"/></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> NewContextRequest schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="NewContextRequest"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="data" type="mmi:anyComplexType"/> </xs:sequence> <xs:attributeGroup ref="mmi:source.attrib"/> <xs:attributeGroup ref="mmi:target.attrib"/> <xs:attributeGroup ref="mmi:requestID.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> NewContextResponse schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="NewContextResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" ref="mmi:statusInfo"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> PrepareRequest schema for MMI Life cycle events version 1.0. The optional PrepareRequest event is an event that the Runtime Framework may send to allow the Modality Components to pre-load markup and prepare to run (e.g. in case of VXML VUI-MC). Modality Components are not required to take any particular action in response to this event, but they must return a PrepareResponse event. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="PrepareRequest"> <xs:complexType> <xs:choice> <xs:sequence> <xs:element name="ContentURL" type="mmi:contentURLType"/> </xs:sequence> <xs:sequence> <xs:element name="Content" type="mmi:anyComplexType"/> </xs:sequence> <xs:sequence> <xs:element minOccurs="0" name="Data" type="mmi:anyComplexType"/> </xs:sequence> </xs:choice> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> PrepareResponse schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="PrepareResponse"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="data" type="mmi:anyComplexType"/> <xs:element minOccurs="0" ref="mmi:statusInfo"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> StartRequest schema for MMI Life cycle events version 1.0. The Runtime Framework sends the event StartRequest to invoke a Modality Component (to start loading a new GUI resource or to start the ASR or TTS). The Modality Component must return a StartResponse event in response. If the Runtime Framework has sent a previous PrepareRequest event, it may leave the contentURL and content fields empty, and the Modality Component will use the values from the PrepareRequest event. If the Runtime Framework includes new values for these fields, the values in the StartRequest event override those in the PrepareRequest event. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="StartRequest"> <xs:complexType> <xs:choice> <xs:sequence> <xs:element name="ContentURL" type="mmi:contentURLType"/> <xs:element minOccurs="0" name="data" type="mmi:anyComplexType"/> </xs:sequence> <xs:sequence> <xs:element name="Content" type="mmi:anyComplexType"/> <xs:element minOccurs="0" name="data" type="mmi:anyComplexType"/> </xs:sequence> </xs:choice> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> StartResponse schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="StartResponse"> <xs:complexType> <xs:sequence> <xs:element name="Data" minOccurs="0" type="mmi:anyComplexType"/> <xs:element ref="mmi:statusInfo" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> DoneNotification schema for MMI Life cycle events version 1.0. The DoneNotification event is intended to be used by the Modality Component to indicate that it has reached the end of its processing. For the VUI-MC it can be used to return the ASR recognition result (or the status info: noinput/nomatch) and TTS/Player done notification. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="DoneNotification"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="data" type="mmi:anyComplexType"/> <xs:element minOccurs="0" ref="mmi:statusInfo"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> CancelRequest schema for MMI Life cycle events version 1.0. The CancelRequest event is sent by the Runtime Framework to stop processing in the Modality Component (e.g. to cancel ASR or TTS/Playing). The Modality Component must return with a CancelResponse message. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="CancelRequest"> <xs:complexType> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> <!-- no elements --> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> CancelResponse schema for MMI Life cycle events version 1.0. The CancelRequest event is sent by the Runtime Framework to stop processing in the Modality Component (e.g. to cancel ASR or TTS/Playing). The Modality Component must return with a CancelResponse message. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="CancelResponse"> <xs:complexType> <xs:sequence> <xs:element ref="mmi:statusInfo" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> PauseRequest schema for MMI Life cycle events version 1.0. The PauseRequest event is sent by the Runtime Framework to pause processing of a Modality Component (e.g. to cancel ASR or TTS/Playing). The Modality Component must return with a PauseResponse message. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="PauseRequest"> <xs:complexType> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> <!-- no elements --> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> PauseResponse schema for MMI Life cycle events version 1.0. The PauseRequest event is sent by the Runtime Framework to pause the processing of the Modality Component (e.g. to cancel ASR or TTS/Playing). The Modality Component must return with a PauseResponse message. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="PauseResponse"> <xs:complexType> <xs:sequence> <xs:element ref="mmi:statusInfo" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> ResumeRequest schema for MMI Life cycle events version 1.0. The ResumeRequest event is sent by the Runtime Framework to resume a previously suspended processing task of a Modality Component. The Modality Component must return with a ResumeResponse message. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="ResumeRequest"> <xs:complexType> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> <!-- no elements --> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> ResumeRequest schema for MMI Life cycle events version 1.0. The ResumeRequest event is sent by the Runtime Framework to resume a previously suspended processing task of a Modality Component. The Modality Component must return with a ResumeResponse message. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="ResumeResponse"> <xs:complexType> <xs:sequence> <xs:element ref="mmi:statusInfo" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> ExtensionNotification schema for MMI Life cycle events version 1.0. The ExtensionNotification event may be generated by either the Runtime Framework or the Modality Component and is used to communicate (presumably changed) data values to the other component. E.g. the VUI-MC has signaled a recognition result for any field displayed on the GUI, the event will be used by the Runtime Framework to send a command to the GUI-MC to update the GUI with the recognized value. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="ExtensionNotification"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="data" type="mmi:anyComplexType"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> <xs:attributeGroup ref="mmi:extension.name.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/2008/04/mmi-arch"> <xs:annotation> <xs:documentation xml:lang="en"> ClearContextRequest schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="ClearContextRequest"> <xs:complexType> <xs:attributeGroup ref="mmi:group.allEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> ClearContextResponse schema for MMI Life cycle events version 1.0 </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="clearContextResponse"> <xs:complexType> <xs:sequence> <xs:element ref="mmi:statusInfo" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="mmi:group.allResponseEvents.attrib"/> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> StatusRequest schema for MMI Life cycle events version 1.0. The StatusRequest message and the corresponding StatusResponse are intended to provide keep-alive functionality, informing the Runtime Framework about the presence of the various modality components. Note that both messages are not tied to any context and may thus be sent independent of any user interaction. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:element name="StatusRequest"> <xs:complexType> <xs:attributeGroup ref="mmi:context.optional.attrib"/> <xs:attributeGroup ref="mmi:source.attrib"/> <xs:attributeGroup ref="mmi:target.attrib"/> <xs:attributeGroup ref="mmi:requestID.attrib"/> <xs:attributeGroup ref="mmi:requestAutomaticUpdate.attrib"/> <!-- no elements --> </xs:complexType> </xs:element></xs:schema>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/2008/04/mmi-arch" attributeFormDefault="qualified" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="en"> StatusResponse schema for MMI Life cycle events version 1.0. The StatusRequest message and the corresponding StatusResponse are intended to provide keep-alive functionality, informing the Runtime Framework about the presence of the various modality components. Note that both messages are not tied to any context and may thus be sent independent of any user interaction. </xs:documentation> </xs:annotation> <xs:include schemaLocation="mmi-datatypes.xsd"/> <xs:include schemaLocation="mmi-attribs.xsd"/> <xs:include schemaLocation="mmi-elements.xsd"/> <xs:element name="StatusResponse"> <xs:complexType> <xs:sequence> <xs:element ref="mmi:statusInfo" minOccurs="0"/> </xs:sequence> <xs:attributeGroup ref="mmi:context.optional.attrib"/> <xs:attributeGroup ref="mmi:source.attrib"/> <xs:attributeGroup ref="mmi:target.attrib"/> <xs:attributeGroup ref="mmi:requestID.attrib"/> <xs:attributeGroup ref="mmi:statusResponse.attrib"/> <xs:attributeGroup ref="mmi:automaticUpdate.attrib"/> </xs:complexType> </xs:element></xs:schema>
The following ladder diagram shows a possible message sequenceupon a session creation. We assume that an Interaction Managersession is already up and running. The user starts a multimodalsession for example by starting a web browser and fetching a givenURL.
The initial document contains scripts which providing themodality component functionality (e.g. understanding XML formattedlife-cycle events) and message transport capabilities (e.g. AJAX,but depends on the exact system implementation).
After loading the initial documents (and scripts) the modalitycomponent implementation issues a mmi:NewContextRequest message tothe IM. The IM may load a corresponding markup document, ifnecessary, and initializes and starts a new session.
In this scenario the Interaction Manager manager logic issues anumber of mmi:StartRequest messages to the various modalitycomponents. One message is sent to the graphical modality component(GUI) to instruct it to load a HTML document. Another message issent to a voice modality component (VUI) to play a welcomemessage.
The voice modality component has (in this example) to create aVoiceXML session. As VoiceXML 2.1 does not provide an externalevent interface a CCXML session will be used for externalasynchronous communication. Therefore the voice modality componentuses the session creation interface of CCXML 1.0 to create asession and start a corresponding script. This script will thenmake a call to a phone at the user device (which could be a regularphone or a SIP soft phone on the user's device). This scenarioillustrates the use of a SIP phone, which may reside on the usersmobile handset.
After successful setup of a CCXML session and the voiceconnection the voice modality component instructs the CCXML browserto start a VoiceXML dialog and passing it a corresponding VoiceXMLscript. The VoiceXML interpreter will execute the script and playout the welcome message. After the execution of the VoiceXML scripthas finished, the voice modality component notifies the InteractionManager using the mmi:done event.
The next diagram gives a example for the possible message flowwhile processing of user input. In the given scenario the userwants to enter information using the voice modality component. Tostart the voice input the user has to use the "push-to-talk"button. The "push-to-talk" button (which might be a hardware buttonor a soft button on the screen) generates a corresponding eventwhen pushed. This event is issues as a mmi:Extension event towardsthe Interaction Manager. The Interaction Manager logic sends ammi:StartRequest to the voice modality component. Thismmi:StartRequest message contains a URL which points to acorresponding VoiceXML script. The voice modality component againstarts a VoiceXML interpreter using the given URL. The VoiceXMLinterpreter loads the document and executes it. Now the system isready for the user input. To notify the user about the availabilityof the voice input functionality the Interaction Manager might sendan event to the GUI upon receiving the mmi:StartResponse event(which indicates that the voice modality component has started toexecute the document). But note that this is not shown in thepicture.
The VoiceXML interpreter captures the users voice input and usesa speech recognition engine to recognize the utterance. The speechrecognition result will be represented as an EMMA document and sentto the interaction manager using the mmi:done message. TheInteraction Manager logic sends a mmi:Extension message to the GUImodality component to instruct it to display the recognitionresult.
In the following scenario a modality component instance will bedestroyed as a reaction to a user input, e.g. because the userselected to change to the GUI only mode. In this case ammi:ClearContextRequest will be issued to the voice modalitycomponent. The voice modality component wrapper will then destroythe CCXML (and VoiceXML) session.
The application logic (i.e. the IM) may also decide to indicatethe removed voice functionality and disable an icon on the screenwhich indicates the availability of the voice modality.
The MMI architecture specification describes a set of lifecycleevents which define the basic interface between the interactionmanagement and the modality components. The StartRequest lifecycleevent defines the "content" and "contentURL" elements which maycontain markup code (or references to markup code). The markup hasto be executed by the modality component. Using the "Content" or"ContentURL" attributes introduces a dependency of the lifecycleevent to a specific modality component implementation. In otherwords, the interaction manager has to issue differentStartRequests, depending on which markup a GUI modality componentmay be able to process.
But multimodal applications may want to support differentmodality component implementations, such as HTML or Flash, for thesame application. In this case the interaction manager should beindependent of the modality component implementation and hence notgenerate a markup specific lifecycle event (e.g. containing a linkto HTML or even HTML content), but a further abstracted descriptionof the command.
Furthermore, localization needs to be taken into account. If theinteraction manager sends markup code to the modality component (orreferences to it), this markup code should not contain anydependencies to the user's language. Instead the interactionmanager needs to send the locale information to the modalitycomponent and let it select the appropriate strings.
Here is an example to show, how these two issues could beaddressed within the lifecycle events. This example uses a genericdata structure to carry the locale information (within the xml:langattribute) and the data to be visualized at a GUI.
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:StartRequest mmi:RequestID="123720476141" mmi:Context="IM_dcc3c320-9e88-44fe-b91d-02bd02fba1e3" mmi:Source="IM" mmi:Target="GUI"> <mmi:ContentURL mmi:href="login"/> <mmi:Data> <gui resourceid="login" xml:lang="de-DE"> <data enabled="false"/> <data enabled="false"/> </gui> </mmi:Data> </mmi:StartRequest></mmi:mmi>
This StartRequest carries a generic <gui> structure as itspayload which contains a "resourceid" and the xml:lang information.The "resourceid" has to be interpreted by the modality component(either to load an HTML document or a corresponding dialog, e.g. ifit is a flash app), whereas "xml:lang" is used by the modalitycomponent to select the appropriate string tables.
The content of the <gui> structure is an applicationspecific (but generic) description of data to be used by themodality component. This could contain a description of the statusof GUI elements (such as "enabled" or "disabled") or a list ofitems to be displayed. The following example shows a StartRequestto display a list of music songs. The list of songs will be loadedfrom a backend system and are dynamic. The representation of thesong list is agnostic to the modality component implementation. Itis the responsibility of the modality component to interpret thestructure and to display its content appropriately.
<mmi:mmi xmlns:mmi="http://www.w3.org/2008/04/mmi-arch" version="1.0"> <mmi:StartRequest mmi:RequestID="123720967758" mmi:Context="IM_dcc3c320-9e88-44fe-b91d-02bd02fba1e3" mmi:Source="IM" mmi:Target="GUI"> <mmi:ContentURL mmi:href="songSelection"/> <mmi:Data> <gui resourceid="songSelection" xml:lang="de-DE"> <data enabled="true"/> <data enabled="false"/> <data selected="" enabled="true"> <items> <item> <arg name="artist"><![CDATA[One artist]]> </arg> <arg name="title"><![CDATA[This is the title]]> </arg> <arg name="displayName"><![CDATA[Title]]> </arg> <arg name="price"><![CDATA[0.90]]> </arg> </item> <item> <arg name="artist"><![CDATA[Another artist]]> </arg> <arg name="title"><![CDATA[Yet another title]]> </arg> <arg name="displayName"><![CDATA[2nd title]]> </arg> <arg name="price"><![CDATA[0.90]]> </arg> </item> </items> </data> </gui> </mmi:Data> </mmi:StartRequest></mmi:mmi>
The "Multimodal Architecture and Interfaces" specificationsupports deployments in a variety of topologies, either distributedor co-located. In case of a distributed deployment, a protocol forthe lifecycle event transport needs to be defined. HTTP is themajor protocol of the web. HTTP is widely adopted, it is supportedby many programming languages and especially used by web browsers.Technologies like AJAX provide asynchronous transmission ofmessages for web browsers and allow to build modality components ontop of it in distributed environments. This section describes howthe HTTP protocol should be used for MMI lifecycle event transportin distributed deployments. Modality components and the InteractionManager need an HTTP processor to send and receive MMI lifecycleevents. The following picture illustrates a possible modularizationof the Runtime Framework, the Interaction Manager and the ModalityComponents. It shows internal lifecycle event interfaces (whichabstract from the transport layer) and the HTTP processors. TheHTTP processors are responsible for assembling and disassembling ofHTTP requests, which carry MMI lifecycle event representations aspayloads.
The following sections describe, how the HTTP protocol should beused to transport MMI lifecycle events.
HTTP defines the concept of client and server[RFC2616]. One possible deployment of themultimodal architecture is shown in following figure:
In this deployment scenario the Interaction Manager acts as anHTTP server, whereas modality components are HTTP clients, sendingHTTP requests to the Interaction Manager. But other configurationsare possible.
The multimodal architecture specification requires anasynchronous bi-directional event transmission. To achieve this (inthe given scenario, where modality components are HTTP clients andthe Interaction Manager acts as an HTTP server) separate (parallel)HTTP requests (referred to as send and receive channels in thepicture) are used to send and receive lifecycle events.
Modality components use HTTP/POST requests to send MMI lifecycleevents to the IM. The request contains the following URL requestparameters:
Context
(ortoken
)Source
The lifecycle event itself is contained in the body of theHTTP/POST request. TheContent-Type
header field ofthe HTTP/POST request has to be set according to the lifecycleevent format, e.g. “text/xml”.
The URL request parametersContext
andSource
are equivalent to the respective MMI lifecycleevent attributes. TheContext
must be used wheneveravailable. TheContext
is only unknown to the modalitycomponent during startup of a multimodal session, as theContext
will be returned from the Interaction Managerto the Modality component with theNewContextResponse
lifecycle event. Hence, when sending aNewContextRequest
, the context is unknown. Therefore atoken
is used to associate theNewContextRequest
andNewContextResponse
messages.
Thetoken
is a unique id (preexisting knowledge,e.g. generated by the modality component during registration) toidentify the channel between a modality component and theInteraction Manager.
Once theContext
is exchanged, theContext
must be used with subsequent requests and thetoken
must not be used anymore.
The response (to a HTTP/POST request, which carries a lifecycleevent from a Modality Component to to the Interaction Manager) mustnot contain any content and the HTTP response code must be “204 NoContent”.
The HTTP processor of the Interaction Manager is expected tohandle POST requests (which contain lifecycle events sent from themodality component to the Interaction Manager) as following:
context
(ortoken
) parameterto identify the corresponding interaction manager sessiontimeout
(in milliseconds). The requestcontains the following URL request parameters:Context
(ortoken
)Source
timeout
(optional)See discussion of the parameterContext
in theprevious section. The parameterSource
describes thesource of the request, i.e. the modality components id. Theparametertimeout
is optional and describes themaximum delay in milliseconds. Only positive integer values areallowed for the parametertimeout
. The request withtimeout
set to “0” returns immediately. TheInteraction Manager may limit the timeout to a (platform specific)maximum value. In case of absence of the parametertimeout
the Interaction Manager uses a platformspecific default.
The HTTP response body contains the lifecycle event as a string.The HTTP response header must contain theContent-Type
header field, which describes the format of the lifecycle eventstring (e.g. “text/xml”).
The HTTP processor of the Interaction Manager is expected tohandle HTTP/GET requests (which are used by the Modality Componentto receive lifecycle events) as following:
Context
(ortoken
) parameter toidentify the corresponding Interaction Manager sessionSource
parameter to identify modalitycomponent idContent-Type
header field appropriately). Use "200OK" HTTP status code in case an event is contained in the response,“204 No Content” in case of timeout or 4XX/5XX codes in case offailure (see error handling section below)The following figure shows a sequence of HTTP requests:
If the IM receives a HTTP/GET request containing an invalidtoken
orcontext
, it must return a 409(Conflict) response code.
For modality components, which are HTTP servers themselves, theInteraction Manager needs to send a lifecycle event through anHTTP/POST request. The request contains the followingparameters:
Context
Target
Target
is equivalent to the correspondingMMI lifecycle event attribute and describes the receiver of theevent. Hence, the receiver of the HTTP request uses this parameterto identify the corresponding modality component.Various MMI lifecycle events (especially response events)containStatus andStatusInfo fields. Thesefields should be used for error indication whenever possible.However, a failure during delivery of a lifecycle event needs to beindicated using HTTP response codes.
The HTTP processor of the Interaction Manager has to use HTTPresponse codes to indicate success or errors during requesthandling. In case of a successful processing of a request(successful in terms of transport, i.e. an event has beensuccessfully delivered) a 2XX status code (e.g. "204 No Content")has to be returned. Transport related errors, which lead to failurein delivery of a lifecycle event, are indicated using 4XX or 5XXresponse codes. 4XX error codes referring to "client errors" (wrongparameters etc.) whereas 5XX error codes indicating server errors(see also HTTP response codes in[RFC2616]).
The treatment of transport errors is up to the implementation,but the implementation should make errors visible to author code(e.g. raise event within Interaction Manager when a lifecycle eventhas not been successfully delivered to a Modality Component).
Modality components can be classified into either of threecategories: simple, complex or nested.
A simple modality component presents information to a user orcaptures information from a user as directed by an interactionmanager. A simple modality component is atomic in that it can notbe portioned into two or ore simple modality components that sendevents among themselves. A simple modality component is like ablack box in that the interaction manager can not directly accessany function inside of the black box other than by using life-cycleevents.
A simple modality component might contain functionality topresent one of the following types of information to the user oruser agent. For example:
A simple modality component might contain functionality tocapture one of the following types of information from the user oruser agent as directed by a complex modality or interactionmanager:
Figure 1: Two simple modality components
Figure 1 illustrates two simple modality components—ASR modalityfor capturing input from the user and TTS for presenting output tothe user. Note that all information exchanged between the twomodality components must be sent as life-cycle events to theinteraction manager which forwards them to the other modalitycomponent.
A complex modality component may contain functionality of two ormore simple modality components, for example:
Figure 2: A basic modality component with twofunctions
Figure 2 illustrates a complex modality component containing twofunctions, ASR and TTS. The ASR and TTS functions within thecomplex modality component may communicate directly with eachother, in addition to sending and receiving life-cycle events withthe interaction manager
A nested modality component is a set of modality components anda script (possibly written in SCXML) that manages them. The scriptcommunicates with the child modality components using life cycleevents. The script communicates with the interaction manager usingonly life-cycle events. The child modality components may notcommunicate directly with each other.
Figure 3: A nested modality component with twochild modality components, ASR and TTS.
Figure 3 illustrates a nested modality component with two childmodality components, ASR and TTS.
In effect, the script within a nested modality component can bethought of as an interaction manager that manages the childmodality components. In effect, a nested modality component is anested interaction manager. This is the so-called "Russian Doll"model of nested interaction managers.