Version: 12 April 2011
Contributors:
Copyright ©2011 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, and document use rules apply.
The CCXML 1.0 Specification entered the Candidate Recommendation period on 1 April 2010.
Preparation of an Implementation Report is a key criterion for moving beyond the Candidate Recommendation phase. This document describes the requirements for the Implementation Report and the process that the Voice Browser Working Group will follow in preparing the report.
The revised target date for entering Proposed Recommendation is 3 August 2010. The group will advance CCXML 1.0 to Proposed Recommendation no sooner than 3 August 2010.
Note: This Implementation Report was modified based on the public comments. See Appendix E for the detail of the changes.
During the CR period, the Working Group will carry out the following activities:
You are invited to contribute to the assessment of the W3C CCXML 1.0 Specification by participating in the Implementation Report process.
The Voice Browser Working Group established the following entrance criteria for the Proposed Recommendation phase in the Request for CR:
Require implementations and testimonial statements for at least two CCXML platforms.
pass
", "fail
" or
"not-impl
". "pass
" requires output of
the CCXML processor that is equivalent to the output specified in the
respective test file. A report must document
the way test output was verified. "not-impl
" means the
CCXML processor has not
implemented the specific feature required by a test. Interact Inc. Software Systems, a privately held company in the IVR space for more than 20 years, delivered our first W3C standards based product in 2004. Our first implementation of CCXML was based on the 29 Jun 2005 Working Draft, which we have subsequently used in conjunction with our high performance SPOT SIP Engine and VIP line of IVR products. We have waited patiently since then for a Candidate Recommendation, since that draft and subsequent drafts left many open questions. With the W3C CCXML 1.0 Candidate Recommendation, we now have a more complete and quite well documented interface to call control, switching, and conferencing. Interact Incorporated is proud to submit our Implementation Report. As a company not part of the W3C, and therefore not part of the specification development process, our report represents an outsider viewpoint of its feasibility and usefulness.
As a leading player in the speech technologies and voice platform markets, Loquendo believes that the CCXML 1.0 Specification increases the possibilities for the development of a wide range of voice applications by simplifying and enhancing call control management. The availability of the CCXML standard completes the tremendous leap forward made by VoiceXML, and in general the Speech Interface Framework developed by the W3C Voice Browser working group, allowing a clear separation between service and control layers. CCXML 1.0 will further promote the creation of efficient and powerful voice applications and it will hopefully further boost the IVR market and speech market in general.
Loquendo is delighted to contribute by submitting the CCXML 1.0 Implementation Report, which clearly demonstrates the effectiveness of the CCXML specification. Loquendo will continue to strongly support the activities of the W3C Voice Browser and Multimodal Interaction as part of its commitment to actively contributing to the evolution of their standards.
OptimSys provides software technologies, products and services in the area of telephony, call centers, IVR systems and speech-enabled systems in general. The company specializes in VoiceXML, CCXML and advanced speech technologies.
We are strongly convinced that the CCXML specification plays an irreplaceable role in creation of value added services for telephony, going far beyond the traditional telecom and call center market segments.
Besides these areas, OptimSys also uses CCXML, in combination with VoiceXML, for integration of telephony with business processes and corporate IT systems, or for building advanced communication systems featuring automation for dispatch terminals.
The CCXML interpreter became an important part of OptimSys' OptimTalk platform. Our first implementation was based on the April 30, 2004 Working Draft and since then OptimSys continuously contributes to the CCXML specification development as an external contributor. We are happy to see it becoming mature.
This report contains final CCXML Implementation results for OptimTalk CCXML interpreter. It demonstrates the implementability and interoperability of CCXML 1.0 specification.
Voxeo is pleased to be able to announce 100% support for the W3C Call Control XML (CCXML) 1.0 specification. As the company that delivered the world first and now the the worlds most compliant CCXML platform we are happy to announce our continued support and commitment to the CCXML specification. Our CCXML implementation is used by over 200,000 companies to power billions of phone calls per year as part of our worldwide hosting network and our on-premise platform. For more information about our platform please visit our web site at www.voxeo.com.
The following table lists all the assertions that were derived from the CCXML 1.0 Specification.
The Assert ID column uniquely identifies the assertion, which is linked to the start test. Note that some test assertions are tested in depending documents.
The Spec column identifies the section of the CCXML 1.0 Specification from which the assertion was derived.
The Conformance column indicates whether or not the CCXML 1.0 Specification requires the CCXML processor to implement the feature described by the test assertion.
The Test Type column indicates whether or not the associated test requires an adaptation to the testing environment. If the test assertion is considered manual, then the notes of the associated test gives more details about how the test must be modified (see Appendix A.1).
This test suite is licensed under both the W3C Test Suite License and the W3C 3-clause BSD License. See W3C Legal's explanation of the licenses.
ID | Spec | Conformance | Test Type | Abstract | Results | ||
---|---|---|---|---|---|---|---|
Pass | Fail | N/I | |||||
599 | [6.1] | Required | Auto | A CCXML session can consist of multiple CCXML documents, traversed by use of <goto> and <fetch>. | 4 | 0 | 0 |
605 | [6.2.1] | Required | Auto | When a <ccxml> is executed, its child elements are collected logically together at the beginning of the document and executed in document order before the target <eventprocessor>. | 4 | 0 | 0 |
606 | [6.2.1] | Required | Auto | The <ccxml> can designate the CCXML namespace. This can be achieved by declaring an xmlns attribute or an attribute with an " xmlns " prefix. | 4 | 0 | 0 |
607 | [6.2.1] | Required | Auto | Note that when the xmlns attribute is used alone, it sets the default namespace for the element on which it appears and for any child elements. | 4 | 0 | 0 |
608 | [6.2.1] | Required | Auto | The namespace URI for CCXML is "http://www.w3.org/2002/09/ccxml". | 4 | 0 | 0 |
609 | [6.2.1] | Required | Auto | The <ccxml> element must contain a version attribute. The initial version number is 1.0. | 4 | 0 | 0 |
610 | [6.2.1] | Required | Auto | The <ccxml> element may contain a xml:base attribute. This is the URI which all relative references within the document take as their base. | 4 | 0 | 0 |
611 | [6.2.2] | Required | Auto | A CCXML document may contain a <meta> element. | 4 | 0 | 0 |
612 | [6.2.2] | Required | Auto | A <meta> element may contain a name attribute indicating the name of the metadata information | 4 | 0 | 0 |
615 | [6.2.2] | Required | Auto | Either a name or http-equiv attribute is REQUIRED. | 4 | 0 | 0 |
617 | [6.2.2] | Required | Auto | A <meta> element must contain a content attribute. If not specified, error.fetch event will be thrown. | 4 | 0 | 0 |
619 | [6.2.3] | Required | Auto | A CCXML document may contain a <metadata> element. <metadata> is a container in which information about the document can be placed using a metadata language. | 4 | 0 | 0 |
622 | [6.2.3] | Required | Auto | <metadata> may not specify any attributes. If attributes are specified, an error.fetch event is thrown | 4 | 0 | 0 |
623 | [6.2.4] | Required | Auto | A CCXML document may contain an <if> element. An <if> is a container for conditionally executed elements | 4 | 0 | 0 |
624 | [6.2.4] | Required | Auto | <else> and <elseif> can optionally appear within an <if> as immediate children | 4 | 0 | 0 |
625 | [6.2.4] | Required | Auto | If an <if> has no immediate <elseif> or <else> children, the full contents of the <if> will be selected when the cond attribute is true | 4 | 0 | 0 |
626 | [6.2.4] | Required | Auto | A CCXML <if> element must contain a cond attribute. If not provided, an error.fetch event is thrown. | 4 | 0 | 0 |
627 | [6.2.5] | Required | Auto | An <elseif> partitions the content of an <if>, and provides a condition that determines the selection of the partition it begins | 4 | 0 | 0 |
628 | [6.2.5] | Required | Auto | A CCXML <elseif> element must contain a cond atribute.If a cond atribute is not provided for an <elseif>, error.fetch event is thrown. | 4 | 0 | 0 |
629 | [6.2.6] | Required | Auto | <else> is a synonym for <elseif cond="true"/>. | 4 | 0 | 0 |
1001 | [6.2.7] | Required | Auto | The <fetch> method attribute may be have a value set to "get" | 4 | 0 | 0 |
1002 | [6.2.7] | Required | Auto | The <fetch> method attribute may have a value set to "post" | 4 | 0 | 0 |
1298 | [6.2.7] | Required | Auto | In fetch tag, if mode attribute is set to processed (the default) the CCXML platform MUST attempt to parse and validate the returned content. | 4 | 0 | 0 |
1299 | [6.2.7] | Required | Auto | In fetch tag, if mode attribute is set to raw the platform MUST NOT attempt to process the data and MUST leave processing of the content to the application who can do what it wishes with the content via the content attribute of the fetch.done event. | 4 | 0 | 0 |
630 | [6.2.7] | Required | Auto | <fetch> is used to asynchronously fetch content identified by the attributes of the <fetch> | 4 | 0 | 0 |
631 | [6.2.7] | Required | Auto | The fetched content may either be a CCXML document, or script content. | 4 | 0 | 0 |
632 | [6.2.7] | Required | Auto | Execution returns from the element immediately, and the CCXML application can continue on while the platform works to fetch the identified resource. | 4 | 0 | 0 |
633 | [6.2.7] | Required | Auto | When the fetch request has been completed, a fetch.done event is thrown to indicates that the identified content was fetched successfully | 4 | 0 | 0 |
634 | [6.2.7] | Required | Auto | When the fetch request has been completed, a error.fetch event is thrown to indicate a failure to fetch the requested content | 4 | 0 | 0 |
635 | [6.2.7] | Required | Auto | If content is successfully fetched, errors in processing fetched content (for instance, a CCXML document with a syntax error) may result in an error.fetch being thrown. | 4 | 0 | 0 |
636 | [6.2.7] | Required | Auto | The application may obtain the unique identifier for a fetch request by providing an ECMAScript left-hand-side expression in the fetchid attribute when the fetch is performed | 4 | 0 | 0 |
637 | [6.2.7] | Required | Auto | The fetch identifier can be obtained as a property of the fetch.done event. | 4 | 0 | 0 |
638 | [6.2.7] | Required | Auto | Fetched content has a lifetime that is limited to that of the document in which it is fetched. Therefore, following a transition to a new CCXML document using <goto>, content fetched in the scope of the current document is no longer accessible. | 4 | 0 | 0 |
640 | [6.2.7] | Required | Auto | A CCXML <fetch> element may contain a type attribute. | 4 | 0 | 0 |
641 | [6.2.7] | Required | Auto | If a type attribute is not provided the default value is: In processed mode "application/ccxml+xml". In raw mode "*/*". | 4 | 0 | 0 |
642 | [6.2.7] | Required | Auto | A CCXML <fetch> element may contain a namelist attribute. The namelist content will be submitted to the server where the URL is located. | 4 | 0 | 0 |
643 | [6.2.7] | Required | Auto | A CCXML <fetch> element may contain a method attribute specifying the HTTP method to use. | 4 | 0 | 0 |
645 | [6.2.7] | Required | Auto | A CCXML <fetch> element may contain a fetchid attribute. | 4 | 0 | 0 |
646 | [6.2.7] | Required | Auto | A CCXML <fetch> element may contain a timeout attribute. The fetch will fail if not completed at the end of this interval. A failed fetch will return the error.fetch event. | 4 | 0 | 0 |
650 | [6.2.7] | Required | Auto | A CCXML <fetch> element may contain an enctype attribute indicating the media encoding type of the submitted document. If an enctype is specified, the value must be: application/x-www-form-urlencoded. | 4 | 0 | 0 |
995 | [6.2.7] | Required | Auto | Content that has been acquired using <fetch> is accessible through other elements defined by CCXML | 4 | 0 | 0 |
996 | [6.2.7] | Required | Auto | The "http" URI scheme MUST be supported by CCXML platforms | 4 | 0 | 0 |
651 | [6.2.8] | Required | Auto | A <goto> transfers control to the document obtained through a fetch request, using the platform-generated unique identifier associated with that fetch request. | 4 | 0 | 0 |
652 | [6.2.8] | Required | Auto | The fetch completion event MUST have arrived before the <goto> is executed, otherwise, an error.semantic event is generated. | 4 | 0 | 0 |
653 | [6.2.8] | Required | Auto | If the fetched content referenced by the fetch identifier is not a CCXML document, or the fetch identifier is invalid and does not correspond to any fetch request, this also results in an error.semantic event. | 4 | 0 | 0 |
654 | [6.2.8] | Required | Auto | When a <goto> is executed, the target document replaces the current document in its session. | 4 | 0 | 0 |
655 | [6.2.8] | Required | Auto | Event sources associated with this session are inherited by the target document | 4 | 0 | 0 |
656 | [6.2.8] | Required | Auto | Execution of the current document terminates when a <goto> element is executed | 4 | 0 | 0 |
657 | [6.2.8] | Required | Auto | A CCXML <goto> element must contain a fetchid attribute. If the fetchid attribute is not provided and error.fetch event is thrown. | 4 | 0 | 0 |
1160 | [6.2.9] | Required | Auto | If the value of the fetchparam attribute is 'none', then no additional parameters may be passed with the fetch. | 4 | 0 | 0 |
1161 | [6.2.9] | Required | Auto | If the value of the fetch param attribute is 'session.id', then the 'session.id' property of the newly created session must be included when fetching the initial document | 4 | 0 | 0 |
1162 | [6.2.9] | Required | Auto | If the value of the fetchparam attribute is 'session', then the 'session.id' property and all properties of 'session.values' will be included when fetching the initial document. | 4 | 0 | 0 |
1163 | [6.2.9] | Required | Auto | A parameters attribute may be specified. If specified, the parameters attribute is a list of zero or more whitespace separated CCXML variable names. Each named variable will be created as a property of 'session.values' in the newly created session. | 4 | 0 | 0 |
658 | [6.2.9] | Required | Auto | <createccxml> is used to create another CCXML session, which begins execution with the document identified by this element. | 4 | 0 | 0 |
661 | [6.2.9] | Required | Auto | The new CCXML session has no relation to its creator once spawned, and has a wholly separate lifetime and address space. | 4 | 0 | 0 |
662 | [6.2.9] | Required | Auto | Execution returns from the <createccxml> element immediately, and the CCXML interpreter can continue on while the new CCXML session is established and loads its initial document. | 4 | 0 | 0 |
665 | [6.2.9] | Required | Auto | The next attribute is required. It is an ECMAScript expression which returns the URI of the resource to be fetched | 4 | 0 | 0 |
666 | [6.2.9] | Required | Auto | The namelist attribute is optional. A list of zero or more whitespace separated CCXML variable names. These variables must be submitted to the server, with the same qualification as used in the namelist. When an ECMAscript variable is submitted to the server, its value must be first converted into a string before being submitted. | 4 | 0 | 0 |
667 | [6.2.9] | Required | Auto | The method attribute is optional. It is An ECMAScript expression which returns a character string that indicates the HTTP method to use. | 4 | 0 | 0 |
669 | [6.2.9] | Required | Auto | The sessionid attribute is optional. It is an ECMAScript left hand side expression evaluating to a previously defined variable. The value of the attribute must receive an internally generated unique string identifier which identifies the newly created session. | 4 | 0 | 0 |
670 | [6.2.9] | Required | Auto | The timeout attribute is optional. It is an ECMAScript expression. The character string returned must be interpreted as a time interval. This time interval must be interpreted by the new CCXML session as the maximum time it may wait for the completion of the fetch for the initial document specified by the next attribute. If the new CCXML session is unable to fetch the initial document within the timeout interval, an error.createccxml event must be thrown. | 4 | 0 | 0 |
671 | [6.2.9] | Required | Auto | The maxage attribute is optional. It is an ECMAScript expression. The character string returned must be interpreted as a time interval. This indicates that the document is willing to use content whose age must be no greater than the specified time in seconds (cf. 'max-age' in HTTP 1.1 [RFC2616]). The document is not willing to use stale content, unless maxstale is also provided. | 4 | 0 | 0 |
673 | [6.2.9] | Required | Auto | The maxstale attribute is optional. It is an ECMAScript expression. The character string returned must be interpreted as a time interval. This indicates that the document is willing to use content that has exceeded its expiration time (cf. 'max-age' in HTTP 1.1 [RFC2616]). If maxstale is assigned a value, then the document is willing to accept content that has exceeded its expiration time by no more than the specified number of seconds. | 4 | 0 | 0 |
674 | [6.2.9] | Required | Auto | The enctype attribute is optional. It is an ECMAScript expression which returns a character string that indicates the media encoding type of the submitted document (when the value of the method is "post"). Values defined by the specification are: application/x-www-form-urlencoded. (Only one enctype is defined.) | 4 | 0 | 0 |
675 | [6.2.10] | Required | Auto | <exit> ends execution of the CCXML session. All pending events are discarded, and there is no way to restart CCXML execution. | 4 | 0 | 0 |
684 | [6.2.11] | Required | Auto | The <log> element may have a label attribute to indicate the purpose of the log. | 4 | 0 | 0 |
685 | [6.2.11] | Required | Auto | The <log> element must provide an expr attribute evaluating to string to be logged | 4 | 0 | 0 |
686 | [6.2.11] | Required | Auto | If an expr attribute is not provided, an error.fetch event will be thrown. | 4 | 0 | 0 |
689 | [6.3.2] | Required | Auto | A fetch.done event will contain a fetchid property set to the internally generated unique fetch identifier | 4 | 0 | 0 |
690 | [6.3.2] | Required | Auto | A fetch.done event will contain a uri property set to the URI of the fetch request. | 4 | 0 | 0 |
1006 | [6.3.3] | Required | Auto | An error.fetch event will contain a statuscode property set to the numeric HTTP status code of the failed HTTP request | 4 | 0 | 0 |
693 | [6.3.3] | Required | Auto | An error.fetch event will contain a fetchid property set to the internally generated unique fetch identifier | 4 | 0 | 0 |
694 | [6.3.3] | Required | Auto | An error.fetch event will contain a reason property set to a string describing the fetch error. | 4 | 0 | 0 |
695 | [6.3.3] | Required | Auto | An error.fetch event will contain a uri property set to the URI of the fetch request. | 4 | 0 | 0 |
1014 | [6.3.4] | Required | Auto | A ccxml.exit event will contain a reason property set to the reason the session ended. Possible values are: "exit" - Session ended due to a <exit> element, "error" - Session ended due to an unhandled error event, "kill" - Session ended due to ccxml.kill* event | 4 | 0 | 0 |
1164 | [6.3.4] | Required | Auto | This event is generated when a CCXML document has an unhandled "error.*" event | 4 | 0 | 0 |
1165 | [6.3.4] | Required | Auto | This event is generated when a CCXML document has an unhandled ccxml.kill event. | 4 | 0 | 0 |
1166 | [6.3.4] | Required | Auto | The ccxml.exit event is only generated when the session exiting has a parent session. This event is sent to the parent session and not the exiting. | 4 | 0 | 0 |
698 | [6.3.4] | Required | Auto | A ccxml.exit event will contain a sessionid property set to the identifier of the exiting session. This is the same value returned to the sessionid attribute of the <createccxml> which created this session | 4 | 0 | 0 |
699 | [6.3.4] | Required | Auto | A ccxml.exit event will contain a expr property containing the value of the value of the <exit> expr attribute | 4 | 0 | 0 |
701 | [6.3.4] | Required | Auto | A ccxml.exit event will contain a values object with sub properties for each entry in the namelist attribute. | 4 | 0 | 0 |
702 | [6.3.5] | Required | Auto | The ccxml.loaded event is thrown once the document is parsed and ready for execution (document initialization occurs between the fetched and loaded events). | 4 | 0 | 0 |
703 | [6.3.5] | Required | Auto | The CCXML platform MUST generate this event when the CCXML document is first loaded at session startup. | 4 | 0 | 0 |
704 | [6.3.5] | Required | Auto | The CCXML platform MUST generate this event when the CCXML document is loaded after transferring control to a new document with the <goto>. | 4 | 0 | 0 |
705 | [6.3.5] | Required | Auto | This event would be processed after the platform had executed the document initialization including executing any elements under the <ccxml> | 4 | 0 | 0 |
707 | [6.3.5] | Required | Auto | The ccxml.loaded event contains a sessionid property that identifies of the session on which this document is executing | 4 | 0 | 0 |
708 | [6.3.5] | Required | Auto | The ccxml.loaded event contains a parent property indicating the identifier of the session which issued the <createccxml> to start this document. | 4 | 0 | 0 |
709 | [6.3.5] | Required | Auto | if this document was started directly by the CCXML platform, the parent property of a ccxml.loaded event is set to ECMAScript undefined | 4 | 0 | 0 |
710 | [6.3.6] | Required | Auto | The ccxml.kill event can be used by the platform to terminate a session without an explicit <exit>. | 4 | 0 | 0 |
711 | [6.3.6] | Required | Auto | The ccxml.kill event can be caught, typically to perform a clean-up operation at the end of a session. If the event is caught the session will not be terminated unless the an <exit> element is processed. If the event is not caught the session will be terminated and all active connections, conferences and dialogs that are owned by that session will be automatically terminated by the platform | 4 | 0 | 0 |
712 | [6.3.6] | Required | Auto | the ccxml.kill.unconditional event is the only event that cannot be caught by an application. It will unconditionally terminate the session and all active connections, conferences and dialogs that are owned by that session will be automatically terminated by the platform. | 4 | 0 | 0 |
714 | [6.3.6] | Required | Auto | The ccxml.kill event contains a sessionid property set to the identifier of the session that has sent the event. | 4 | 0 | 0 |
715 | [6.3.6] | Required | Auto | The ccxml.kill event contains a reason property set to a string describing the reason the platform sent the ccxml.kill event | 4 | 0 | 0 |
721 | [6.3.7] | Required | Auto | The ccxml.created event contains a sessionid property set to identifier of the newly created CCXML session. This is the same identifier as was returned on the sessionid attribute of the <createccxml> request that created the session | 4 | 0 | 0 |
724 | [6.3.8] | Required | Auto | The error.createccxml event contains a sessionid property set to identifier of the failing CCXML session. This is the same identifier as was returned on the sessionid attribute of the <createccxml> request that created the session | 4 | 0 | 0 |
725 | [6.3.8] | Required | Auto | The error.createccxml event contains a reason property set the a string describing the error encountered | 4 | 0 | 0 |
310 | [7.1] | Optional | Auto | A CCXML platform MAY support interaction with several dialog systems with the selection of the particular technology being based on the MIME type specified when the dialog is initiated. | 4 | 0 | 0 |
311 | [7.1] | Required | Auto | CCXML implementations MUST support the <dialogprepare>, <dialogstart>, and <dialogterminate> elements though the exact behaviour may vary depending on the dialog environments supported. | 4 | 0 | 0 |
312 | [7.2.1.1] | Required | Auto | A <dialogprepare> element does not block the processing of further events by the CCXML session. | 4 | 0 | 0 |
313 | [7.2.1.1] | Required | Auto | The use of the <dialogprepare> element is entirely optional, applications may choose to simply use <dialogstart> without prior preparation. | 4 | 0 | 0 |
315 | [7.2.1.1] | Required | Auto | In the case of a dialog manager that does not support preparation, the CCXML implementation MUST as a minimum, note the values provided in the <dialogprepare> attributes, create a Dialog object, and return a new unique value to the location defined by the dialogid attribute and throw a dialog.prepared event. | 4 | 0 | 0 |
1181 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a parameters attribute whose value is a Var-list of one or more whitespace separated CCXML variable names. These variables are sent to the dialog environment as a list of name/value pairs. | 4 | 0 | 0 |
1182 | [7.2.1.2] | Required | Auto | The parameters attribute value of <dialogprepare> is a Var-list. Names are sent exactly as they are specified. Values are formed by converting the referenced ECMAScript variable to string form (which is undefined for objects). | 4 | 0 | 0 |
1233 | [7.2.1.2] | Required | Auto | In <dialogprepare> element, if the attribute value of dialogid is invalid, an error.semantic event MUST be thrown. | 4 | 0 | 0 |
317 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MUST have a src attribute | 4 | 0 | 0 |
318 | [7.2.1.2] | Required | Auto | The src attribute value of <dialogprepare> is an ECMAScript expression which returns a character string identifying the URI of the dialog document that the dialog interpreter should prepare. | 4 | 0 | 0 |
319 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a type attribute whose value is an ECMAScript expression that MUST contain a valid MIME type. | 4 | 0 | 0 |
320 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a namelist attribute whose value is a Var-list of zero or more whitespace separated CCXML variable names. These variables MUST be submitted to the server, with the same qualification as used in the namelist. | 4 | 0 | 0 |
321 | [7.2.1.2] | Required | Auto | The namelist attribute value of <dialogprepare> is a Var-list. When an ECMAscript variable is submitted to the server, its value MUST be first converted into a string before being submitted. | 4 | 0 | 0 |
322 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a dialogid attribute whose value is an ECMAScript Left Hand Side Expression evaluating to a previously defined variable. | 4 | 0 | 0 |
323 | [7.2.1.2] | Required | Auto | The dialogid attribute value of <dialogprepare> is an ECMAScript left hand side expression, whose value MUST receive a dialog identifier value for the launched dialog interpreter instance. | 4 | 0 | 0 |
324 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a connectionid attribute whose value is an ECMAScript Expression which returns the identifier of a connection. If specified, the dialog being prepared MUST be joined to the referenced connection as specified by the mediadirection attribute. | 4 | 0 | 0 |
326 | [7.2.1.2] | Required | Auto | The connectionid attribute value of <dialogprepare> is an ECMAScript expression. If the attribute value is invalid, an error.semantic event MUST be thrown. | 4 | 0 | 0 |
327 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a conferenceid attribute whose value is an ECMAScript Expression which returns the identifier of a conference bridge. If specified, the dialog being prepared MUST be joined to the referenced conference as specified by the mediadirection attribute. | 4 | 0 | 0 |
328 | [7.2.1.2] | Required | Auto | The conferenceid attribute value of <dialogprepare> is an ECMAScript expression. If the attribute value is invalid, an error.semantic event MUST be thrown. | 4 | 0 | 0 |
329 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a mediadirection attribute whose value is an ECMAScript Expression that defines the direction of the media flow between the Dialog and the Connection or Conference. If the value is "both", it specifies a full duplex connection where the media flows in both directions. | 4 | 0 | 0 |
330 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a mediadirection attribute whose value is an ECMAScript Expression that defines the direction of the media flow between the Dialog and the Connection or Conference. If the value is "dialogtransmit", the dialog transmits media to the Connection or Conference but does not receive any media streams | 4 | 0 | 0 |
331 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a mediadirection attribute whose value is an ECMAScript Expression that defines the direction of the media flow between the Dialog and the Connection or Conference. If the value is "dialogreceive", the dialog receives media from the Connection or Conference but does not transmit any media streams. | 4 | 0 | 0 |
332 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a maxage attribute whose value is a valid time value for the HTTP 1.1 request [RFC2616]. | 4 | 0 | 0 |
333 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a maxstale attribute whose value is a valid time value for the HTTP 1.1 request [RFC2616]. | 4 | 0 | 0 |
335 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a enctype attribute, whose value is an ECMAScript expression which returns a character string that indicates the media encoding type of the submitted document. If the value is "application/x-www-form-urlencoded", this indicates that the ccxml variables specified in the namelist will be url encoded. | 4 | 0 | 0 |
336 | [7.2.1.2] | Required | Auto | A <dialogprepare> element MAY have a method attribute whose value is an ECMAScript expression which returns a character string that indicates the HTTP method to use. Values defined by the specification are: GET and POST. | 4 | 0 | 0 |
337 | [7.2.2.1] | Required | Auto | The <dialogstart> element MUST include either a URI reference to the initial document for the dialog or the identity of a previously prepared dialog. | 4 | 0 | 0 |
338 | [7.2.2.1] | Required | Auto | When a <dialogstart> is executed, the dialog executes on a separate logical execution thread (this MAY be a thread, process, or system depending upon platform implementation) and does not block the processing of further events by the CCXML session. | 4 | 0 | 0 |
339 | [7.2.2.1] | Required | Auto | If the connectionid attribute of <dialogstart> is specified, and if the dialog language allows access to telephony variables such as ANI, DNIS and UUI, values of these variables MUST be propagated from the specified connection to the dialog application. | 4 | 0 | 0 |
340 | [7.2.2.1] | Required | Auto | If the prepareddialogid attribute is specified and any attribute values conflict with the values specified in the <dialogprepare> element this MUST result in the throwing of an error.dialog.notstarted event. | 4 | 0 | 0 |
802 | [7.2.2.1] | Required | Auto | When the dialog completes, a dialog.exit event MUST be posted to the event queue of the CCXML session that started it. | 4 | 0 | 0 |
1184 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a parameters attribute whose value is a Var-list of one or more whitespace separated CCXML variable names. These variables are sent to the dialog environment as a list of name/value pairs. | 4 | 0 | 0 |
1185 | [7.2.2.2] | Required | Auto | The parameters attribute value of <dialogstart> is a Var-list. Names are sent exactly as they are specified. Values are formed by converting the referenced ECMAScript variable to string form (which is undefined for objects). | 4 | 0 | 0 |
1186 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a parameters attribute. This attribute MUST NOT be specified in conjunction with the prepareddialogid attribute. | 4 | 0 | 0 |
1213 | [7.2.2.2] | Required | Auto | In <dialogstart> element, if the attribute value of dialogid is invalid, an error.semantic event MUST be thrown. | 4 | 0 | 0 |
1296 | [7.2.2.2] | Required | Auto | In <dialogstart> element, if the dialog was previously prepared using a dialogprepare element with a connectionid or conferenceid specified, and this attribute is also specified, execution of the dialogstart MUST fail with an error.dialog.notstarted event. | 4 | 0 | 0 |
342 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a src attribute. This attribute MUST NOT be specified in conjunction with the prepareddialogid attribute. | 4 | 0 | 0 |
343 | [7.2.2.2] | Required | Auto | The src attribute value of <dialogstart> is an ECMAScript expression which returns a character string identifying the URI of the dialog document that the dialog interpreter MUST load and begin execution upon startup. | 4 | 0 | 0 |
345 | [7.2.2.2] | Required | Auto | The preparedialogid attribute value of <dialogstart> is an ECMAScript expression which returns a dialog identifier of a dialog previously prepared by the execution of a <dialogprepare> element. | 4 | 0 | 0 |
347 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a type attribute. This attribute MUST NOT be specified in conjunction with the prepareddialogid attribute. | 4 | 0 | 0 |
348 | [7.2.2.2] | Required | Auto | The type attribute value of <dialogstart> is an ECMAScript expression that MUST contain a valid MIME type. | 4 | 0 | 0 |
349 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a namelist attribute. This attribute MUST NOT be specified in conjunction with the prepareddialogid attribute. | 4 | 0 | 0 |
350 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a namelist attribute whose value is a Var-list of zero or more whitespace separated CCXML variable names. These variables MUST be submitted to the web server, with the same qualification as used in the namelist. | 4 | 0 | 0 |
351 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a namelist attribute whose value is a Var-list of one or more whitespace separated CCXML variable names. When an ECMAscript variable is submitted to the web server, its value MUST first converted into a string before being submitted. | 4 | 0 | 0 |
352 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a dialogid attribute whose value is an ECMAScript Left Hand Side Expression evaluating to a previously defined variable. The value of the attribute MUST receive a dialog identifier value for the launched dialog interpreter instance. | 4 | 0 | 0 |
353 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a connectionid attribute whose value is an ECMAScript expression which returns the identifier of a connection. If specified, the dialog being started MUST be joined to the referenced connection as specified by the mediadirection attribute. | 4 | 0 | 0 |
357 | [7.2.2.2] | Required | Auto | In <dialogstart> element, if the attribute value of connectionid is invalid an error.semantic event MUST be thrown. | 4 | 0 | 0 |
358 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a conferenceid attribute whose value is an ECMAScript Expression which returns the identifier of`a conference bridge. If specified, the dialog being started MUST be joined to the referenced conference as specified by the mediadirection attribute. | 4 | 0 | 0 |
359 | [7.2.2.2] | Required | Auto | In <dialogstart> element, if the attribute value of conferenceid is invalid an error.semantic event MUST be thrown. | 4 | 0 | 0 |
360 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a mediadirection attribute whose value is an ECMAScript Expression that defines the direction of the media flow between the Dialog and the Connection or Conference. If the value is "both", it specifies a full duplex connection where the media flows in both directions. | 4 | 0 | 0 |
361 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a mediadirection attribute whose value is an ECMAScript Expression that defines the direction of the media flow between the Dialog and the Connection or Conference. If the value is "dialogtransmit", the dialog transmits media to the Connection or Conference but does not receive any media streams | 4 | 0 | 0 |
362 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a mediadirection attribute whose value is an ECMAScript Expression that defines the direction of the media flow between the Dialog and the Connection or Conference. If the value is "dialogreceive", the dialog receives media from the Connection or Conference but does not transmit any media streams. | 4 | 0 | 0 |
363 | [7.2.2.2] | Required | Auto | In <dialogstart> element, if both the mediadirection and the prepareddialogid are specified and the bridge type specified by the mediadirection attribute does not match that used on the previous <dialogprepare> element, an error.dialog.notstarted event MUST be raised. | 4 | 0 | 0 |
365 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a maxage attribute whose value is a valid time value for the HTTP 1.1 request [RFC2616]. | 4 | 0 | 0 |
366 | [7.2.2.2] | Required | Auto | In <dialogstart> element, the maxage attribute MUST NOT be specified used with prepareddialogid. | 4 | 0 | 0 |
367 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a maxstale attribute whose value is a valid time value for the HTTP 1.1 request [RFC2616]. | 4 | 0 | 0 |
368 | [7.2.2.2] | Required | Auto | In <dialogstart> element, the maxstale attribute MUST NOT be used with prepareddialogid. | 4 | 0 | 0 |
370 | [7.2.2.2] | Required | Auto | In <dialogstart> element, the enctype attribute MUST NOT be used with prepareddialogid. | 4 | 0 | 0 |
371 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a enctype attribute, whose value is an ECMAScript expression which returns a character string that indicates the media encoding type of the submitted document. If the value is "application/x-www-form-urlencoded", this indicates that the ccxml variables specified in the namelist will be url encoded. | 4 | 0 | 0 |
372 | [7.2.2.2] | Required | Auto | A <dialogstart> element MAY have a method attribute whose value is an ECMAScript expression which returns a character string that indicates the HTTP method to use. Values defined by the specification are: GET and POST. | 4 | 0 | 0 |
373 | [7.2.2.2] | Required | Auto | In <dialogstart> element, the method attribute MUST NOT be used with prepareddialogid. | 4 | 0 | 0 |
375 | [7.2.3.1] | Required | Auto | A dialog terminated due to the processing of a <dialogterminate> element MAY still return data to the CCXML application using a dialog.exit event if the value of the immediate attribute is false or unspecified. | 4 | 0 | 0 |
376 | [7.2.3.1] | Required | Auto | In a <dialogterminate> element, if the immediate attribute is set to true, the dialog MUST NOT return data to the CCXML application and the CCXML interpreter MUST post a dialog.exit event immediately. | 4 | 0 | 0 |
377 | [7.2.3.2] | Required | Auto | A <dialogterminate> element MUST have a dialogid attribute whose value is an ECMAScript expression which returns a character string identifying the dialog. | 4 | 0 | 0 |
378 | [7.2.3.2] | Required | Auto | A <dialogterminate> element MUST have a dialogid attribute. If the attribute value is invalid, an error.semantic event MUST be thrown. | 4 | 0 | 0 |
379 | [7.2.3.2] | Required | Auto | A <dialogterminate> element MAY have an immediate attribute whose value is an ECMAScript expression which returns a character string, that identifies the termination style of the dialog. Valid values are: true and false. | 4 | 0 | 0 |
1189 | [7.3.2] | Required | Auto | A dialog.started event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
381 | [7.3.2] | Required | Auto | The dialog.started event MUST be thrown when a dialog is successfully started. | 4 | 0 | 0 |
383 | [7.3.2] | Required | Auto | A dialog.started event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
384 | [7.3.2] | Required | Auto | A dialog.started event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is bridged (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
385 | [7.3.2] | Required | Auto | A dialog.started event MAY contain a connectionid property. If the dialog is bridged to a conference the value MUST be undefined. | 4 | 0 | 0 |
386 | [7.3.2] | Required | Auto | A dialog.started event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is bridged (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
387 | [7.3.2] | Required | Auto | A dialog.started event MAY contain a conferenceid property. If the dialog is bridged to a connection the value MUST be undefined. | 4 | 0 | 0 |
1191 | [7.3.3] | Required | Auto | A dialog.exit event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
388 | [7.3.3] | Required | Auto | The dialog.exit event MUST be thrown when a dialog terminates normally. | 4 | 0 | 0 |
389 | [7.3.3] | Required | Auto | The dialog.exit event MUST be thrown when a dialog terminates following a <dialogterminate> request. | 4 | 0 | 0 |
391 | [7.3.3] | Required | Auto | A dialog.exit event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
392 | [7.3.3] | Required | Auto | A dialog.exit event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is bridged (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
393 | [7.3.3] | Required | Auto | A dialog.exit event MAY contain a connectionid property. If the dialog is bridged to a conference the value MUST be undefined. | 4 | 0 | 0 |
394 | [7.3.3] | Required | Auto | A dialog.exit event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is bridged (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
395 | [7.3.3] | Required | Auto | A dialog.exit event MAY contain a conferenceid property. If the dialog is bridged to a connection the value MUST be undefined. | 4 | 0 | 0 |
397 | [7.3.3] | Required | Auto | A dialog.exit event MAY contain a values property. Return values from the dialog. In VoiceXML this would be the values of each of the objects listed in the exit element's namelist. | 4 | 0 | 0 |
1193 | [7.3.4] | Required | Auto | A dialog.disconnect event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
398 | [7.3.4] | Required | Auto | The dialog.disconnect event represents a request by a dialog to disconnect the Connection or Conference with which it is presently associated. | 4 | 0 | 0 |
401 | [7.3.4] | Required | Auto | A dialog.disconnect event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
402 | [7.3.4] | Required | Auto | A dialog.disconnect event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is bridged (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
403 | [7.3.4] | Required | Auto | A dialog.disconnect event MAY contain a connectionid property, if the dialog is bridged to a conference the value MUST be undefined. | 4 | 0 | 0 |
404 | [7.3.4] | Required | Auto | A dialog.disconnect event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is bridged (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
405 | [7.3.4] | Required | Auto | A dialog.disconnect event MAY contain a conferenceid property, if the dialog is bridged to a connection the value MUST be undefined. | 4 | 0 | 0 |
407 | [7.3.4] | Required | Auto | A dialog.disconnect event MAY contain a values property. Return values from the dialog. In VoiceXML this would be the values of each of the objects listed in the dialog element's namelist. | 4 | 0 | 0 |
1195 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
408 | [7.3.5] | Required | Auto | The dialog.transfer event represents a request by a dialog to transfer the Connection or Conference with which it is presently associated to a new destination. | 4 | 0 | 0 |
410 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
411 | [7.3.5] | Required | Auto | A dialog.transfer event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is bridged (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
412 | [7.3.5] | Required | Auto | A dialog.transfer event MAY contain a connectionid property, if the dialog is bridged to a conference the value MUST be undefined. | 3 | 0 | 1 |
413 | [7.3.5] | Required | Auto | A dialog.transfer event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is bridged (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 3 | 0 | 1 |
414 | [7.3.5] | Required | Auto | A dialog.transfer event MAY contain a conferenceid property, if the dialog is bridged to a connection the value MUST be undefined. | 4 | 0 | 0 |
415 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a type property, which contains a string value specifying the transfer type. | 4 | 0 | 0 |
416 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a URI property, which contains a URI describing the destination to which this call MUST be transfered. The format of this information is protocol and platform specific but might consist of a telephone URI [ RFC2806 ] or a SIP URI [ RFC3261 ]. | 4 | 0 | 0 |
419 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a maxtime property, which contains a string in CSS2 format that specifies the maximum amount of time the transfer may stay connected. | 4 | 0 | 0 |
420 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a maxtime property, if the amount of the transfer time is unlimited, the value of maxtime MUST be 0s. | 4 | 0 | 0 |
421 | [7.3.5] | Required | Auto | A dialog.transfer event MUST contain a connecttimeout property, which contains a string in CSS2 format that specifies the maximum amount of time to spend while attempting to connect the call. | 4 | 0 | 0 |
422 | [7.3.5] | Required | Auto | A dialog.transfer event MAY contain an aai property, if specified by the dialog. This property contains a string of application-to-application information. | 4 | 0 | 0 |
838 | [7.3.5] | Required | Auto | The aai property of dialog.transfer, if specified by the dialog, MUST be passed to the destination party when establishing the transfer. | 4 | 0 | 0 |
1197 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
425 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
426 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is bridged (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
427 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MAY contain a connectionid property, if the dialog is bridged to a conference the value MUST be undefined. | 3 | 0 | 1 |
428 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is bridged (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 3 | 0 | 1 |
429 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MAY contain a conferenceid property, if the dialog is bridged to a connection the value MUST be undefined. | 4 | 0 | 0 |
430 | [7.3.6] | Required | Auto | A dialog.terminatetransfer event MUST contain a reason property, which contains a string value specifying a description of the reason the dialog wants the transfer to be terminated. Content of this field is platform-specific. | 4 | 0 | 0 |
1199 | [7.3.7] | Required | Manual | A error.dialog event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
1201 | [7.3.7] | Required | Manual | When error.dialog is processed, the platform MUST implicitly tear down any existing bridges to the dialog and send a conference.unjoined to the CCXML document once the media paths have been freed. | 4 | 0 | 0 |
885 | [7.3.7] | Required | Manual | The error.dialog event MUST be thrown when there was an unspecified error with the dialog (for example the dialog server crashed). | 4 | 0 | 0 |
887 | [7.3.7] | Required | Manual | A error.dialog event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
888 | [7.3.7] | Required | Manual | A error.dialog event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection was connected to (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
889 | [7.3.7] | Required | Manual | A error.dialog event MAY contain a connectionid property, if the dialog was being connected to a conference the value MUST be undefined. | 4 | 0 | 0 |
890 | [7.3.7] | Required | Manual | A error.dialog event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection was connected to (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
891 | [7.3.7] | Required | Manual | A error.dialog event MAY contain a conferenceid property, if the dialog was being connected to a connection the value MUST be undefined. | 4 | 0 | 0 |
892 | [7.3.7] | Required | Manual | A error.dialog event MUST contain a reason property, which contains a description of the reason the dialog had an error. Content of this field is platform-specific. | 4 | 0 | 0 |
1203 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
431 | [7.3.8] | Required | Auto | The error.dialog.notstarted event MUST be thrown when the processing of a <dialogstart> element fails because the dialog cannot be started for some reason. | 4 | 0 | 0 |
433 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
434 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection could not be started (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
435 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MAY contain a connectionid property, if the dialog was being connected to a conference the value MUST be undefined. | 4 | 0 | 0 |
436 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection could not be started (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
437 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MAY contain a conferenceid property, if the dialog was being connected to a connection the value MUST be undefined. | 4 | 0 | 0 |
438 | [7.3.8] | Required | Auto | A error.dialog.notstarted event MUST contain a reason property, which contains a description of the reason the dialog could not be started. Content of this field is platform-specific. | 4 | 0 | 0 |
1204 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
447 | [7.3.10] | Required | Auto | The dialog.user.* (where * is the name of the user defined event) event MUST be thrown when a dialog sends a user/application-defined event. | 4 | 0 | 0 |
449 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
450 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is bridged (usually the connectionid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
451 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MAY contain a connectionid property, if the dialog is bridged to a conference the value MUST be undefined. | 4 | 0 | 0 |
452 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is bridged (usually the conferenceid that was specified in the <dialogstart> or <dialogprepare>). | 4 | 0 | 0 |
453 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MAY contain a conferenceid property, if the dialog is bridged to a connection the value MUST be undefined. | 4 | 0 | 0 |
455 | [7.3.10] | Required | Auto | A dialog.user.* (where * is the name of the user defined event) event MAY contain a values property of type ECMAScript object to return values from the dialog for the user event. | 4 | 0 | 0 |
1206 | [7.3.11] | Required | Auto | A dialog.prepared event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
456 | [7.3.11] | Required | Auto | The dialog.prepared event MUST be thrown when a dialog has been successfully prepared following the execution of a <dialogprepare> element. | 4 | 0 | 0 |
458 | [7.3.11] | Required | Auto | A dialog.prepared event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
459 | [7.3.11] | Required | Auto | A dialog.prepared event MAY contain a connectionid property set to the identifier of the connection to which the dialog connection is prepared (usually the connectionid that was specified in the <dialogprepare>). | 4 | 0 | 0 |
460 | [7.3.11] | Required | Auto | A dialog.prepared event MAY contain a connectionid property, if the dialog was prepared without a connection, the value MUST be undefined. | 4 | 0 | 0 |
461 | [7.3.11] | Required | Auto | A dialog.prepared event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection is prepared(usually the conferenceid that was specified in the <dialogprepare>). | 4 | 0 | 0 |
462 | [7.3.11] | Required | Auto | A dialog.prepared event MAY contain a conferenceid property, if the dialog was prepared without a conference, the value MUST be undefined. | 4 | 0 | 0 |
1208 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MUST contain a dialog property set to an ECMAScript object reference to the dialog object identified by the dialogid property of this event. | 4 | 0 | 0 |
463 | [7.3.12] | Required | Auto | The error.dialog.notprepared event MUST be thrown when the processing of a <dialogprepare> element fails. | 4 | 0 | 0 |
465 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MUST contain a dialogid property set to the ID of the dialog. | 4 | 0 | 0 |
466 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MAY contain a connectionid property set to identifier of the connection to which the dialog connection was attempting to be prepared (usually the connectionid that was specified in the <dialogprepare>). | 4 | 0 | 0 |
467 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MAY contain a connectionid property, if the dialog was prepared without a connection, the value MUST be undefined. | 4 | 0 | 0 |
468 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MAY contain a conferenceid property set to the identifier of the conference to which the dialog connection was attempting to be prepared (usually the conferenceid that was specified in the <dialogprepare>). | 4 | 0 | 0 |
469 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MAY contain a conferenceid property, if the dialog was prepared without a conference, the value MUST be undefined. | 4 | 0 | 0 |
470 | [7.3.12] | Required | Auto | A error.dialog.notprepared event MUST contain a reason property, contains a description of the reason the dialog could not be prepared. Content of this field is platform-specific. | 4 | 0 | 0 |
1297 | [7.4] | Required | Auto | A Dialog object MUST contain a objecttype property. It contains the type of this object which must be 'dialog'. | 4 | 0 | 0 |
473 | [7.4] | Required | Auto | An instance of the Dialog object is associated with each dialog created by <dialogstart> or <dialogprepare> and referenced in the session.dialogs associative array. | 4 | 0 | 0 |
474 | [7.4] | Required | Auto | A Dialog object MUST contain a dialogid property. It contains the ECMAScript string value of the Dialog identifier, which uniquely identifies each instance of the Dialog class. | 4 | 0 | 0 |
480 | [7.4] | Required | Auto | A Dialog object MUST contain a type property. It contains an ECMAScript string value that specifies the MIME type of the document that loaded the dialog. | 4 | 0 | 0 |
481 | [7.4] | Required | Auto | A Dialog object MUST contain a src property. It is an ECMAScript string value identifying the initial URI of the dialog document. | 4 | 0 | 0 |
1167 | [8.2.1] | Required | Auto | The session scope is opened by CCXML implementation before interpretation of a new session starts and exists until the session exits. | 4 | 0 | 0 |
1168 | [8.2.1] | Required | Auto | The application scope is opened by CCXML implementation before interpretation of a new session starts and exists until the session exits. | 4 | 0 | 0 |
1169 | [8.2.1] | Required | Auto | Unlike in the session scope, variables in the application scope can be modified by CCXML programs. | 4 | 0 | 0 |
1170 | [8.2.1] | Required | Auto | Variables defined within the application scope are visible to all documents within the CCXML application. | 4 | 0 | 0 |
1171 | [8.2.1] | Required | Auto | This ccxml scope is opened by CCXML implementation for each CCXML document when it is loaded and exists while the document is loaded. | 4 | 0 | 0 |
1172 | [8.2.1] | Required | Auto | Variables in the ccxml scope can also be created without an explicit declaration by assigning a value to a property of the ccxml object (ccxml.varname = value). | 4 | 0 | 0 |
1173 | [8.2.1] | Required | Auto | Variables in the transition scope can also be created without an explicit declaration by assigning a value to a property of the transition object (transition.varname = value). | 4 | 0 | 0 |
729 | [8.2.1] | Required | Auto | It is illegal to make an assignment to a variable that has not been explicitly declared using <var> or a var statement within a <script>. Attempting to assign to an undeclared variable causes an error.semantic event to be thrown | 4 | 0 | 0 |
730 | [8.2.1] | Required | Auto | An attempt to declare ECMAScript object properties such as "obj.prop1" results in an error.semantic event being thrown. | 4 | 0 | 0 |
732 | [8.2.1] | Required | Auto | A local variable declared in a <transition> is only available within that <transition> element. | 4 | 0 | 0 |
733 | [8.2.1] | Required | Auto | The implementation MUST define four scopes - session, application, ccxml and transition. | 4 | 0 | 0 |
735 | [8.2.1] | Required | Auto | Variables defined in the session scope are provided by CCXML implementation and are read-only. Any attempt to modify the session object or it's properties by the application MUST result in an error.semantic event to be thrown by the platform. | 3 | 0 | 1 |
736 | [8.2.1] | Required | Auto | Variables within the application scope cannot be explicitly declared using <var> element or var statement within a <script>. They can be created only by assigning a value to a property of the application object (application.varname = value). | 4 | 0 | 0 |
737 | [8.2.1] | Required | Auto | Variables defined in the ccxml scope are declared with <var> and <script> elements that are children of <ccxml>. | 4 | 0 | 0 |
738 | [8.2.1] | Required | Auto | Variables defined in the ccxml scope are initialized in document order when the document is loaded. They exist while the document is loaded. | 4 | 0 | 0 |
739 | [8.2.1] | Required | Auto | Variables defined in the ccxml scope are visible only within that document in which they are declared. | 4 | 0 | 0 |
740 | [8.2.1] | Required | Auto | Each <transition> element has a scope that exists while the implementation is processing the executable content within that <transition>, and which is visible to the elements of that <transition>. | 4 | 0 | 0 |
741 | [8.2.1] | Required | Auto | Variables with transition scope are declared by <var> and <script> child elements of <transition>. | 4 | 0 | 0 |
742 | [8.2.1] | Required | Auto | The child <var> and <script> elements of <transition> are initialized in document order when the executable content is executed. | 4 | 0 | 0 |
743 | [8.2.1] | Required | Auto | The implementation MUST instantiate a variable within the scope of the closest containing scope element. | 4 | 0 | 0 |
744 | [8.2.1] | Required | Auto | The fully-qualified name of a variable is the name of the variable's scope object prepended with a dot to the name of the variable. | 4 | 0 | 0 |
745 | [8.2.1] | Required | Auto | The implementation MUST allow reference to variables by their fully qualified names. | 4 | 0 | 0 |
746 | [8.2.1] | Required | Auto | The implementation MUST allow reference to variables without requiring use of their fully qualified names. In the case of like-named variables declared in different scopes, the implementation MUST reference the variable in the closest containing scope, unless the fully-qualified variable name is used. | 4 | 0 | 0 |
747 | [8.2.1] | Required | Auto | The implementation MUST resolve variables by searching the enclosing transition scope first (if applicable) followed by the ccxml scope, the application scope and then the session scope, unless the variable reference is qualified with a scope prefix. | 4 | 0 | 0 |
748 | [8.2.1] | Required | Auto | If the variable includes a scope prefix, the implementation MUST resolve the variable by searching the named scope. | 4 | 0 | 0 |
749 | [8.2.1] | Required | Auto | If a variable is declared more than once, the implementation MUST evaluate the expr attribute of each subsequent declaration, and assign the result to the variable declared by the first <var>. | 4 | 0 | 0 |
750 | [8.2.1] | Required | Auto | The implementation MUST evaluate the ECMAScript expression contained in the expr attribute of <assign>, and assign the results to the variable referenced in the name attribute. | 4 | 0 | 0 |
752 | [8.2.1] | Required | Auto | A <var> element must contain a name attribute. | 4 | 0 | 0 |
753 | [8.2.1] | Required | Auto | A <var> element may contain an expr attribute. If the expr attribute is provided, the content of the expr attribute becomes the initial value of the new variable. | 4 | 0 | 0 |
754 | [8.2.1] | Required | Auto | If an expr attribute is not provided on <var>, the new variable is initialized to ECMAScript undefined. | 4 | 0 | 0 |
755 | [8.2.1] | Required | Auto | An <assign> element must provide a name attribute. | 4 | 0 | 0 |
756 | [8.2.1] | Required | Auto | An <assign> element must provide a expr attribute. | 4 | 0 | 0 |
1174 | [8.2.2] | Required | Auto | If the script cannot be fetched the implementation must throw an error.fetch event. | 4 | 0 | 0 |
1271 | [8.2.2] | Required | Auto | If a <createccxml> element is used to fetch a document containing a <script> where both the src and fetchid attributes are present, the implementation must throw an error.createccxml event. | 4 | 0 | 0 |
757 | [8.2.2] | Required | Auto | <script> encloses computations written in the ECMAScript Compact Profile scripting language | 4 | 0 | 0 |
758 | [8.2.2] | Required | Auto | An implementation MUST support the ECMAScript Compact Profile | 4 | 0 | 0 |
759 | [8.2.2] | Optional | Auto | An implementation MAY support the full ECMA-262 ECMAScript specification. | 4 | 0 | 0 |
760 | [8.2.2] | Required | Auto | An implementation MUST support <script> within the <ccxml> element | 4 | 0 | 0 |
761 | [8.2.2] | Required | Auto | An implementation MUST support <script> within executable content. <transition> and <if> contain executable content. | 4 | 0 | 0 |
762 | [8.2.2] | Required | Auto | The implementation MUST evaluate script in a <ccxml> immediately after the document is loaded, along with any <var> and <assign> elements, in document order. | 4 | 0 | 0 |
763 | [8.2.2] | Required | Auto | When used as a child of the <ccxml> element, <script> cannot be used to execute dynamically fetched content obtained using <fetch>. | 4 | 0 | 0 |
764 | [8.2.2] | Required | Auto | The implementation MUST evaluate <script> in executable content as it is processed. | 4 | 0 | 0 |
765 | [8.2.2] | Required | Auto | The ECMAScript contained within the <script> can declare variables with the ECMAScript var statement. Variables declared in this manner are declared in the scope of the closest containing scope CCXML element. They are known from the point of declaration to the end of the containing scope. | 4 | 0 | 0 |
766 | [8.2.2] | Required | Auto | The implementation MUST allow reference to these variables from CCXML and from ECMAScript, using either the fully-qualified variable name, or the declared name | 4 | 0 | 0 |
767 | [8.2.2] | Required | Auto | If the implementation is unable to run the script referenced it MUST throw an error.semantic event. | 4 | 0 | 0 |
768 | [8.2.2] | Required | Auto | A <script> element may contain a src attribute that contains the URI which references a resource which is the script content, and which will be resolved when the CCXML document is compiled. | 4 | 0 | 0 |
769 | [8.2.2] | Required | Auto | A <script> element may contain a fetchid atribute that contains an ECMAScript expression which returns the fetch identifier of a completed fetch request, acquired either in a fetch with the fetchid attribute, or from the fetchid attribute of a fetch.done event. | 4 | 0 | 0 |
770 | [8.2.2] | Required | Auto | If the fetch identifier is invalid, has not completed, or the fetched content is not valid ECMAScript, an error.semantic event is thrown. | 4 | 0 | 0 |
772 | [8.2.2] | Required | Auto | If a <fetch> element is used to fetch a document containing a <script> where both the src and fetchid attributes are present, the implementation must throw an error.fetch event. | 4 | 0 | 0 |
773 | [8.2.2] | Required | Auto | A <script> element may contain a timeout attribute to be used when the src attribute is specified. The script fetch will fail if not completed at the end of this interval. A failed fetch will return the error.fetch event. | 4 | 0 | 0 |
774 | [8.2.2] | Required | Auto | A <script> element may contain a maxage attribute to be used when the src attribute is specified. This indicates that the document is willing to use content whose age is no greater than the specified time in seconds | 4 | 0 | 0 |
775 | [8.2.2] | Required | Auto | The document is not willing to use stale script content, unless maxstale is also provided. | 4 | 0 | 0 |
777 | [8.2.2] | Required | Auto | A <script> element may contain a charset attribute set the character encoding type of the script. UTF-8 and UTF-16 encodings of ISO/IEC 10646 must be supported. | 4 | 0 | 0 |
778 | [8.2.2] | Required | Auto | If an enctype attribute is not provided, UTF-8 is used as the default value. | 4 | 0 | 0 |
1031 | [8.3] | Required | Auto | Variables defined in the session scope are subject to the parent scope chain delegation model but do not have a parent scope defined. | 4 | 0 | 0 |
1033 | [8.3] | Required | Auto | session.ioprocessors is an associative Array which contains a list of external event I/O access URIs which are available to the current session. The array is associative and each key in the array is the type of the event I/O processor. | 4 | 0 | 0 |
1034 | [8.3] | Required | Auto | session.values is an associative array which contains a list of session parameters passed on session creation | 4 | 0 | 0 |
1175 | [8.3] | Required | Auto | If the interpreter fetched multiple documents as a result of one or more HTTP redirects (e.g. 302), the value of session.uri is set to the URI of the final target. | 4 | 0 | 0 |
1176 | [8.3] | Required | Auto | session.uri includes the query string used when fetching the document, if one is present. | 4 | 0 | 0 |
779 | [8.3] | Required | Auto | The session variables are defined by the CCXML implementation when the CCXML session is created | 4 | 0 | 0 |
780 | [8.3] | Required | Auto | Session variables are read-only to the running script and cannot be modified by the CCXML program. | 3 | 0 | 1 |
781 | [8.3] | Required | Auto | New session variables cannot be declared by CCXML programs. | 4 | 0 | 0 |
782 | [8.3] | Required | Auto | Session variable values visible to a CCXML application reflect the state of the executing CCXML session, current as of the occurrence of the event being processed. Regardless of when session variables are updated to reflect changes, the CCXML implementation is REQUIRED to provide the correct values when accessed by a CCXML program. | 4 | 0 | 0 |
783 | [8.3] | Required | Auto | session.startupmode indicates the startup mode that the script was started as. | 4 | 0 | 0 |
784 | [8.3] | Required | Auto | For a new incoming call, session.startupmode will be set to 'newcall' | 4 | 0 | 0 |
786 | [8.3] | Required | Auto | For a session that was started due to a <createccxml> request, session.startupmode will be set to 'createccxml' | 4 | 0 | 0 |
787 | [8.3] | Required | Auto | session.id is a globally unique string that indicates the session identifier of the executing CCXML session. | 4 | 0 | 0 |
788 | [8.3] | Required | Auto | session.uri is a URI that was used when creating the current CCXML session. | 4 | 0 | 0 |
789 | [8.3] | Required | Auto | session.parentid is a string that indicates the session identifier of the parent of the CCXML session that created this session. | 4 | 0 | 0 |
790 | [8.3] | Required | Auto | In the case the current session has no parent, the value of session.parentid will be ECMAScript undefined. | 4 | 0 | 0 |
791 | [8.3] | Required | Auto | session.connections is an array which contains a list of the Connection objects that the session is currently using. The array is associative and each key in the array is the connection identifier for the Connection. | 4 | 0 | 0 |
792 | [8.3] | Required | Auto | session.conferences is an associative array which contains a list of Conference objects with which the session is attached using <createconference> | 4 | 0 | 0 |
793 | [8.3] | Required | Auto | session.dialogs is an associative Array which contains a list of the Dialog objects that the session is currently using. The array is associative and each key in the array is the dialog identifier for the Dialog. | 4 | 0 | 0 |
1035 | [8.4] | Required | Auto | Application variables that are not properties, e.g. objects, must be declared | 4 | 0 | 0 |
1177 | [8.4] | Required | Auto | CCXML provides application variables which persist across the CCXML application | 4 | 0 | 0 |
795 | [8.4] | Required | Auto | Application variables can be modified by CCXML programs. | 4 | 0 | 0 |
796 | [8.4] | Required | Auto | Application variables that are properties of the application object are not explicitly declared. | 4 | 0 | 0 |
797 | [8.4] | Required | Auto | By default, application variables have the value ECMAScript undefined. | 4 | 0 | 0 |
798 | [8.4] | Required | Auto | Variables in the application scope are subject to the parent scope chain delegation model and have session as their parent scope. | 4 | 0 | 0 |
799 | [8.4] | Required | Auto | The application object is initialized by the CCXML implementation | 4 | 0 | 0 |
800 | [8.4] | Required | Auto | Application variables are visible within all documents which form the CCXML application. | 4 | 0 | 0 |
1218 | [9.1] | Optional | Auto | Platforms SHOULD reject standard events that do not contain all mandatory properties defined by the specification for that event. | 4 | 0 | 0 |
1219 | [9.1] | Optional | Auto | When rejecting a standard event sent using <send> or external event I/O processors, platforms SHOULD notify the sender of the rejection. | 4 | 0 | 0 |
1220 | [9.1] | Required | Auto | Events are queued on a first-in, first-out (FIFO) basis, except where specific exceptions are noted in the specification for certain events. | 4 | 0 | 0 |
1221 | [9.1] | Required | Auto | Events sent using <send> which specify a delay are not delivered to the target queue until the specified delay has elapsed. | 4 | 0 | 0 |
1223 | [9.1] | Required | Auto | During the processing of an event by the EHIA, the state of any ECMAScript objects exposed by a platform, such as the Connection object, MUST reflect the state of the CCXML session immediately following the occurrence of the event. | 4 | 0 | 0 |
1224 | [9.1] | Required | Auto | It is REQUIRED that the ECMAScript context for the session is updated to reflect state changes caused by an event prior to the selection of a matching <transition>. | 4 | 0 | 0 |
1225 | [9.1] | Required | Auto | An <eventprocessor> MAY declare a state variable attribute that corresponds to a variable declared at CCXML scope. | 4 | 0 | 0 |
493 | [9.1] | Required | Auto | Received CCXML events named "ccxml.kill" or with a prefix of "ccxml.kill." are placed at the head of the event queue | 4 | 0 | 0 |
494 | [9.1] | Required | Auto | Received CCXML events named with a prefix of "error." are placed at the head of the event queue, but behind any events named "ccxml.kill" or prefixed with "ccxml.kill." or "error.". | 4 | 0 | 0 |
495 | [9.1] | Required | Auto | Received CCXML events that are not named "ccxml.kill" or prefixed by "ccxml.kill." or "error." are placed at the tail of the event queue | 4 | 0 | 0 |
497 | [9.1] | Required | Auto | The EHIA removes the event at the front of the event queue of a CCXML session and selects the <transition> (if any) that accepts the type of the event, accepts the current value of the ECMAScript state variable, has a satisfied conditional expression, and appears first in the <eventprocessor> document order. | 4 | 0 | 0 |
500 | [9.1] | Required | Auto | If the EHIA selects a matching <transition> for an event, an object representing the event is created at transition scope, and the child elements of the <transition> are executed in document order. | 4 | 0 | 0 |
501 | [9.1] | Required | Auto | If the EHIA finds no matching <transition>, and the event is not named "ccxml.kill" and not prefixed with either "ccxml.kill." or "error.", then the event is simply discarded. | 4 | 0 | 0 |
502 | [9.1] | Required | Auto | If the EHIA finds no matching <transition>, and the event is named "ccxml.kill" or is prefixed with "ccxml.kill." or with "error.", then the CCXML session processing the event is terminated. | 4 | 0 | 0 |
505 | [9.2.1] | Required | Auto | A valid CCXML document MUST only have a single <eventprocessor> | 4 | 0 | 0 |
507 | [9.2.1] | Required | Auto | If an <eventprocessor> defines a state variable, then the named state variable MUST be declared in the ccxml scope using a <var> or <script> | 4 | 0 | 0 |
508 | [9.2.1] | Required | Auto | An <eventprocessor> MUST contain only <transition> elements | 4 | 0 | 0 |
1226 | [9.2.2] | Required | Auto | The contents of the received event object MUST be made available via the transition scoped ECMAScript variable named "event$" | 4 | 0 | 0 |
1227 | [9.2.2] | Required | Auto | The event$ variable is accessible from the <transition> cond attribute to allow CCXML Applications to conditionally select <transition>'s based on the contents of the event. | 4 | 0 | 0 |
1246 | [9.2.2] | Required | Auto | If a <transition> specifies a state attribute but its parent <eventprocessor> does not contain a statevariable attribute, the interpreter MUST fail to load the document. | 4 | 0 | 0 |
509 | [9.2.2] | Required | Auto | In order to be selected, a <transition> MUST satisfy criteria on its state, cond, and name attributes. | 4 | 0 | 0 |
510 | [9.2.2] | Required | Auto | A <transition> element MAY contain a state attribute that lists, separated by whitespace, the values of the <eventprocessor> state variable that are accepted | 4 | 0 | 0 |
511 | [9.2.2] | Required | Auto | The state attribute of a <transition> matches an event if the current value of the <eventprocessor> state variable is identical to one of the states listed in the state attribute, or if the state attribute is not present | 4 | 0 | 0 |
512 | [9.2.2] | Required | Auto | A <transition> element MAY contain an event attribute that specifies a pattern used to match an event's name | 4 | 0 | 0 |
513 | [9.2.2] | Required | Auto | The event attribute of a <transition> matches an event only if it matches the name of the event, or if the event attribute is not present. In matching the event attribute to the event name, the character '*' is a wild-card and matches zero or more characters of the event's name. | 4 | 0 | 0 |
514 | [9.2.2] | Required | Auto | A <transition> element MAY contain a cond attribute that specifies an ECMAScript Boolean expression. | 4 | 0 | 0 |
515 | [9.2.2] | Required | Auto | The cond attribute of a <transition> matches an event only if it evaluates to true, or if it is not present | 4 | 0 | 0 |
1228 | [9.2.3] | Required | Auto | If the targettype attribute on <send> is not supported, the platform MUST throw an error.send.targettypeinvalid event. | 4 | 0 | 0 |
1230 | [9.2.3] | Required | Auto | Platforms MUST support a targettype attribute with a value of basichttp to target the Basic HTTP Event I/O Processor specified in App.K. | 4 | 0 | 0 |
1231 | [9.2.3] | Required | Auto | When <send> is used with name and namelist, and the targettype is ccxml, variables specified in namelist, which may themselves be ECMAScript objects, are added as properties of the event object. | 4 | 0 | 0 |
1232 | [9.2.3] | Required | Auto | When <send> is used with the name and namelist attributes, and the targettype is "basichttp", each variable in the namelist is sent to the web server as defined in App.K | 4 | 0 | 0 |
1247 | [9.2.3] | Required | Auto | The <send> element MAY contain a name attribute that indicates the type of event being generated, consisting of alphanumeric characters, with the exception of the first character which MUST NOT be a dot or a digit. | 4 | 0 | 0 |
1248 | [9.2.3] | Required | Auto | The <send> element MAY contain a namelist attribute, which is a list of zero or more whitespace separated CCXML variable names to be included with the event. | 4 | 0 | 0 |
1249 | [9.2.3] | Required | Auto | Events generated by <send> MUST have their the eventid attribute set to the identifier generated and returned via sendid. | 4 | 0 | 0 |
1250 | [9.2.3] | Required | Auto | Events generated by <send> MUST have their eventsource attribute set to the session ID of the CCXML session performing the <send>. | 4 | 0 | 0 |
1251 | [9.2.3] | Required | Auto | Events generated by <send> MUST have their eventsourcetype attribute set to the string 'ccxml'. | 4 | 0 | 0 |
519 | [9.2.3] | Required | Auto | The <send> element MUST contain a target attribute that specifies the unique identifier of the event target that the Event I/O processor must send the event to. | 4 | 0 | 0 |
520 | [9.2.3] | Required | Auto | If the value of the target attribute is not supported, invalid, or unreachable by the Event I/O processor, the implementation must throw an error.send.targetunavailable event. | 4 | 0 | 0 |
521 | [9.2.3] | Required | Auto | The <send> element MAY contain a targettype attribute that specifies the Event I/O processor to which the event must be sent. | 4 | 0 | 0 |
522 | [9.2.3] | Required | Auto | Platforms MUST support a targettype attribute with a value of ccxml to target the CCXML Session Event Processor. | 4 | 0 | 0 |
524 | [9.2.3] | Required | Auto | The <send> element MUST specify the content of the message to be sent using either the name attribute with an optional namelist attribute that is a space-separated namelist of ECMAScript variables to include, or through inline XML content. | 4 | 0 | 0 |
530 | [9.2.3] | Required | Auto | When a message is sent successfully to a target, a send.successful event MUST be thrown | 4 | 0 | 0 |
531 | [9.2.3] | Required | Auto | If the send request fails, an event signifying the error MUST be returned to the CCXML Session. | 4 | 0 | 0 |
532 | [9.2.3] | Required | Auto | The <send> element MAY contain a sendid attribute which provides a left hand side ECMAScript expression which must receive an internally generated unique string identifier that is associated with the event being sent | 4 | 0 | 0 |
533 | [9.2.3] | Required | Auto | The <send> element MAY contain a delay attribute that is an ECMAScript expression evaluating to a CSS2-formatted interval by which sending of the specified event will be delayed | 4 | 0 | 0 |
534 | [9.2.3] | Required | Auto | The queue of delayed events MUST be maintained locally and purged if the session issuing the request terminates before the event is sent. | 4 | 0 | 0 |
1253 | [9.2.4] | Required | Auto | If <move> is unsupported the CCXML platform MUST raise an error.move event. | 3 | 0 | 1 |
536 | [9.2.4] | Required | Auto | A <move> attempt MUST fail if the referenced event source does not exist, or is not owned by the session performing the <move> | 2 | 0 | 2 |
537 | [9.2.4] | Required | Auto | A <move> attempt MUST fail if the referenced event source is immovable | 2 | 0 | 2 |
539 | [9.2.4] | Required | Auto | A <move> attempt MUST fail if the target session does not exist or cannot accept the event source being moved | 2 | 0 | 2 |
540 | [9.2.4] | Required | Auto | If a <move> attempt fails, an error.move event MUST be generated | 2 | 0 | 2 |
541 | [9.2.4] | Required | Auto | If a <move> attempt succeeds, a move.successful event MUST be generated against the session that performed the <move> | 2 | 0 | 2 |
545 | [9.2.4] | Required | Auto | The <move> element MUST contain either an event attribute, or a source attribute, but not both, or else an error.fetch event will be thrown | 2 | 0 | 2 |
546 | [9.2.4] | Required | Auto | The <move> element MAY contain a source attribute that is an ECMAScript expression that returns a connection ID or a dialog ID identifying the event source to be moved to the target session | 2 | 0 | 2 |
549 | [9.2.4] | Required | Auto | The <move> element MUST contain a sessionid attribute that is an ECMAScript expression which identifies the session to which the event source must be moved | 2 | 0 | 2 |
1254 | [9.2.5] | Required | Auto | If <cancel> is successful, a cancel.successful event MUST be delivered to indicate that the cancelled event was not delivered | 4 | 0 | 0 |
550 | [9.2.5] | Required | Auto | The <cancel> element MUST contain a sendid attribute that is an ECMAScript expression evaluating to the event identifier of an event to be removed from the delayed event queue of the session performing the <cancel> | 4 | 0 | 0 |
551 | [9.2.5] | Required | Auto | If the delay on the referenced event has already expired and the event has been delivered, then the <cancel> request MUST fail and an error.notallowed event MUST be generated | 4 | 0 | 0 |
1255 | [9.3.1] | Required | Auto | An error.notallowed event MUST have a tagname property set to the ECMAScript string value of the name of the element that produced the error (ie accept, reject, etc). | 4 | 0 | 0 |
552 | [9.3.1] | Required | Auto | This error event is MUST be thrown when the execution of an element causes an invalid operation to be performed on a session and/or connection. | 4 | 0 | 0 |
554 | [9.3.1] | Required | Auto | An error.notallowed event MUST have a sessionid property set to the ID of the affected session | 4 | 0 | 0 |
556 | [9.3.1] | Required | Auto | An error.notallowed event MUST have a reason property that describes the reason the operation was denied | 4 | 0 | 0 |
557 | [9.3.2] | Required | Auto | An error.semantic MUST be thrown when there is a semantic error in a CCXML element | 4 | 0 | 0 |
559 | [9.3.2] | Required | Auto | An error.semantic event MUST have a reason property set to the ECMAScript string value of the printable error message associated with this error | 4 | 0 | 0 |
560 | [9.3.2] | Required | Auto | An error.semantic event MUST have a tagname property set to the name of the element that produced the error | 4 | 0 | 0 |
561 | [9.3.2] | Required | Auto | An error.semantic event MAY have an attributelist property that is an object whose properties are the names of the attributes of the element in error. The value of each such property MAY be set to the corresponding string value of the attribute | 4 | 0 | 0 |
562 | [9.3.3] | Required | Auto | An error.send.targetunavailable event MUST be thrown when CCXML could not send the event to the target listed in <send> due to it currently being unavailable | 4 | 0 | 0 |
564 | [9.3.3] | Required | Auto | An error.send.targetunavailable event MUST have a sendid property that is the ID of the affected event | 4 | 0 | 0 |
565 | [9.3.3] | Required | Auto | An error.send.targetunavailable event MUST have a reason property that describes the reason the operation was denied | 4 | 0 | 0 |
566 | [9.3.4] | Required | Auto | An error.send.targettypeinvalid event MUST be thrown when the targettype attribute specified in a <send> is not valid | 4 | 0 | 0 |
568 | [9.3.4] | Required | Auto | An error.send.targettypeinvalid event MUST have a sendid property that is the ID of the affected event | 4 | 0 | 0 |
569 | [9.3.4] | Required | Auto | An error.send.targettypeinvalid event MUST have a reason property that describes the reason the operation was denied | 4 | 0 | 0 |
570 | [9.3.5] | Required | Auto | An error.send.failed event MUST be thrown when a <send> could not be completed for a reason not covered by another error.send.* event. | 4 | 0 | 0 |
572 | [9.3.5] | Required | Auto | An error.send.failed event MUST have a sendid property that is the ID of the affected event | 4 | 0 | 0 |
573 | [9.3.5] | Required | Auto | An error.send.failed event MUST have a reason property that describes the reason the operation was denied | 4 | 0 | 0 |
574 | [9.3.6] | Required | Auto | An send.successful event MUST be thrown when an event is successfully delivered to the specified receiver | 4 | 0 | 0 |
576 | [9.3.6] | Required | Auto | An send.successful event MUST have a sendid property that is the ID of the sent event | 4 | 0 | 0 |
577 | [9.3.7] | Required | Auto | An move.successful event MUST be thrown when an event source is successfully moved to a CCXML session | 2 | 0 | 2 |
579 | [9.3.7] | Required | Auto | An move.successful event MUST have a sourceid that specifies the identifier of the event source that was moved | 2 | 0 | 2 |
580 | [9.3.8] | Required | Auto | An cancel.successful event MUST be thrown when the sending of an event has been successfully cancelled. | 4 | 0 | 0 |
582 | [9.3.8] | Required | Auto | An cancel.successful event MUST have a sendid property that is the ID of the cancelled event | 4 | 0 | 0 |
583 | [9.3.9] | Required | Auto | An error.move event MUST be thrown when a move request performed by a session fails to complete successfully | 2 | 0 | 2 |
585 | [9.3.9] | Required | Auto | An error.move event MUST have a sourceid property that is the ID of the event source that was the target of the <move> | 2 | 0 | 2 |
586 | [9.3.9] | Required | Auto | An error.move event MUST have a sessionid property that is the identifier of the CCXML session to which it was attempted to move the event source | 2 | 0 | 2 |
587 | [9.3.9] | Required | Auto | An error.move event MUST have a reason property that describes the reason the <move> request failed | 2 | 0 | 2 |
588 | [9.4.2] | Required | Auto | All events MUST contain a name attribute containing a string name of the event | 4 | 0 | 0 |
589 | [9.4.2] | Required | Auto | All events MUST contain an eventid attribute containing a unique identifier for the event | 4 | 0 | 0 |
590 | [9.4.2] | Required | Auto | If an event was sent using <send>, then the eventid attribute of the event MUST match the value returned via the sendid attribute of <send> (if specified) | 4 | 0 | 0 |
591 | [9.4.2] | Required | Auto | All events MUST contain an eventsource attribute containing a unique identifier for the event source | 4 | 0 | 0 |
592 | [9.4.2] | Required | Auto | All events MUST contain an eventsourcetype attribute containing the name of the Event I/O processor that sent the event | 4 | 0 | 0 |
594 | [9.4.5] | Required | Auto | All error events MUST have a reason property set to a printable error message associated with the error | 4 | 0 | 0 |
1256 | [9.5.1] | Required | Auto | Errors that occur in the loading/compilation of a CCXML page triggered by a running CCXML document using <createccxml> MUST generate an error.createccxml event. | 4 | 0 | 0 |
1257 | [9.5.1] | Required | Auto | Errors that occur in the loading/compilation of a CCXML page triggered by a running CCXML document using <fetch> MUST generate an error.fetch event. | 4 | 0 | 0 |
276 | [10.2] | Required | Auto | Each Connection has one input by which it receives a media stream from another Connection or Conference. | 4 | 0 | 0 |
277 | [10.2] | Required | Auto | Each Connection has one output media stream that can be directed to the inputs of multiple Connections and/or Conferences. | 4 | 0 | 0 |
283 | [10.2.2] | Required | Auto | An instance of the Connection Object is associated with each telephony event source. | 4 | 0 | 0 |
284 | [10.2.2] | Required | Auto | A Connection Object must have a connectionid property which is the ECMAScript string value of the Connection identifier, which uniquely identifies each instance of the Connection object. | 4 | 0 | 0 |
285 | [10.2.2] | Required | Auto | A Connection Object must have a state property which identifies the current state of the Connection instance | 4 | 0 | 0 |
1292 | [10.2.3] | Required | Auto | All Connection events MUST have a property named connectionid containing the ID of the Connection associated with the event. | 4 | 0 | 0 |
1295 | [10.2.3] | Required | Auto | All Connection events MUST have a property named connection containing a reference to the Connection object identified by the connectionid property of this event. | 4 | 0 | 0 |
1241 | [10.2.4] | Required | Auto | When an error.semantic event is generated by a connection element, this MUST NOT change the state of the associated Connection Object(s). | 4 | 0 | 0 |
1286 | [10.2.4] | Required | Auto | Execution of connection elements MUST NOT immediately change the state of any associated Connection Objects | 4 | 0 | 0 |
1086 | [10.2.5] | Required | Auto | The Connection Class MUST have the following READ-ONLY properties: states[0] = ALERTING, states[1] = PROGRESSING, states[2] = CONNECTED, states[3] = FAILED, states[4] = DISCONNECTED, states[5] = ERROR | 4 | 0 | 0 |
1087 | [10.2.5] | Required | Auto | The Connection Class MUST have the following READ-ONLY properties: connection.ALERTING = 0, connection.PROGRESSSING = 1, connection.CONNECTED = 2, connection.FAILED = 3, connection.DISCONNECTED = 4, connection.ERROR = 5 | 4 | 0 | 0 |
12 | [10.5.1.1] | Required | Auto | The execution of an <accept> MUST cause the underlying platform to signal the telephony system to connect the specified Connection to the CCXML platform. | 4 | 0 | 0 |
14 | [10.5.1.2] | Required | Auto | An <accept> may have a connectionid attribute | 4 | 0 | 0 |
15 | [10.5.1.2] | Required | Auto | An <accept> may have a hints attribute | 4 | 0 | 0 |
16 | [10.5.1.2] | Required | Auto | If the connectionid attribute is omitted, the interpreter must accept using the id indicated in the current event being processed. | 4 | 0 | 0 |
17 | [10.5.1.2] | Required | Auto | If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown | 4 | 0 | 0 |
19 | [10.5.2.1] | Required | Auto | When a CCXML document executes a <redirect> within the <transition> block, this MUST cause the underlying platform to signal the telephony system to send the call to a specified destination. | 4 | 0 | 0 |
975 | [10.5.2.1] | Required | Auto | If the call is currently joined, it MUST be unjoined before the redirect is performed and a conference.unjoined event MUST be generated. Note the platform is not required to generate the conference.unjoined or connection.redirected in any particular order. | 4 | 0 | 0 |
1088 | [10.5.2.2] | Required | Auto | If the platform is unable to redirect the call this MUST result in the generation of an error.redirect connection.redirect.failed event. | 4 | 0 | 0 |
21 | [10.5.2.2] | Required | Auto | A <redirect> may have a connectionid attribute which is an ECMAScript expression which returns a string that is the identifier of a Connection on which a call is active or on which an incoming call is being signaled. | 4 | 0 | 0 |
22 | [10.5.2.2] | Required | Auto | If the connectionid attribute is omitted, the interpreter must redirect using the id indicated in the current event being processed. | 3 | 0 | 1 |
23 | [10.5.2.2] | Required | Auto | If the connection id attribute value is invalid or there is no valid default value, an error.semantic event must be thrown. | 4 | 0 | 0 |
24 | [10.5.2.2] | Required | Auto | A <redirect> must have a dest attribute which is an ECMAScript expression which returns a string that is the address where the call should be redirected to. | 4 | 0 | 0 |
27 | [10.5.2.2] | Required | Auto | A <redirect> may have a reason attribute which is an ECMAScript expression which returns a string that is the reason the call is being redirected. | 4 | 0 | 0 |
28 | [10.5.2.2] | Required | Auto | A <redirect> may have a hints attribute which is the ECMAScript object returned contains information which may be used by the implementing platform or passed to the network redirecting the connection. This information may consist of protocol-specific parameters. | 4 | 0 | 0 |
31 | [10.5.3.1] | Required | Auto | The execution of an <reject> MUST cause the underlying platform to signal the telephony system to reject the incoming Connection from the platform. | 4 | 0 | 0 |
32 | [10.5.3.2] | Required | Auto | A <reject> may have a connectionid attribute which is an ECMAScript expression which returns a string that is the identifier of a Connection on which an incoming call is being signaled. | 4 | 0 | 0 |
33 | [10.5.3.2] | Required | Auto | If the connection id attribute value is invalid or there is no valid default value, an error.semantic event must be thrown. | 4 | 0 | 0 |
34 | [10.5.3.2] | Required | Auto | If the connection id attribute is omitted, the interpreter must reject using the id indicated in the current event being processed. | 4 | 0 | 0 |
35 | [10.5.3.2] | Required | Auto | A <reject> may have a reason attribute which is an ECMAScript expression which returns a string that is the reason the call is being rejected. | 4 | 0 | 0 |
36 | [10.5.3.2] | Required | Auto | A <reject> may have a hints attribute which is the ECMAScript object returned contains information which may be used by the implementing platform or passed to the network rejecting the connection. This information may consist of protocol-specific parameters. | 4 | 0 | 0 |
55 | [10.5.5.1] | Required | Auto | A <createconference> instructs the implementation to allocate a Conference Object | 4 | 0 | 0 |
56 | [10.5.5.1] | Required | Auto | The successful execution of <createconference> MUST result in the generation of a conference.created event. | 4 | 0 | 0 |
1112 | [10.5.5.2] | Required | Auto | A conference identifier must be globally unique, so that conferences can be uniquely addressed and possibly connected to. | 4 | 0 | 0 |
58 | [10.5.5.2] | Required | Auto | A <createconference> must have a conferenceid attribute which is an ECMAScript left hand side expression evaluating to a previously defined variable. The value of the attribute must receive the conference identifier. | 4 | 0 | 0 |
59 | [10.5.5.2] | Required | Auto | A <createconference> may have a confname attribute which is an ECMAScript expression which returns a string that is the name of the conference. The conference name corresponds to the conference identifier that will be returned in the variable specified in the conferenceid attribute. | 4 | 0 | 0 |
60 | [10.5.5.2] | Required | Auto | If the named conference does not exist, the platform must create a conference object as requested and return the value of the conference identifier to the variable specified in the conferenceid attribute. | 4 | 0 | 0 |
61 | [10.5.5.2] | Required | Auto | If a conference already exists the platform must return the conference identifier of the previously created conference. | 4 | 0 | 0 |
62 | [10.5.5.2] | Required | Auto | A <createconference> may have a reservedtalkers attribute which is an ECMAScript expression which returns the number of guaranteed speaker slots the conference mixer must reserve. | 4 | 0 | 0 |
63 | [10.5.5.2] | Required | Auto | If the conference already exists, then the reservedtalkers attribute must be ignored. | 4 | 0 | 0 |
65 | [10.5.5.2] | Required | Auto | A <createconference> may have a reservedlisteners attribute which is an ECMAScript expression which returns the number of guaranteed listener slots the conference mixer must reserve. | 4 | 0 | 0 |
66 | [10.5.5.2] | Required | Auto | If the conference already exists, then the reservedlisteners attribute must be ignored. | 4 | 0 | 0 |
68 | [10.5.5.2] | Required | Auto | A <createconference> may have a hints attribute which is the ECMAScript object returned contains information which may be used by the implementing platform when creating the conference. | 4 | 0 | 0 |
72 | [10.5.6.1] | Required | Auto | <destroyconference> destroys the conference if no other sessions are attached to it. | 4 | 0 | 0 |
75 | [10.5.6.1] | Required | Auto | The successful execution of <destroyconference> MUST result in the generation of a conference.destroyed event. | 4 | 0 | 0 |
994 | [10.5.6.1] | Required | Auto | Since other sessions may have created bridges to a conference using the conference's ID, but without performing a <createconference>, destroying a conference MAY affect the bridges established by other sessions. If any bridges are terminated in this fashion, a 'conference.unjoined' event MUST be posted to indicate to the session that its Connection is no longer bridged to the Conference. | 4 | 0 | 0 |
77 | [10.5.6.2] | Required | Auto | A <destroyconference> must have a conferenceid attribute. The conferenceid attribute returns a string that is the identifier of the conference that should be destroyed. | 4 | 0 | 0 |
79 | [10.5.6.2] | Required | Auto | If the conferenceid attribute value is invalid an error.semantic event must be thrown. | 4 | 0 | 0 |
80 | [10.5.6.2] | Required | Auto | <destroyconference> may have a hints attribute which is an ECMAScript object that contains information which may be used by the implementing platform when destroying the conference. | 4 | 0 | 0 |
1269 | [10.5.7.1] | Required | Auto | When joining a Connection or Dialog to a Conference, or when joining two Conferences, the 'conference.joined' event MUST NOT result in multiple 'conference.joined' events if the session performing the <join> is attached to the conference, nor if any session owns both conferences when two conferences are joined together. | 3 | 0 | 1 |
82 | [10.5.7.1] | Required | Auto | <join> instructs the implementation to bridge the connections specified using the id1 and id2 attributes in accordance with media options specified by the other attributes of <join>. | 4 | 0 | 0 |
83 | [10.5.7.1] | Required | Auto | The successful execution of <join> MUST result in the generation of a conference.joined event. | 4 | 0 | 0 |
85 | [10.5.7.1] | Required | Auto | When joining a Connection or Dialog to a Conference, or when joining two Conferences, the 'conference.joined' event MUST be posted to all sessions that are attached to the affected Conference(s). | 4 | 0 | 0 |
854 | [10.5.7.1] | Required | Auto | <join> instructs the implementation to bridge the conferences specified using the id1 and id2 attributes in accordance with media options specified by the other attributes of <join>. | 3 | 0 | 1 |
855 | [10.5.7.1] | Required | Auto | <join> instructs the implementation to bridge the dialogs specified using the id1 and id2 attributes in accordance with media options specified by the other attributes of <join>. | 3 | 0 | 1 |
962 | [10.5.7.1] | Required | Auto | Any Connections or Dialogs referenced by the 'id1' and 'id2' attributes of <join> MUST be owned by the session performing the <join>. | 4 | 0 | 0 |
101 | [10.5.7.2] | Required | Manual | The default value of entertone is "true". | 3 | 0 | 1 |
102 | [10.5.7.2] | Required | Manual | If the value of entertone is 'true' the default system beep will be played. | 3 | 0 | 1 |
103 | [10.5.7.2] | Required | Manual | If the value of entertone is 'false' no alerting sound being played at all. | 3 | 0 | 1 |
104 | [10.5.7.2] | Required | Manual | If the entertone value is a URL which points to a user-defined wav file, that wav file will be played instead of the default system beep. | 3 | 0 | 1 |
107 | [10.5.7.2] | Required | Manual | The default value of exittone is "true". | 3 | 0 | 1 |
108 | [10.5.7.2] | Required | Manual | If the value of exittone is 'true' the default system beep will be played. | 3 | 0 | 1 |
109 | [10.5.7.2] | Required | Manual | If the value of exittone is 'false' no alerting sound being played at all. | 3 | 0 | 1 |
110 | [10.5.7.2] | Required | Manual | If the exittone value is a URL which points to a user-defined wav file, that wav file will be played instead of the default system beep. | 3 | 0 | 1 |
126 | [10.5.7.2] | Required | Manual | The default value of dtmfclamp is "true". | 3 | 0 | 1 |
87 | [10.5.7.2] | Required | Auto | <join> must have an id1 attribute. | 4 | 0 | 0 |
88 | [10.5.7.2] | Required | Auto | id1 returns a string that is the identifier of a Connection, Dialog or Conference. | 4 | 0 | 0 |
89 | [10.5.7.2] | Required | Auto | If the id1 attribute value is invalid an error.semantic event will be thrown. | 4 | 0 | 0 |
90 | [10.5.7.2] | Required | Auto | <join> must have an id2 attribute. | 4 | 0 | 0 |
91 | [10.5.7.2] | Required | Auto | id2 returns a string that is the identifier of a Connection, Dialog or Conference. | 4 | 0 | 0 |
92 | [10.5.7.2] | Required | Auto | If the id2 attribute value is invalid an error.semantic event will be thrown. | 4 | 0 | 0 |
93 | [10.5.7.2] | Required | Auto | <join> may have a duplex attribute. This is an ECMAScript expression that returns a character string equal to "half" or "full" which defines the direction of the media flow between id1 resource and id2 resource. | 4 | 0 | 0 |
95 | [10.5.7.2] | Required | Auto | The default value of duplex is "full". | 4 | 0 | 0 |
98 | [10.5.7.2] | Required | Auto | <join> may have a hints attribute which is an ECMAScript object containing information which may be used by the implementing platform or passed to the network when the two specified Connections, Dialogs or Conferences (id1 and id2) are joined. | 4 | 0 | 0 |
136 | [10.5.8.1] | Required | Auto | <unjoin> will instruct the implementation to tear down the bridge between two connections/conferences/dialogs specified using the id1 and id2 attributes. | 4 | 0 | 0 |
137 | [10.5.8.1] | Required | Auto | The successful execution of<unjoin> MUST result in the generation of a conference.unjoined event. | 4 | 0 | 0 |
138 | [10.5.8.1] | Required | Auto | If for any reason the implementation is unable to terminate the bridge between the specified connections, or if no such bridge exists, it MUST fail with a error.conference.unjoin event. | 4 | 0 | 0 |
139 | [10.5.8.1] | Required | Auto | When 'id1', 'id2', or both reference to a Conference, the 'conference.unjoined' event MUST be posted to all session that are attached to the affected Conference(s). | 4 | 0 | 0 |
858 | [10.5.8.1] | Required | Auto | If for any reason the implementation is unable to terminate the bridge between the specified conferences, or if no such bridge exists, it MUST fail with a error.conference.unjoin event. | 3 | 0 | 1 |
859 | [10.5.8.1] | Required | Auto | If for any reason the implementation is unable to terminate the bridge between the specified dialogs, or if no such bridge exists, it MUST fail with a error.conference.unjoin event. | 3 | 0 | 1 |
977 | [10.5.8.1] | Required | Auto | Any Connections or Dialogs referenced by the 'id1' and 'id2' attributes of <unjoin> MUST be owned by the session performing the <unjoin>. | 4 | 0 | 0 |
978 | [10.5.8.1] | Required | Auto | If the implementation is unable to unjoin the objects an error.conference.unjoin MUST only be sent to the session that issued the <unjoin>. | 4 | 0 | 0 |
979 | [10.5.8.1] | Required | Auto | This MUST NOT result in multiple 'conference.unjoined' events if the session performing the <unjoin> is attached to the conference, or if any session owns both conferences when two conferences are being unjoined. | 3 | 0 | 1 |
141 | [10.5.8.2] | Required | Auto | <unjoin> must have an id1 attribute which is an ECMAScript expression which returns a string that is the identifier of a Connection, Dialog or Conference. | 4 | 0 | 0 |
143 | [10.5.8.2] | Required | Auto | If the id1 attribute value is invalid an error.semantic event must be thrown. | 4 | 0 | 0 |
144 | [10.5.8.2] | Required | Auto | <unjoin> must have an id2 attribute which is an ECMAScript expression which returns a string that is the identifier of a Connection, Dialog or Conference. | 4 | 0 | 0 |
146 | [10.5.8.2] | Required | Auto | If the id2 attribute value is invalid an error.semantic event must be thrown. | 4 | 0 | 0 |
147 | [10.5.8.2] | Required | Auto | <unjoin> may have a hints attribute which is an ECMAScript object that contains information which may be used by the implementing platform or passed to the network when the two specified Connections, Dialogs or Conferences (id1 and id2) are unjoined. | 4 | 0 | 0 |
1275 | [10.5.9.1] | Required | Auto | The platform is not required to generate the connection.disconnected /connection.failed or conference.unjoined in any particular order, unless an outbound call was abandoned in which case a connection.failed event MUST be generated | 4 | 0 | 0 |
148 | [10.5.9.1] | Required | Auto | During execution of <disconnect>, the underlying platform MUST send the appropriate protocol messages to perform the disconnect, and send an asynchronous event to the CCXML document when the disconnect operation completes. | 4 | 0 | 0 |
151 | [10.5.9.1] | Required | Auto | If the connection had been bridged when the <disconnect> request was made, the platform MUST tear down all bridges to the connection and send a conference.unjoined to the CCXML document once the media paths have been freed. | 4 | 0 | 0 |
963 | [10.5.9.1] | Required | Auto | A CCXML document may use <disconnect> to abandon an outbound connection created using <createcall> which has not yet entered the CONNECTED state. | 4 | 0 | 0 |
964 | [10.5.9.1] | Required | Auto | If <disconnect> is used to abandon an outbound call, it results in the generation of a 'connection.disconnected' event. | 4 | 0 | 0 |
152 | [10.5.9.2] | Required | Auto | <disconnect> may have a connectionid attribute. Connectionid returns a string that is the id of a call leg that should be disconnected. | 4 | 0 | 0 |
154 | [10.5.9.2] | Required | Auto | If the connectionid attribute is omitted, the interpreter will disconnect using the id indicated in the current event being processed. | 4 | 0 | 0 |
155 | [10.5.9.2] | Required | Auto | If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown. | 4 | 0 | 0 |
156 | [10.5.9.2] | Required | Auto | <disconnect> may have a reason attribute. Reason returns a string that is the reason the call is being disconnected. | 4 | 0 | 0 |
158 | [10.5.9.2] | Required | Auto | <disconnect> may have a hints attribute which is an ECMAScript object that contains information which may be used by the implementing platform or passed to the network disconnecting the connection. | 4 | 0 | 0 |
1115 | [10.6.3] | Required | Auto | The connection.progressing event is a transition to state PROGRESSING. | 4 | 0 | 0 |
182 | [10.6.3] | Required | Auto | This event MUST be emitted when the underlying telephony connection sends a notification of call progress while the Connection Object is in the PROGRESSING state. | 4 | 0 | 0 |
188 | [10.6.3] | Required | Auto | Subsequent connection.progressing events MAY be generated to support protocols which exchange multiple messages during the PROGRESSING state. | 3 | 0 | 1 |
1116 | [10.6.4] | Required | Auto | The connection.connected event is a transition to state CONNECTED. | 4 | 0 | 0 |
189 | [10.6.4] | Required | Auto | This event must be emitted when an incoming connection is accepted successfully, or as when an outgoing connection is answered. | 4 | 0 | 0 |
1107 | [10.6.5] | Required | Auto | If this is an off-platform disconnected event, the platform MUST implicitly tear down any existing bridges to the connection and send a conference.unjoined to the CCXML document once the media paths have been freed. | 4 | 0 | 0 |
1108 | [10.6.5] | Required | Auto | The connection.disconnected event must contain a trigger attribute that indicates which entity caused the disconnection to occur. | 4 | 0 | 0 |
1109 | [10.6.5] | Required | Auto | Valid values for the attribute trigger are 'network' for network-initiated disconnections, 'platform' for disconnections triggered by platform-based rules (such as a maximum connection duration), or 'application' for disconnections performed as a result of application actions (such as execution of a <disconnect>). | 4 | 0 | 0 |
1117 | [10.6.5] | Required | Auto | The connection.disconnected event is a transition to state DISCONNECTED. | 4 | 0 | 0 |
195 | [10.6.5] | Required | Auto | This event must be emitted when a connection is disconnected due to an action by the underlying network (e.g. the user hanging up), the CCXML platform, or the CCXML application. | 4 | 0 | 0 |
1118 | [10.6.6] | Required | Auto | The connection.redirected event is a transition to state DISCONNECTED. | 4 | 0 | 0 |
201 | [10.6.6] | Required | Auto | This connection.redirect event MUST be emitted to indicate a successful redirection of a connection. | 4 | 0 | 0 |
1120 | [10.6.8] | Required | Auto | The connection.failed event is a transition to state FAILED. | 4 | 0 | 0 |
214 | [10.6.8] | Required | Auto | The connection.failed event MUST be emitted when an incoming or outgoing call fails to complete its connection. | 4 | 0 | 0 |
218 | [10.6.8] | Required | Auto | The connection.failed event may contain a reason attribute which contains an error code if one is available | 4 | 0 | 0 |
1123 | [10.6.20] | Required | Auto | The error.connection.wrongstate event MUST be emitted when an application attempts a telephony operation that is not legal for the current state of the Connection Object. | 4 | 0 | 0 |
1131 | [10.6.20] | Required | Auto | The error.connection.wrongstate event MUST contain a tagname property which must be set to the ECMAScript string value of the name of the element that produced the error (ie accept, reject, etc). | 4 | 0 | 0 |
1154 | [10.6.22] | Required | Auto | The connection.redirect.failed event MUST be emitted when an error occurs when there is an error redirecting a connection using the <redirect> element. | 4 | 0 | 0 |
1157 | [10.6.22] | Required | Auto | The connection.redirect.failed event must contain a reason field which contains a description of the reason the redirect failed. | 4 | 0 | 0 |
841 | [App.D] | Optional | Auto | CCXML defines an additional read-only VoiceXML session variable, also populated when the dialog is bridged to a connection, called session.connection.ccxml | 4 | 0 | 0 |
842 | [App.D] | Optional | Auto | The session.connection.ccxml must have a read-only subproperty called sessionid which evaluates to the CCXML Session ID to which the VoiceXML dialog is currently associated. | 4 | 0 | 0 |
843 | [App.D] | Optional | Auto | The session.connection.ccxml must have a read-only subproperty called dialogid which evaluates to the CCXML Dialog ID for the current dialog. | 4 | 0 | 0 |
844 | [App.D] | Optional | Auto | The session.connection.ccxml must have a read-only subproperty called connectionid which evaluates to the CCXML Connection ID to which the VoiceXML dialog is currently bridged. This variable is undefined if the dialog is not bridged to a connection. | 4 | 0 | 0 |
845 | [App.D] | Optional | Auto | The session.connection.ccxml must have a read-only subproperty called conferenceid which evaluates to the CCXML Conference ID to which the VoiceXML dialog is currently bridged. This variable is undefined if the dialog is not bridged to a conference. | 4 | 0 | 0 |
847 | [App.D] | Optional | Auto | The session.connection.ccxml must have a read-only subproperty called values. This associative array contains the names and values of the parameters attribute supplied in a CCXML <dialogprepare> or <dialogstart> invocation. | 4 | 0 | 0 |
848 | [App.D] | Optional | Auto | When a CCXML application processes a <dialogterminate> it causes a "connection.disconnect.hangup" event to be thrown to the VoiceXML application. | 4 | 0 | 0 |
849 | [App.D] | Optional | Auto | When a VoiceXML application processes a VoiceXML <exit> it will cause the VoiceXML application to exit and return the contents of the namelist attribute to the CCXML application in the "dialog.exit" event. | 4 | 0 | 0 |
850 | [App.D] | Optional | Auto | When the VoiceXML application processes a <disconnect> element it causes a "dialog.disconnect" event to be thrown in the CCXML application. It is then up to the CCXML application to disconnect the call and send back a "connection.disconnect.hangup" event by using the <dialogterminate> element. | 4 | 0 | 0 |
1067 | [App.L] | Optional | Manual | Implementation MUST support HTTP Post | 4 | 0 | 0 |
1069 | [App.L] | Optional | Manual | The http reserved parameter "uri" specifies the URI of the CCXML document to load. This parameter is required | 4 | 0 | 0 |
1070 | [App.L] | Optional | Manual | The http reserved parameter "eventsource" specifies a URI to which events may be sent from the created session using, for example, the "basichttp" event processor. This parameter is optional. | 4 | 0 | 0 |
1071 | [App.L] | Optional | Manual | Other parameters provided in the HTTP request are treated as the event payload. Single parameter values MUST be supported | 4 | 0 | 0 |
1074 | [App.L] | Optional | Manual | In the created session, session.startupmode MUST be set to "external" | 4 | 0 | 0 |
1075 | [App.L] | Optional | Manual | In the created session, session.uri MUST be set to the value of the uri parameter | 4 | 0 | 0 |
1076 | [App.L] | Optional | Manual | In the created session, session.values object MUST be defined | 4 | 0 | 0 |
1077 | [App.L] | Optional | Manual | In the created session, session.values.type MUST be set to the value "createsession" | 4 | 0 | 0 |
1078 | [App.L] | Optional | Manual | In the created session, session.values.eventsource MUST be set to the value of the "eventsource" parameter | 4 | 0 | 0 |
1079 | [App.L] | Optional | Manual | In the created session, Other payload parameters are exposed as properties of session.values (complex parameter names require appropriate initialization of sub-objects). | 4 | 0 | 0 |
1080 | [App.L] | Optional | Manual | In the created session, to avoid conflict with the "type" and "eventsource" property of session.values object, payload parameters with the name "type" and "eventsource" are ignored. | 4 | 0 | 0 |
1260 | [App.L] | Optional | Manual | The reserved http parameter 'method' which is equivalent to <createccxml>'s 'method' attribute, used to set the HTTP method applied in the fetch of the specified CCXML document. Allowed values are "get" or "post" (case-insensitive). | 4 | 0 | 0 |
1261 | [App.L] | Optional | Manual | the http reserved parameter 'method' if missing must default to 'get'. | 4 | 0 | 0 |
This appendix describes a framework for authoring CCXML tests. The framework abstracts the markup used to define interactions with the user, allowing vendors to use their own test infrastructure by applying an XSLT transformation to the test source. Modifications to the test infrastructure should require a change to the XSLT template only followed by re-transformation of the test source.
The appendix is divided into the following sections:
The test API described in this document uses the
complete schema specified in the CCXML 1.0 specification with the addition of a
set elements in their own namespace "http://www.w3.org/2005/ccxml-conformance
" that greatly
simplify the process of authoring tests and abstract the implementation details
of the testing infrastructure. The elements are divided into the following categories:
These elements are used to inizialize the test environment.
docsetup
<ccxml>
and is used to inizialize the test environment
making available the ECMA script variables that represent:
current_state | Event processor state variable. It is initialized to init . |
---|---|
TEST_CREATECALL_DEST_NOANSWER | Outcall destination that does not answer. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE1 | Outcall destination that answers #1. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE2 | Outcall destination that answers #2. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE3 | Outcall destination that answers #3. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE4 | Outcall destination that answers #4. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE5 | Outcall destination that answers #5. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE6 | Outcall destination that answers #6. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE7 | Outcall destination that answers #7. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE8 | Outcall destination that answers #8. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE9 | Outcall destination that answers #9. |
TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE10 | Outcall destination that answers #10. |
TEST_CREATECALL_DEST_ANSWER_AND_DISCONNECT_SHORT | Outcall destination that answers and disconnects short. |
TEST_CREATECALL_DEST_ANSWER_AND_FAIL_JOIN | Outcall destination that answers and fails to join. |
TEST_SHORT_TIMEOUT | Short timeout intialized to '10s' |
TEST_LONG_TIMEOUT | Long timeout initialized to '30s'. |
TEST_VERY_LONG_TIMEOUT | Very long timeout initialized to '150s'. |
ASSERTION_NUM | Assertion number. assertnum parameter passed to the XSL. |
SETUP_CONNECTION_TYPE | Type of setup connection. connectiontype parameter passed to the XSL. |
TEST_BASIC_HTTP_URI | Basic HTTP URI. Not used in this release. |
TEST_IR_URI | IR site URI. |
TEST_ABSOLUTE_URI | Absolute URI. Not used in this release. |
uri_UNREACHEABLE | A URI unreacheable. |
Other variable declared in this part of the XSLT must not be changed because they are part of the framework.
These elements are used to setup the test.
setup
<eventprocessor>
and is used to set what kind of call starts the test:
ccxml.loaded
and connection.alerting
events are catched and <accept>
is executed; also connection.signal
is implicity catch; the first event processed in tests will be connection.connected
;ccxml.loaded
event so the first event processed in tests will be connection.alerting
;ccxml.loaded
.connectiontype
parameter, mapped into the SETUP_CONNECTION_TYPE
ECMA script variable.
These elements may be used to signal intermediate results or indications.
comment
expr
attribute:
expr | It contains the ECMA expression related to the intermediate information. |
---|
These elements are used to drive remote side operations. Not used for the current implementation of the framework.
remotedisconnect
connectionid | An ECMAScript expression that evaluates to the identifier of the connection on which the hang-up is invoked. |
---|
These elements are used to signal the completion of a test.
pass
fail
not_exec
event | Optional. Event that caused failure. |
---|---|
reason | Optional. An ECMAScript expression that evaluates to a string at run-time providing information about the probable cause for failure. |
These elements provide helper functions to automate common tasks. Not used for the current implementation of the framework.
check-event-name
name
attribute of the event.
The element supports the following attributes:
event | An ECMAScript expression that evaluates to the event to check. |
---|---|
value | An ECMAScript expression that evaluates to the name of the event. |
These elements may be used to exit unconditional with a mandatory output comment.
uncond_exit
expr
attribute:
expr | An ECMAScript expression that evaluates to a string at run-time providing information about the unconditional exit information. |
---|
The following examples illustrate a simple use of the proposed tags. These examples were written to help validate the stylesheet, but not directly used to generate the tests. The current implementation of CCXML Implementation Report framework all the tests were based on Jumbo test, see Appendix A.3 for details.
The following example tests that a
connection.disconnected
event is received when a <disconnect/>
element is run. This test assumes that a connection of type connected
is delivered as part of the execution of the <conf:setup/>
element.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="connection.connected"> <disconnect/> </transition> <transition event="connection.disconnected"> <conf:pass/> </transition> <transition event="*"> <conf:fail/> </transition> </eventprocessor> </ccxml>
The following example tests that a
connection.disconnected
event is received when the remote side hangs up. This test assumes that a connection of type connected
is delivered as part of the execution of the <conf:setup/>
element.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="connection.connected"> <conf:remotedisconnect/> </transition> <transition event="connection.disconnected"> <conf:pass/> </transition> <transition event="*"> <conf:fail reason="'Unexpected Event ' + event$.name"/> </transition> </eventprocessor> </ccxml>
The following example tests that a connection.failed
event is received when a call to a phone number that does not answer is
placed. This test assumes that a connection of type noconnection
is delivered as part of the execution of the <conf:setup/>
element.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="ccxml.loaded"> <createcall dest="TEST_CREATECALL_DEST_NOANSWER" timeout="TEST_LONG_TIMEOUT"/> </transition> <transition event="connection.progressing"> <conf:comment expr="event$.name + ' received'"/> </transition> <transition event="connection.failed"> <!-- Check timestamps to have TEST_LONG_TIMEOUT to get here --> <conf:pass/> </transition> <transition event="*"> <conf:fail reason="'Unexpected Event ' + event$.name"/> </transition> </eventprocessor> </ccxml>
The following example tests that a connection.connected
event is received when a call to a phone number that answers is placed. This test assumes that a connection of type noconnection
is delivered as part of the execution of the <conf:setup/>
element.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="ccxml.loaded"> <createcall dest="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE1" timeout="TEST_SHORT_TIMEOUT"/> </transition> <transition event="connection.progressing"> <conf:comment expr="event$.name + ' received'"/> </transition> <transition event="connection.connected"> <conf:pass/> </transition> <transition event="*"> <conf:fail reason="'Unexpected Event ' + event$.name"/> </transition> </eventprocessor> </ccxml>
The following example tests that a connection.connected
event is received when a call to a phone number that answers is placed. This is
the same as example 4 but just shows how it is possible to use a different phone
number to get some other action on the remote side. This test assumes that a connection of type noconnection
is delivered as part of the execution of the <conf:setup/>
element.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="ccxml.loaded"> <createcall dest="TEST_CREATECALL_DEST_ANSWER_AND_DISCONNECT_SHORT" timeout="TEST_SHORT_TIMEOUT"/> </transition> <transition event="connection.progressing"> <conf:comment expr="event$.name + ' received'"/> </transition> <transition event="connection.connected"> <conf:pass/> </transition> <transition event="*"> <conf:fail reason="'Unexpected Event ' + event$.name"/> </transition> </eventprocessor> </ccxml>
The following example tests that a conference.joined
event is received when two connections are joined by means of
<join/>
element. This test assumes that a connection of type connected
is delivered as part of the execution of the <conf:setup/>
element.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <var name="firstConnection"/> <var name="secondConnection"/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="connection.connected" state="init"> <assign name="current_state" expr="'connected'"/> <assign name="firstConnection" expr="event$.connectionid"/> <createcall dest="TEST_CREATECALL_DEST_ANSWER_AND_DISCONNECT_SHORT" connectionid="secondConnection" timeout="TEST_SHORT_TIMEOUT"/> </transition> <transition event="connection.progressing"> <conf:comment expr="event$.name + ' received'"/> </transition> <transition event="connection.connected" state="connected"> <join id1="firstConnection" id2="secondConnection"/> </transition> <transition event="conference.joined"> <conf:pass/> </transition> <transition event="*"> <conf:fail reason="'Unexpected Event ' + event$.name"/> </transition> </eventprocessor> </ccxml>
The following example tests that a connection.connected
event is received when the <accept/>
element is executed. This test assumes
that a connection of type alerting
is delivered as part of the execution of the
<conf:setup />
execution.
<?xml version="1.0" encoding="UTF-8"?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf=">http://www.w3.org/2005/ccxml-conformance"> <conf:docsetup/> <eventprocessor statevariable="current_state"> <conf:setup/> <transition event="connection.alerting"> <conf:comment expr="'Received ' + event$.name"/> <accept connectionid="event$.connectionid"/> <conf:comment expr="'Executed accept on connection ' + event$.connectionid"/> </transition> <transition event="connection.connected"> <conf:comment expr="'Received ' + event$.name"/> <conf:pass/> </transition> <transition event="*"> <conf:fail reason="'Unexpected Event ' + event$.name"/> </transition> </eventprocessor> </ccxml>
This section will brefly describe the structure of a Jumbo test.
All the current tests are developed as Jumbo test, so that a single test document is able to test more than one test assertions. In Appendix C.1, the Manifest describes the association of all the test assertions in Section 7 and the corresponding Jumbo test.
In the initial part there is a "prelude", which is contained in a script element after <conf:docsetup/>. The most important function of this prelude is to initialize an "assertion queue", which contains all of the parent assertions in the Jumbo test. Each of which has its own unit test. "child" assertions are related to parent assertions, and appear inside of their parent's unit test. In the example the parent assertion is "17" and the children are: "12", "16", "17".
The Jumbo test loops on the parent assertions, by means of the "user.PREPARE_NEW" event. So the test starts when in an initial transition (depending on the test assertions to be tested either in the "connection.alerting", "connection.connected") the event "user.PREPARE_NEW" is sent. At that point the loop is started and the Pass or Fail assertions are recorded. During the loop the state variable is set to "ASSERTION_NMBR_#" of each of the parent assertions and the transitions with that state variable are the ones devoted to that assertion. During the loop the assertions passed or failed are reported, and after the last assertion the loop finishes and the session ends.
<?xml version="1.0" encoding="UTF-8"?> <ccxml xmlns="http://www.w3.org/2002/09/ccxml" xmlns:conf="http://www.w3.org/2005/ccxml-conformance" version="1.0"> <!-- Serguei's infrastructure performs a loop on the 'assertions' Ecma array, based on "name_prepare_new" event for doing the "loop". Mainly we have to different levels of assertions: - Main assertions, stored in 'assertions' array - Children assertions, stored into 'assert_trace' An assertion is a child assertion if it does not need to perform any action, but it is sufficient to test its father assertion result to determine if it passes or fails. The test finishes when all the main assertions have been tested. Children assertions are tested after the father itself. If an unexpected event is caught by the <transition event"*"/> a comment is printed and the loop continues with the next iteration. An hang up event causes the interruption of test: session exits. All the send.successful events are caught and ignored (they are generated by the loop mechanism). --> <conf:docsetup/> <var name="myFetchID"/> <var name="first_accept_ok"/> <script><![CDATA[ var i=0; assertions[i++] = init_assertion('17'); var assert_last = i - 1; var assert_index = -1; // // out of the loop assertions (children) // Children of 17 add_2_assert_trace('12'); add_2_assert_trace('16'); add_2_assert_trace('15'); s_ASSERTIONS_LEFT = show_remained_assertions(); var b_in_test = false; ]]></script> <eventprocessor statevariable="current_state"> <conf:setup type="noconnection"/> <transition event="ccxml.loaded" state="init"> <conf:comment expr="'Event: ' + event$.name"/> </transition> <transition event="connection.alerting" state="init"> <send targettype="'ccxml'" target="session.id" name="'user.timeout'" delay="TEST_LONG_TIMEOUT"/> <assign name="first_accept_ok" expr="false"/> <var name="hints" expr="new Object()"/> <assign name="hints.test" expr="'test'"/> <accept hints="hints"/> </transition> <transition event="connection.connected" state="init"> <conf:comment expr="'Event: ' + event$.name"/> <assign name="first_accept_ok" expr="true"/> <send targettype="'ccxml'" target="session.id" name="name_prepare_new"/> </transition> <transition event="user.PREPARE_NEW"> <conf:comment expr="'Event: ' + event$.name"/> <if cond="assert_index >= 0"> <assign name="ASSERTION_NUM" expr="assertions[assert_index].number"/> <assign name="t_ASSERT_RESULT" expr="assertions[assert_index].P_F"/> <script>assertions[assert_index].reason = t_ASSERT_REASON;</script> <if cond="t_ASSERT_RESULT == s_PASS"> <conf:pass reason="t_ASSERT_REASON"/> <elseif cond="t_ASSERT_RESULT == s_FAIL"/> <conf:fail reason="t_ASSERT_REASON"/> <else/> <conf:not_exec reason="t_ASSERT_REASON"/> </if> </if> <assign name="assert_index" expr="assert_index + 1"/> <if cond="assert_index > assert_last"> <log label="s_TA" expr="s_ASSERTIONS_LEFT"/> <conf:uncond_exit expr="'DONE'"/> <else/> <log label="s_TA" expr="s_ASSERTIONS_LEFT"/> <assign name="ASSERTION_NUM" expr=" assertions[assert_index].number"/> <assign name="t_ASSERT_REASON" expr="''"/> <script>assertions[assert_index].P_F = s_FAIL;</script> <assign name="current_state" expr="state_prefix + ASSERTION_NUM"/> <send targettype="'ccxml'" target="session.id" name="start_name_prefix + ASSERTION_NUM"/> </if> </transition> <!-- 17. If the attribute value is invalid or there is no valid default value, an error.semantic event must be thrown 12. The execution of an <accept> MUST cause the underlying platform to signal the telephony system to connect the specified Connection to the CCXML platform. 16. If the connectionid attribute is omitted, the interpreter must accept using the id indicated in the current event being processed. --> <transition event="user.START_ASSERTION_17" state="ASSERTION_NMBR_17"> <conf:comment expr=" 'Current state : ' +current_state+ ' , Event: ' + event$.name"/> <!-- Begin Related Tests --> <if cond="first_accept_ok"> <assign name="ASSERTION_NUM" expr="'12'"/> <conf:pass/> <assign name="ASSERTION_NUM" expr="'16'"/> <conf:pass/> <assign name="ASSERTION_NUM" expr="'15'"/> <conf:pass/> <else/> <assign name="ASSERTION_NUM" expr="'12'"/> <conf:fail/> <assign name="ASSERTION_NUM" expr="'16'"/> <conf:fail/> <assign name="ASSERTION_NUM" expr="'15'"/> <conf:fail/> </if> <!-- End Related Tests --> <accept/> </transition> <transition event="error.semantic" state="ASSERTION_NMBR_17"> <conf:comment expr=" 'Current state : ' +current_state+ ' , Event: ' + event$.name"/> <script>assertions[assert_index].P_F = s_PASS;</script> <send targettype="'ccxml'" target="session.id" name="name_prepare_new"/> </transition> <transition event="error.*" state="ASSERTION_NMBR_17"> <conf:comment expr=" 'Current state : ' +current_state+ ' , Event: ' + event$.name"/> <script>assertions[assert_index].P_F = s_FAIL;</script> <assign name="t_ASSERT_REASON" expr="'error.semantic expected' "/> <send targettype="'ccxml'" target="session.id" name="name_prepare_new"/> </transition> <!-- ***************** COMMON ******************************** --> <transition event="send.successful"> </transition> <transition event="user.timeout"> <assign name="current_state" expr="'GEN'"/> <conf:uncond_exit expr="'TEST-TIMEOUT.' + show_remained_assertions()"/> </transition> <transition event="connection.disconnected"> <conf:uncond_exit expr="'CONNECTION-DISCONNECTED'"/> </transition> <transition event="*"> <assign name="t_ASSERT_REASON" expr="'UNEXPECTED EVENT ' + event$.name + ' IN STATE ' + current_state"/> <conf:comment expr="t_ASSERT_REASON"/> <if cond="current_state == 'init'"> <conf:uncond_exit expr="'Did not come out from init state.'"/> <else/> <send targettype="'ccxml'" target="session.id" name="name_prepare_new"/> </if> </transition> </eventprocessor> </ccxml>
The following XML Schema succintly declares the Test API markup elements, their attributes, and the legal values for those attributes if applicable.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="docsetup"/> <xs:element name="setup"/> <xs:element name="pass"/> <xs:element name="fail"> <xs:complexType> <xs:attribute name="event" type="xs:string" use="optional"/> <xs:attribute name="reason" type="ECMAScript.expression" use="optional"/> </xs:complexType> </xs:element> <xs:element name="not_exec"> <xs:complexType> <xs:attribute name="event" type="xs:string" use="optional"/> <xs:attribute name="reason" type="ECMAScript.expression" use="optional"/> </xs:complexType> </xs:element> <xs:element name="comment"> <xs:complexType> <xs:attribute name="expr" type="ECMAScript.expression" use="required"/> </xs:complexType> </xs:element> <xs:element name="remotedisconnect"/> <xs:complexType> <xs:attribute name="connectionid" type="ECMAScript.expression" use="required"/> </xs:complexType> <xs:element name="check-event-name"> <xs:complexType> <xs:attribute name="event" type="xs:string" use="required"/> <xs:attribute name="value" type="ECMAScript.expression" use="required"/> </xs:complexType> </xs:element> <xs:element name="assignXSLvar"> <xs:complexType> <xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="var" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:simpleType name="ECMAScript.expression"> <xs:restriction base="xs:string"/> </xs:simpleType> <xs:element name="uncond_exit"> <xs:complexType> <xs:attribute name="expr" type="ECMAScript.expression" use="required"/> </xs:complexType> </xs:element> </xs:schema>
The XML Schema can be used to validate the testing documents, or to transform the test source through the XSLT, and validate the output against the CCXML 1.0 Schema.
The following is the listing of the XSLT that can be used to transform the previous examples into a valid CCXML 1.0 document. This XSLT is part of the framework for CCXML Implementation Report.
<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright 1998-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. See http://www.w3.org/Consortium/Legal/. --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:conf="http://www.w3.org/2005/ccxml-conformance" xmlns="http://www.w3.org/2002/09/ccxml" version="1.0"> <xsl:output cdata-section-elements="script" indent="yes"/> <!-- Assume assertion number is passed in --> <xsl:param name="assertnum"/> <xsl:param name="connectiontype"/> <!-- ############################################# --> <!-- D o c u m e n t H e a d e r s --> <!-- ############################################# --> <!-- Copy everything that doesn't match other rules --> <xsl:template match="/ | @* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <!-- strip comments --> <xsl:template match="comment()"/> <!-- ############################################# --> <!-- F i n a l S t a t u s I n d i c a t o r s --> <!-- ############################################# --> <!-- Success criteria --> <xsl:template match="conf:pass"> <xsl:call-template name="conf-pass"> <xsl:with-param name="reason" select="@reason"/> </xsl:call-template> </xsl:template> <xsl:template name="conf-pass"> <xsl:param name="reason"/> <script>remove_from_assert_trace(ASSERTION_NUM);</script> <xsl:choose> <xsl:when test="$reason != ''"> <log label="s_TA+ASSERTION_NUM" expr="s_PASS + {$reason}"/> </xsl:when> <xsl:otherwise> <log label="s_TA+ASSERTION_NUM" expr="s_PASS"/> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- Failure criteria --> <xsl:template match="conf:fail"> <xsl:call-template name="conf-fail"> <xsl:with-param name="reason" select="@reason"/> </xsl:call-template> </xsl:template> <xsl:template name="conf-fail"> <xsl:param name="reason"/> <script>remove_from_assert_trace(ASSERTION_NUM);</script> <xsl:choose> <xsl:when test="$reason != ''"> <log label="s_TA+ASSERTION_NUM" expr="s_FAIL + {$reason}"/> </xsl:when> <xsl:otherwise> <log label="s_TA+ASSERTION_NUM" expr="s_FAIL"/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="conf:not_exec"> <xsl:call-template name="conf-not_exec"> <xsl:with-param name="reason" select="@reason"/> </xsl:call-template> </xsl:template> <xsl:template name="conf-not_exec"> <xsl:param name="reason"/> <xsl:choose> <xsl:when test="$reason != ''"> <log label="s_TA+ASSERTION_NUM" expr="s_NOT_EXECUTED + {$reason}"/> </xsl:when> <xsl:otherwise> <log label="s_TA+ASSERTION_NUM" expr="s_NOT_EXECUTED"/> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- ############################################# --> <!-- I n t e r m e d i a t e R e p o r t s --> <!-- ############################################# --> <!-- Copy everything doesn't match the other rules --> <xsl:template match="conf:comment"> <log label="s_TA+ASSERTION_NUM" expr="'Comment: '+{@expr}"/> </xsl:template> <xsl:template match="conf:uncond_exit"> <log label="s_TA" expr="{@expr} + ' EXIT.'"/> <exit/> </xsl:template> <!-- ############################################# --> <!-- Document Setup --> <!-- ############################################# --> <!-- Apply values to commonly used expressions --> <xsl:template match="conf:docsetup"> <var name="s_NONE" expr="'NONE'"/> <var name="s_ASSERTIONS_LEFT"/> <script><![CDATA[ var trace_separator = ' '; var assert_trace = new Object();; function add_2_assert_trace(N){ assert_trace[N] = true; } function show_remained_assertions(){ var rr_ini = ''; var rr = rr_ini; var sIndex; for(sIndex in assert_trace ) { if( assert_trace[sIndex]){rr = rr + sIndex + trace_separator}; } if (rr == rr_ini){rr = s_NONE;} return 'ASSERTIONS_LEFT: ' + rr; } function remove_from_assert_trace(N){ assert_trace[N] = false; s_ASSERTIONS_LEFT = show_remained_assertions(); } function init_assertion(N){ rr = Object() rr.number = N; rr.P_F = s_NOT_EXECUTED; rr.reason = ''; rr.N_child = 0; add_2_assert_trace(N); return rr; } var a_tmp_1 = session.uri.split("\/"); var s_tmp_2 = a_tmp_1[a_tmp_1.length - 1]; var a_tmp_3 = s_tmp_2.split("\."); var s_LOG_PREFIX = a_tmp_3[0]; ]]></script> <var name="assertions" expr="Object();"/> <var name="current_state" expr="'init'"/> <var name="cur_event_ID"/> <var name="s_TA" expr="s_LOG_PREFIX + ' TA-'"/> <var name="s_PASS" expr="'PASS: '"/> <var name="s_FAIL" expr="'FAIL: '"/> <var name="s_NOT_EXECUTED" expr="'NOT_EXECUTED: '"/> <var name="state_prefix" expr="'ASSERTION_NMBR_'"/> <var name="name_prefix" expr="'user.ASSERTION_'"/> <var name="start_name_prefix" expr="'user.START_ASSERTION_'"/> <var name="name_prepare_new" expr="'user.PREPARE_NEW'"/> <var name="USER_ERROR" expr="'user.error'"/> <var name="TEST_CREATECALL_DEST_NOANSWER" expr="'sip:10.229.47.209'"/> <var name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE" expr="new Object();"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[0]" expr="'sip:10.229.47.209'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[1]" expr="'sip:10.229.47.111'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[2]" expr="'sip:10.229.47.209'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[3]" expr="'18005551004'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[4]" expr="'18005551005'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[5]" expr="'18005551006'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[6]" expr="'18005551007'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[7]" expr="'18005551008'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[8]" expr="'18005551009'"/> <assign name="TEST_CREATECALL_DEST_ANSWER_AND_STAY_ACTIVE[9]" expr="'18005551010'"/> <var name="TEST_CREATECALL_DEST_ANSWER_AND_DISCONNECT_SHORT" expr="'18005552000'"/> <var name="TEST_CREATECALL_DEST_ANSWER_AND_FAIL_JOIN" expr="'18005553000'"/> <var name="TEST_SHORT_TIMEOUT" expr="'10s'"/> <var name="TEST_LONG_TIMEOUT" expr="'30s'"/> <var name="TEST_VERY_LONG_TIMEOUT" expr="'150s'"/> <var name="ASSERTION_NUM" expr="'{$assertnum}'"/> <var name="SETUP_CONNECTION_TYPE" expr="'{$connectiontype}'"/> <var name="t_ASSERT_RESULT"/> <var name="t_ASSERT_REASON" expr="''"/> <var name="TEST_BASIC_HTTP_URI" expr="''"/> <var name="TEST_IR_URI" expr="'http://10.229.47.117:8080/W3C_CCXML_IR/output/'"/> <var name="TEST_ABSOLUTE_URI" expr="''"/> <var name="uri_UNREACHEABLE" expr="'http://10.255.255.254/unrea3chable'"/> </xsl:template> <!-- ############################################# --> <!-- Connection Setup --> <!-- ############################################# --> <!-- Setup the connection requested and handle appropriate events --> <xsl:template match="conf:setup"> <xsl:call-template name="conf-setup"> <xsl:with-param name="connectiontype" select="@type"/> </xsl:call-template> </xsl:template> <xsl:template name="conf-setup"> <xsl:param name="connectiontype"/> <xsl:choose> <xsl:when test="$connectiontype = 'alerting'"> <transition event="ccxml.loaded"> <log label="s_TA+ASSERTION_NUM" expr="'Started: ' + event$.name"/> <!-- Insert script to initiate a call here --> </transition> </xsl:when> <xsl:when test="$connectiontype = 'connected'"> <transition event="ccxml.loaded"> <log label="s_TA+ASSERTION_NUM" expr="'Started: ' + event$.name"/> <!-- Insert script to initiate a call here --> </transition> <transition event="connection.signal" state="init"> <log label="s_TA+ASSERTION_NUM" expr="'Received: ' + event$.name"/> </transition> <transition event="connection.alerting" state="init"> <log label="s_TA+ASSERTION_NUM" expr="'Received: ' + event$.name"/> <accept connectionid="event$.connectionid"/> <log label="s_TA+ASSERTION_NUM" expr="'Accepted: ' + event$.connectionid"/> </transition> </xsl:when> <xsl:otherwise> <!-- type is "noconnection" or an invalid type --> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- ############################################# --> <!-- Remote Disconnect --> <!-- ############################################# --> <!-- Instruct a remote agent to disconnect the specified connection --> <xsl:template match="conf:remotedisconnect"> <log label="s_TA+ASSERTION_NUM" expr="'RemoteDisconnect: Please hang-up connection: ' + {@connectionid}"/> </xsl:template> <!-- ############################################# --> <!-- Helper Functions --> <!-- ############################################# --> <xsl:template match="conf:check-event-name"> <if cond="!event$.name"> <xsl:call-template name="conf-fail"> <xsl:with-param name="reason"> <xsl:text>'name property not defined'</xsl:text> </xsl:with-param> </xsl:call-template> <elseif cond="event$.name != '{@value}'"/> <xsl:call-template name="conf-fail"> <xsl:with-param name="reason"> <xsl:text>'name property should be' + </xsl:text> <xsl:value-of select="@value"/> <xsl:text> 'but is ' + event$.name </xsl:text> </xsl:with-param> </xsl:call-template> <else/> <xsl:call-template name="conf-pass"/> </if> </xsl:template> </xsl:stylesheet>
Using the above mentioned stylesheets, the test ".txml
" source documents
can be transformed into ".ccxml
" test documents.
To accomplish this, a Java class is used. In the "bin
directory there is a class called
"TestGenerator
". The script can run this manually to transform all of the tests and save them in a folder named
"output
". The "go.sh" and similarly "go.bat" example is the following:
#!/bin/sh java -cp bin org.w3c.ccxml.ir.TestGenerator ./manifest.xml jumbo_test-ccxml-sample.xslt ircgi-2-jsp.xslt ./output
Note that to run the TestGenerator class, JDK version has to be 1.5 or higher. To check JDK version run:
java -version
The CCXML 1.0 Implementation Report contains assertions that require server-side support to verify HTTP headers and submitted values. To allow diverse test environments to use different server-side technologies, tests describe the server-side processing using a syntax independent of any particular server-side framework.
This appendix describes a server-agnostic XML API that can be transformed easily using XSLT into any server-side framework. Reference JSP XSLT templates is provided and used for running the framework.
The API supports the following:
The XML API does not require the following:
A document conforming to this specification, heretofore referred to as an "IRCGI document", indicates the checks to be made on an HTTP request. Supported checks include:
Checks may be nested. The result of the checks determines the next document to be executed. The next document must continue the test and must determine the success or failure of the test. Once the IRCGI document determines the next document, a response is sent, and the IRCGI document terminates.
An IRCGI document consists of the following elements. The DTD can be found below.
name | Required. The name of the header. If only the name attribute is specified, the CGI must execute the if-header content only if the named header is present in the request. |
---|---|
value | Optional. The expected value of the header. If this attribute is specified, the CGI must execute the if-header content only if the named header is present in the request and its value matches that of the value attribute. This attribute and the starts-with attribute are mutually exclusive. |
starts-with | Optional. The expected value with which the header begins. If this attribute is specified, the CGI must execute the if-header content only if the named header is present in the request and its value begins with the value of the starts-with attribute. This attribute and the value attribute are mutually exclusive. |
ignore-case | Optional. The value match is case-sensitive if the ignore-case attribute is false, the default. The match is not case-sensitive if the attribute is true. |
type | Required. The HTTP method: 'get' or 'post'. |
---|
name | Required. The parameter's name. If only the name attribute is specified, the CGI must
execute the if-parameter content only if the
named parameter is present in the request. This attribute and the starts-with attribute are mutually exclusive. |
---|---|
value | Optional. The parameter's expected value. If this attribute is specified, the CGI must execute the if-parameter content only if the named parameter is present in the request and its value matches that of the starts-with attribute. This attribute and the value attribute are mutually exclusive. |
starts-with | Optional. The expected value with which the parameter begins. If this attribute is specified, the CGI must execute the if-parameter content only if the named parameter is present in the request and its value begins with the value of the starts-with attribute. This attribute and the value attribute are mutually exclusive. |
ignore-case | Optional. The value match is case-sensitive if the ignore-case attribute is false, the default. The match is not case-sensitive if the attribute is true. |
ref | Required. The id of a params element containing the set of expected CGI parameters. |
---|
id | Required. A unique identifier referenced by an if-all-params element. |
---|
name | Required. The name of the CGI request parameter. |
---|---|
value | Required. The value of the CGI request parameter. |
name | Required. The name of the parameter containing the uploaded bits. If only the name attribute is specified, the CGI must execute the if-upload content only if the named upload is present. |
---|---|
size | Optional. The expected size of the upload. If this attribute is specified, the CGI must execute the if-parameter content only if the named upload is present in the request and its size matches that of the value of the size attribute. The value of this attribute can be a static numeric value or a CGI parameter name. If a name is specified, the size of the file upload is compared to the value of the specified CGI parameter. The value of the CGI parameter must resolve to a numeric value. The size value should be specified in bytes. |
.ccxml
" or ".vxml
"
and, optionally, sets the HTTP response code. The CGI must generate a response upon executing a next element and must not execute any other
elements.code | Optional. The HTTP response code. If the code attribute is specified, its value must be used as the HTTP response status code. The default is 200 (Ok). |
---|---|
dest | Optional. The URL of the next document. If this attribute is specified, its value must be used by the response to designate the next document to be visited. |
include | Optional. true or false If this attribute is true, the document specified by the dest attribute is returned as the result
document. If this attribute is false, the
default, the CGI returns a generated CCXML/VoiceXML document that contains a
goto to the document specified by dest. The document generated when include is false
may contain the content of comment elements
that were encountered. Only files that are in the directory immediately above the cgi-bin directory (see below) may be included. Attempts to include other files result in an HTTP 403 (Forbidden) response status code. |
isVXML | Optional. true or false If this attribute is true, the generated document is a VoiceXML 2.0 one. If this attribute is false, the default, the generated document is a CCXML 1.0 one. |
sleep | Optional. An interval for the CGI to sleep before returning its response to the client. |
expires | Optional. Sets an Expires HTTP response header to a date calculated by adding the value of the expires attribute to the current time. The value of this attribute should be a positive or negative integer in seconds. |
absolute | Optional. For future extensions. |
The following DTD succintly declares the IRCGI API markup elements, their attributes, and the legal values for those attributes if applicable.
<!ENTITY % ir-checks "if-header | if-method | if-parameter | if-upload | if-all-params" > <!ELEMENT ircgi (params | comment | %ir-checks; | next)* > <!ELEMENT comment (#PCDATA) > <!ELEMENT if-parameter (comment | %ir-checks; | next)* > <!ATTLIST if-parameter name CDATA #REQUIRED value CDATA #IMPLIED starts-with CDATA #IMPLIED ignore-case (true|false) "false" > <!ELEMENT if-all-params (comment | %ir-checks; | next)* > <!ATTLIST if-all-params ref IDREF #REQUIRED> <!ELEMENT params (param+)> <!ATTLIST params id ID #REQUIRED> <!ELEMENT param EMPTY> <!ATTLIST param name CDATA #REQUIRED value CDATA #REQUIRED> <!ELEMENT if-upload (comment | %ir-checks; | next)* > <!ATTLIST if-upload name CDATA #REQUIRED size CDATA #IMPLIED> <!ELEMENT if-header (comment | %ir-checks; | next)* > <!ATTLIST if-header name CDATA #REQUIRED value CDATA #IMPLIED starts-with CDATA #IMPLIED ignore-case (true|false) "false" > <!ELEMENT if-method (comment | %ir-checks; | next)* > <!ATTLIST if-method type (get|post) "get" > <!ELEMENT next EMPTY> <!ATTLIST next code CDATA "200" dest CDATA #IMPLIED include (true|false) "false" isVXML (true|false) "false" sleep CDATA #IMPLIED expires CDATA #IMPLIED absolute CDATA #IMPLIED>
The following examples illustrate the use of the IRCGI API elements. The examples validate the XSLT used to generate valid CGI from the test source. These tests should all pass before the XSLT is applied to the main body of tests.
If the HTTP method used is "POST", the next document is "pass.ccxml
". Otherwise, the next document is "fail.ccxml
". The match on method name is case-insensitive.
<?xml version="1.0"?> <!-- Check if request method was 'POST'. --> <ircgi> <if-method value="post"> <next dest="../pass.ccxml" /> </if-method> <next dest="../fail.ccxml" /> </ircgi>
If the parameter "p1" was submitted, the next document
is "pass.ccxml
". Otherwise, the next document is "fail.ccxml
". The value of "p1"
does not matter because the value attribute was
specified.
<?xml version="1.0"?> <!-- Check if parameter p1 is present. --> <ircgi> <if-parameter name="p1"> <next dest="../pass.ccxml" /> </if-parameter> <next dest="../fail.ccxml" /> </ircgi>
If parameter "p1" has the value "42" and if parameter "p2" has the value "quiche", the next document is "pass.ccxml
". Otherwise, the next document is "fail.ccxml
".
This document includes comment elements whose content may be included in a log element in the response document to aid in debugging.
<?xml version="1.0"?> <!-- Check if p1 == 42 and p2 == 'quiche'. --> <ircgi> <if-parameter name="p1" value="42"> <comment>p1 is 42.</comment> <if-parameter name="p2" value= "quiche"> <comment>p2 is quiche.</comment> <next dest="../pass.ccxml" /> </if-parameter> <comment> p2 is not quiche.</comment> <next dest="../fail.ccxml"/> </if-parameter> <comment>p1 is not 42.</comment> <next dest="../fail.ccxml" /> </ircgi>
If the "User-Agent" HTTP header is present but is empty,
the next document is "fail.ccxml
". If the "User-Agent" header is present and not
empty, the next document is "pass.ccxml
". If the "User-Agent" header is not
present, the next document is "fail.ccxml
".
<?xml version="1.0" ?> <ircgi> <if-header name="User-Agent"> <if-headername="User-Agent" value= ""> <comment> User-Agent header present, but empty. </comment> <next dest="../fail.ccxml" /> </if-header> <comment> User-Agent header was supplied and not empty. </comment> <next dest="../pass.ccxml" /> </if-header> <comment> User-Agent header was not supplied. </comment> <next dest="../fail.ccxml" /> </ircgi>
If the parameter "p1" was submitted, the next document
is "pass.ccxml
". Otherwise, the HTTP response code is set to "404".
<?xml version="1.0"?> <!-- Send 404 if p1 not present --> <ircgi> <if-parameter name="p1"> <next dest="../pass.ccxml" /> </if-parameter> <next code="404" /> </ircgi>
If the parameter "p1" was "include", then parameter "p2"
will be checked. If parameter "p2" was "pass", then the response will be the
content of the file "pass.ccxml
" because the next
element's include attribute is true. If parameter "p2" is not "pass", the response
will be the content of the file "fail.ccxml
" because the next element's include
attribute is false.
If parameter "p1" was not "include", the response
document will be generated by the ircgi and include a goto to "fail.ccxml
" because the include attribute was false, by default. The generated document may contain a
log element containing the content of the IRCGI
document's comment element.
<?xml version="1.0"?> <!-- If p1 == 'include', include 'pass.vxml' if p2 == 'pass'. --> <ircgi> <if-parameter name= "p1" value="include"> <if-parameter name="p2" value="pass"> <next dest="../pass.ccxml" include= "true"/> </if-parameter> <next dest="../fail.ccxml" include="true"/> </if-parameter> <comment>p1 is not 'include'.</comment> <next dest="../fail.ccxml" /> </ircgi>
This example navigates to a document "fail.ccxml
" after
sleeping for five seconds.
<?xml version="1.0"?> <ircgi> <next dest="../fail.ccxml" sleep="5" /> </ircgi>
This example checks the Content-Type header for a partial match on "multipart/form-data".
The starts-with attribute is used instead of the value attribute since the boundary portion of the value cannot be controlled or predetermined. An example of a Content-Type header value when the encoding is set to "multipart/form-data" follows:
multipart/form-data; boundary=---------------------------7d39216110392
<ircgi> <if-header name="Content-Type"> <if-header name="Content-Type" starts-with="multipart/form-data" ignore-case="true"> <next dest="../pass.ccxml" /> </if-header> <comment> Content-Type header was not multipart/form-data . </comment> <next dest="../fail.ccxml" /> </if-header> <next dest="../fail.ccxml" /> </ircgi>
The following example includes a .js document. The .js document includes a single statement that sets a variable to the value of the special variable __EPOCH__. At runtime, the CGI detects the special variable and replaces it with the server-calculated number of seconds since 'the epoch'. This feature is useful in testing to verify the caching behavior of a VoiceXML interpreter by making multiple IRCGI requests and comparing the values of __EPOCH__. If the values differ, the document was fetched from the Web. If not, the document was retrieved from the browser's local cache.
The IRCGI follows:
<ircgi> <next sleep="2" dest="../epoch.js" include="true"/> </ircgi>
The .js document follows:
var epoch = __EPOCH__;
This example returns the document "cache_me.ccxml" along with an Expires header set to 60 seconds after the CGI is requested.
<ircgi> <next dest="../cache_me.ccxml" include="true" expires="60"/> </ircgi>
If the CGI parameter named "recording" is a valid file
upload and its size is equal to the value of the CGI parameter 'recsize' the
next document is "pass.ccxml
". Otherwise, the next document is "fail.ccxml
".
<?xml version="1.0"?> <!-- Check if upload was of a specified size. --> <ircgi> <!-- @name represents the upload parameter name @size can refer to a static numeric value or, as shown here, to a CGI parameter name --> <if-upload name="recording" size="recsize"> <next dest="../pass.ccxml" /> </if-upload> <next dest="../fail.ccxml" /> </ircgi>
The following IRCGI expects precisely 3 CGI parameters the names and values of which are designated by the contents of the params element referenced by the if-all-params element.
<?xml version="1.0"?> <!-- Check if submitted parameters are in the set plist1 --> <ircgi> <params id="plist1"> <param name="p1" value="42"/> <param name="p2.dinner.main" value="quiche"/> <param name="p3" value="a 1 c"/> </params> <if-all-params ref="plist1"> <next dest="../pass.ccxml" /> </if-all-params> <next dest="../fail.ccxml" /> </ircgi>
The following IRCGI generates a VoiceXML document because the attribute isVXML is "true
".
<?xml version="1.0"?> <!-- Generation of VoiceXML document --> <ircgi> <next isVXML="true" dest="../312.vxml" sleep="10"/> </ircgi>
For security purposes, transformed IRCGI documents are deployed to an isolated directory, named "cgi-bin" under the assertion directory. Other, non-IRCGI, server-side programs that may be needed are also located in the "cgi-bin" directory.
The source IRCGI documents must be transformed into files that are executable in the test environment, such JSP files. The output files must reside in the "cgi-bin" directory and must have the ".ircgi" file extension. The file extension must be ".ircgi" because this is how other test documents (.txml) will refer to them. The .txml to .vxml transformation process cannot automatically change ".ircgi" ".pl" or ".jsp" because some tests may use ECMAScript expressions to build the reference to the ".ircgi" document.
The following XSLT document can be used to transform an IRCGI document to JSP:
<?xml version="1.0"?> <?xml version="1.0"?> <!-- Copyright 1998-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved. See http://www.w3.org/Consortium/Legal/. --> <!-- Transforms an ircgi test file into a Java Server Page.--> <!-- NOTE: This JSP requires the com.oreilly.servlet package available at http://www.servlets.com/cos/ 0 The source code, object code, and documentation in the com.oreilly.servlet package (http://www.servlets.com/cos/) is copyright and owned by Jason Hunter. --> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/" > <xsl:apply-templates /> </xsl:template> <xsl:template match="ircgi"> <xsl:call-template name="header" /> <xsl:call-template name="declarations" /> <xsl:call-template name="determineResult" /> </xsl:template> <!-- Official contentType is 'application/ccxml+xml'. Change contentType to 'text/xml' to view generated JSP in IE. NOTE: The "header" template content below must be on a single line so that whitespace is not introduced at the beginning of the resulting XML document. XML parsers will complain. Line breaks are included here for readability in the documentation. --> <xsl:template name="header" ><%@ page language="java" contentType="text/xml" %><%@ page import="java.io.*" %><%@ page import="java.net.*" %><%@ page import="java.util.*" %><%@ page import="com.oreilly.servlet.multipart.*" %></xsl:template> <!-- Define a Result class to hold the destination, comments, and HTTP status code that will be set by 'determineResult' method. --> <xsl:template name="declarations"><%! // Handles server side includes so they can be parsed private class JSPIncluder { void readInput(HttpServletRequest request, String strIncludePath, boolean absolute) throws JspException { URLConnection conn; // Get URL StringBuffer strUrl; String strUri; if(!absolute){ strUrl = request.getRequestURL(); strUri = strUrl.toString(); int nFindSlash = strUri.lastIndexOf("/"); if (nFindSlash != -1) { strUri = strUri.substring(0, nFindSlash + 1); } strUri += strIncludePath; }else{ strUri = strIncludePath; } // Open connection try { conn = (new URL(strUri)).openConnection(); conn.setDoInput(true); conn.setDoOutput(false); conn.connect(); } catch (Exception e) { throw new JspException(e.toString()); } // Read in contents try { BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer buff = new StringBuffer(); char[] chars = new char[2048]; int nLen; while ((nLen = in.read(chars, 0, chars.length)) >= 0) { buff.append(chars, 0, nLen); } m_strBuffer = buff.toString(); in.close(); } catch (Exception e) { throw new JspException(e.toString()); } } boolean replace(String strFind, String strReplace) { boolean bFound = false; if (m_strBuffer != null && m_strBuffer.length() > 0) { int a = 0; int b = 0; while (true) { a = m_strBuffer.indexOf(strFind, b); if (a != -1) { m_strBuffer = m_strBuffer.substring(0, a) + strReplace + m_strBuffer.substring(a + strFind.length()); b = a + strReplace.length(); bFound = true; } else { break; } } } return bFound; } void doOutput(PageContext context) throws JspException { JspWriter out = context.getOut(); try { out.print(m_strBuffer.toString()); } catch (Exception e) { throw new JspException(e.toString()); } } private String m_strBuffer; } // Handles multipart/form-data private class MultiPartHandler { HttpServletRequest request; public MultiPartHandler(HttpServletRequest req) { request = req; } public boolean find(String strFind, int nOfSize) throws JspException { MultipartParser parser; Part part; String strName; if((request.getContentType() != null)&&(request.getContentType().startsWith("multipart/form-data"))) { try { parser = new MultipartParser(request, request.getContentLength()); while ((part = parser.readNextPart()) != null) { strName = part.getName(); if(strName.equals(strFind)) { if (nOfSize == -1) { return true; } else { if (part.isFile()) { InputStream stream = ((FilePart)part).getInputStream(); if (getSizeOfStream(stream) == nOfSize) { return true; } } } } } } catch (Exception e) { throw new JspException(e.toString()); } } return false; } private long getSizeOfStream(InputStream stream) { if (null == stream) return 0; int nRead = 0; int nSize = 0; byte[] temp = new byte[1024]; try { while ((nRead = stream.read(temp)) != -1) { nSize += nRead; } } catch (IOException e) {} return nSize; } } private class Result { String dest; long sleep = 0; boolean expiresHeaderSet = false; long expires = 0; boolean include = false; boolean isVXML = false; StringBuffer comments = new StringBuffer(); int statusCode = 200; boolean absolute = false; } private final String NL = System.getProperty("line.separator"); private void determineResult(HttpServletRequest request, Result result, MultiPartHandler multipart) throws JspException { <xsl:apply-templates /> } %></xsl:template> <!-- Create Result object and call 'determineResult' to set its fields. Return CCXML document only if HTTP response status code is 200. Otherwise, return just the status code. --> <xsl:template name="determineResult" ><% Result myResult = new Result(); MultiPartHandler myMultiPart = new MultiPartHandler(request); determineResult(request, myResult, myMultiPart); response.setStatus(myResult.statusCode); if (myResult.sleep > 0) { try { Thread.sleep(myResult.sleep * 1000); } catch (InterruptedException e) { throw new JspException(e.toString()); } } if (myResult.expiresHeaderSet) { Date now = new Date(); long nMillis = now.getTime(); response.setDateHeader("Expires", nMillis + myResult.expires*1000); } if (myResult.include) { Date now = new Date(); long nMillis = now.getTime(); String strEpoch = String.valueOf(nMillis); JSPIncluder includer = new JSPIncluder(); includer.readInput(request, myResult.dest, myResult.absolute); includer.replace("__EPOCH__", strEpoch); includer.doOutput(pageContext); } else if (myResult.isVXML) {%><xsl:call-template name="vxml" /><%} else {%><xsl:call-template name="ccxml" /><%}%> </xsl:template> <xsl:template match="if-parameter" > if (<xsl:call-template name="genIfExpr"> <xsl:with-param name="type" select="'Parameter'" /> </xsl:call-template>) { <xsl:apply-templates /> } </xsl:template> <xsl:template match="if-header" > if (<xsl:call-template name="genIfExpr"> <xsl:with-param name="type" select="'Header'" /> </xsl:call-template>) { <xsl:apply-templates /> } </xsl:template> <xsl:template match="if-all-params" > if (<xsl:for-each select="/ircgi/params[@id=current()/@ref]/param"> <xsl:call-template name="genIfExpr"> <xsl:with-param name="type" select="'Parameter'" /> </xsl:call-template> <xsl:if test="position() != last()">&&</xsl:if> </xsl:for-each>) { <xsl:apply-templates /> } </xsl:template> <xsl:template match="if-upload" > int nSize = -1; <xsl:if test="@size"> if (null != request.getParameter("<xsl:value-of select='@size'/>")) { try { nSize = Integer.parseInt(request.getParameter("<xsl:value-of select='@size'/>")); } catch (NumberFormatException e) { } } else { try { nSize = Integer.parseInt("<xsl:value-of select='@size'/>"); } catch (NumberFormatException e) { } } </xsl:if> if (multipart.find("<xsl:value-of select="@name"/>", nSize)) { <xsl:apply-templates /> } </xsl:template> <!-- Generate an expression that determines when the condition of an if-parameter / if-header element is true. The 'type' parameter determines the HttpServletRequest method to use to get the value to be checked. --> <xsl:template name="genIfExpr" > <xsl:param name="type" /> <xsl:param name="size" /> <xsl:variable name="method"> <xsl:choose> <xsl:when test="@ignore-case = 'true'" >equalsIgnoreCase</xsl:when> <xsl:otherwise>equals</xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:choose> <xsl:when test="@value"> request.get<xsl:value-of select="$type"/> ("<xsl:value-of select="@name"/>") != null && request.get<xsl:value-of select="$type"/> ("<xsl:value-of select="@name"/>").<xsl:value-of select="$method"/> ("<xsl:value-of select="@value" />") </xsl:when> <xsl:when test="@starts-with"> request.get<xsl:value-of select="$type"/> ("<xsl:value-of select="@name"/>") != null && request.get<xsl:value-of select="$type"/> ("<xsl:value-of select="@name"/>").startsWith("<xsl:value-of select="@starts-with"/>") </xsl:when> <xsl:otherwise> request.get<xsl:value-of select="$type"/>("<xsl:value-of select="@name"/>") != null || multipart.find("<xsl:value-of select="@name"/>", -1) </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="if-method" > if (request.getMethod().equalsIgnoreCase("<xsl:value-of select="@type" />")) { <xsl:apply-templates /> } </xsl:template> <!-- Disarm double quotes and newline characters from comments, then add to result's comment buffer for use later in 'log' element. --> <xsl:template match="comment" > result.comments.append ("<xsl:value-of select="translate(., '" ', ' ')" />".trim()); result.comments.append(NL); </xsl:template> <xsl:template match="next" > <xsl:if test="@code" > result.statusCode = <xsl:value-of select="@code" />; </xsl:if> <xsl:if test="@dest" > result.dest = "<xsl:value-of select="@dest" />"; </xsl:if> <xsl:if test="@param"> result.dest = request.getParameter("<xsl:value-of select="@param"/>"); </xsl:if> <xsl:if test="@include = 'true'"> result.include = true; </xsl:if> <xsl:if test="@isVXML = 'true'"> result.isVXML = true; </xsl:if> <xsl:if test="@sleep"> result.sleep = <xsl:value-of select="@sleep" />; </xsl:if> <xsl:if test="@expires"> result.expiresHeaderSet = true; result.expires = <xsl:value-of select="@expires" />; </xsl:if> <xsl:if test="@absolute"> result.absolute = <xsl:value-of select="@absolute"/>; </xsl:if> return; </xsl:template> <!-- Generate CCXML document that does a 'goto' to the document indicated in myResult. If comment buffer is not empty, include a 'log' element to aid in debugging. --> <xsl:template name="ccxml" ><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml"> <eventprocessor> <transition event="ccxml.loaded"> <% String comments = myResult.comments.toString(); if (comments.length()>0) {%> <log>]]> <xsl:text disable-output-escaping="yes"> <![CDATA[<%= comments %>]]> </xsl:text><![CDATA[ </log><%}%> <fetch next="'<%= myResult.dest %>'"/> </transition> <transition event="fetch.done"> <goto fetchid="event$.fetchid"/> </transition> </eventprocessor> </ccxml> ]]> </xsl:template> <!-- Generate VoiceXML document that does a 'goto' to the document indicated in myResult. If comment buffer is not empty, include a 'log' element to aid in debugging. --> <xsl:template name="vxml" ><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <vxml version="2.1" xmlns="http://www.w3.org/2001/vxml"> <form> <block><% String comments = myResult.comments.toString(); if (comments.length()>0) {%> <log>]]> <xsl:text disable-output-escaping="yes"> <![CDATA[<%= comments %>]]> </xsl:text><![CDATA[ </log><%}%> <goto next="<%= myResult.dest %>"/> </block> </form> </vxml> ]]> </xsl:template> </xsl:stylesheet>
The directory convention requires test developers to ensure that paths from and to other test documents follow the convention.
The following example contains a reference to an IRCGI document from a VoiceXML document:
<goto next="cgi-bin/ua.ircgi" />
The following example contains a reference to a CCXML document from an IRCGI document:
<next dest="../pass.ccxml"/>
Given the directory convention, Web server administrators must do the following:
The following example configures Tomcat to run transformed files with a .ircgi extension as a JSP:
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.ircgi</url-pattern> </servlet-mapping>
The "ccxml10-ir-20110412.zip" archive contains several resources. This report is composed of a number of Jumbo tests to verify many assertions in a single testing document (see Appendix A.6 for details on Jumbo tests). The Jumbo tests are organised into folders where the folder name corresponds to the test ID. In addition the archive includes the following:
The "manifest.xml
" is a file containing the complete
information about the Jumbo tests that comprise the CCXML Implementation Report.
The structure of the Manifest
presents a root element called <tests>
; this is
the container of all the Jumbo tests. Every Jumbo test is
represented by a <test>
element containing
other elements, such as <assert>
to declare test assertions
to be tested by the Jumbo test, <instruction>
to give instructions
to the testers, <start>
to declare the initial .txml document, and
<dep>
to declare other dependent documents. <assert>
can contain CDATA that represents the description of the test assertion, but it is currently empty (that information is already present in the Assertion Manifest for each assertion, see below).
The <start>
element references the
main test file and may optionally be followed by one or more
<dep>
elements that identifies other resources
useful to complete the test case. Here's the DTD for the
Manifest:
<!ELEMENT assert (#PCDATA)> <!ATTLIST assert id CDATA #REQUIRED spec CDATA #IMPLIED optional (true | false) #IMPLIED manual (true | false) #IMPLIED teststartuptype (alerting | connected | noconnection) #IMPLIED > <!ELEMENT dep EMPTY> <!ATTLIST dep uri CDATA #REQUIRED type CDATA #IMPLIED > <!ELEMENT start EMPTY> <!ATTLIST start uri CDATA #REQUIRED type CDATA #IMPLIED > <!ELEMENT instruction (#PCDATA)> <!ELEMENT test ((assert*, instruction*)+, start, dep*)> <!ATTLIST test id CDATA #REQUIRED spec CDATA #REQUIRED manual (true | false) "false" teststartuptype (alerting | connected | noconnection) #REQUIRED > <!ELEMENT tests (test+)>
Jumbo test typology is defined by several attributes on the
<test>
element. These attributes allow for
a more complete identification of the nature of the current
assertion and an idea of related tests structure.
alerting
”,
“connected
”,
“noconnection
”, see Appendix A.1.2
for definition;<start>
and <dep>
elements
are characterized by the following attributes:
For instance here’s a fragment of the
manifest.xml
document:
<?xml version="1.0"?> <tests> […] <test id="10_2_2_A" teststartuptype="alerting" spec="10.2.2"> <assert id="283"/> <assert id="285"/> <start uri="10_2_2_A/10_2_2_A.txml"/> <dep uri="10_2_2_A/test.vxml"/> </test> […] </tests>
The "manifest.assert.xml
" is a file containing the complete
information about test assertions included in the Jumbo tests.
The structure of the Assertion Manifest
presents a root element called <tests>
; this is
the container of all the Test Assertions. Every Test Assertion is
represented by a <test>
element containing
a single <assert>
element to give specific
information on the Test Assertion. <assert>
must contain CDATA
that represents the description of the test assertion.
Here's the DTD for the Assertion
Manifest:
<!ELEMENT assert (#PCDATA)> <!ATTLIST assert id CDATA #REQUIRED spec CDATA #REQUIRED optional (true | false) "false" manual (true | false) "false" teststartuptype (alerting | connected | noconnection) #IMPLIED > <!ELEMENT test (assert)> <!ELEMENT tests (test+)>
The Test Assertion is defined by several attributes on the
<assertion>
element. These attributes allow for
a more complete identification of the nature of the current test
assertion.
alerting
”,
“connected
”,
“noconnection
”;For instance here’s a fragment of the
manifest.xml
document:
<?xml version="1.0"?> <tests> […] <test> <assert id="606" optional="false" manual="false" spec="6.2.1"> <![CDATA[The <ccxml> can designate the CCXML namespace. This can be achieved by declaring an xmlns attribute or an attribute with an "xmlns" prefix.]]> </assert> </test> […] </tests>
The "ccxml10-ir-results-template.xml
"
report template has to be filled by the company following the rules
described in Section 3. An excerpt of
the Template is shown below:
<system-report name="YOUR-SYSTEM-NAME-HERE"> <testimonial> YOUR-WELL-FORMED-TESTIMOMIAL-CONTENT-HERE</testimonial> <assert id="Id1" res="pass|fail|not-impl">OPTIONAL-NOTES-HERE</assert> [...] <assert id="Idn" res="pass|fail|not-impl">OPTIONAL-NOTES-HERE</assert> </system-report>
A specific stylesheet transforms the meta markup language used to write the tests into valid CCXML 1.0 documents (the stylesheet is described in Appendix A.5). The stylesheet tranformation for dynamic CCXML/VoiceXML documents is described in Appendix B.7.
The CCXML 1.0 Implementation Report includes over 1200 assertions with 565 actually implemented in this Report. The Voice Browser Working Group would like to acknowledge the contributions of several individuals for authoring and reviewing assertions and for working on the test suite development. Without their help this activity would have been impossible:
The Voice Browser Working Group would also like to acknowledge the following contributors:
This Implementation Report was modified based on the comments sent to the Voice Browser public list as follows. Each ISSUE is linked to the modified test, where a comment is present to clarify all the assertions changed.