Date: 18 December 2003
Copyright ©2003 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark, document use and software licensing rules apply.
The Speech Recognition Grammar Specification entered the Candidate Recommendation period on 26th June 2002. The planned date for exiting Candidate Recommendation was 30 August 2002. However, it took more time than originally expected to meet the exit criteria.
This document contains the results of particular SRGS implementations that were tested against the SRGS Test Set. The results verify that the specification is implementable and demonstrate the interoperability of implementations.
A few features cannot be fully covered by pass/fail testing for the following reasons:
The test set nevertheless contains tests for these features which, however, merely focus on the syntax. Statements on the implementability and utility of these features are contained in the testimonials listed below.
All required features in the SRGS specification have been implemented separately at least twice. All optional features have been implemented at least once.
One feature, more precisely, a special case of a particular feature has been removed from the specification due to insufficient coverage by implementations (test cases tag-repetition.grxml and tag-repetition.gram). Another feature, language attachments on rule references, has been removed from the specification because the group received negative feedback from implementers (test cases lang-ruleref.grxml and lang-ruleref.gram).
Note: This Implementation Report did not attempt conformance testing of implementations. The data presented here is intended solely to be used as proof of SRGS implementability and interoperability. It is only a snapshot of the current implementation behaviors. This data is not intended to be used for assessing or grading the performance of any individual implementation.
All six user agents are implemented, as listed below:
In addition, an XML -> ABNF converter (grammar processor) has been implemented.
Note 1: Unless noted otherwise, the root rule is imported for all grammar documents.
Note 2: Quotes were added around any token that contained whitespace in the meta in.X declarations to simplify tokenization in the automated testing procedure. In abnf-keywords.gram, for example,meta 'in.1' is 'lexicon and public base';was replaced by
meta 'in.1' is 'lexicon and "public base"';
Note 3: Although the grammar processors can handle any combination of languages, our ASR engine can currently only provide missing pronunciations in the default language. If a grammar with en as the default language contained both "xyz!en" and "xyz!es", for example, "xyz!es" would have to be provided in a lexicon while "xyz!en" could be pronounced using letter-to-sound rules.
Microsoft has implemented the XML Form of the Speech Recognition Grammar Specification (SRGS) in a developmental version of the Microsoft Speech API (SAPI).
SAPI is an API which allows developers to use speech recognition and/or speech synthesis in their applications. To conduct the tests specified in the implementation report, a text-input interface was used with SAPI's core grammar processor. Given SAPI's ability to use the core grammar processor in speech, DTMF and text environments, we believe this successfully demonstrates coverage of SRGS in the following agents required by the Implementation Report Plan :
As required by the Implementation Report plan, some technical details of the SAPI implementation are as follows:
The following features are not supported :
BeVocal has provided advanced VoiceXML 2.0 and grammar (XML and ABNF) features to our developer community through frequent releases to BeVocal Cafe (http://cafe.bevocal.com). This has enabled BeVocal to provide real implementation feedback about SRGS to the W3C Voice Browser Working Group.
The SRGS Candidate Recommendation is a significant milestone to the voice industry and also the voice application development community. Not only is it already implemented and used in production by a number of voice solutions providers like BeVocal, but it is well-written, concise, with clear examples for developers.
In addition to an XML form, SRGS provides a more concise ABNF form for grammar developers. At BeVocal, both forms create the same internal representation, which is a testament to how well the two forms are aligned in design and features.
BeVocal is providing the following Implementation Report on a specific set of ABNF features which have been implemented and tested on an internal prototype. An estimated production release for these features is in the next release following our Q1 release.
Note also that BeVocal has implemented rule weights and repeat probabilities as described in SRGS, in both our ABNF and XML implementation.
SpeechWorks has implemented the W3C Speech Recognition Grammar Specification fully in OpenSpeech Recognizer, our high performance network-based speech recognition engine that is optimized for VoiceXML applications. Through this native implementation we provide an easy path for telephony platform vendors to support the grammar specification in their own DTMF- and ASR-capable products. The SpeechWorks implementation features complete multilingual capabilities allowing arbitrary grammatical constructs using an unlimited number of languages and Unicode character encodings, along with embedded ECMA-262 scripts for application-specific search pruning and semantic result computation. Based on our own experience and feedback from many partners and customers, we give a strong endorsement to SRGS as practical, expressive, and complete.
Note: While we did implement language attachments on rule references, this feature was found to be unnecessary and confusing to many users. We support its removal.
Loquendo believes in the W3C standardization activity for the global speech technology market and announces the W3C Speech Recognition Grammar Specification implementation in Loquendo ASR product, which is part of the high-quality Loquendo Speech Suite. Loquendo's Speech Suite offers all that is necessary for developing any kind of flexible speech-enabled services. It enables you to choose from Loquendo's technological components range including Loquendo TTS, Loquendo ASR and VoiceXML Interpreter, and exploits them using a flexible integration infrastructure.
The current implementation fully supports the XML format of W3C SRGS (ABNF format is not yet supported) and it is being extended to support DTMF input.
Loquendo implementation was run on the official test set ("srgs-test-set-20021017.zip") by applying the following changes: ignore the removed tests ("tag-repetition", "lang-ruleref") and manual update to the latest tests regarding media-type handling. The tests ran on a development version of the grammar processor which allows a better internal LPS output structure.
Technical details of Loquendo implementation are the following:
Section | XML | ABNF | ||
---|---|---|---|---|
Number of tests | Coverage | Number of tests | Coverage | |
Section 2. Rule Expansions | 44 | 100% | 50 | 100% |
Section 3. Rule Definitions | 10 | 100% | 11 | 100% |
Section 4. Grammar Documents | 34 | 100% | 40 | 100% |
Section 5. Conformance | 8 | 100% | 7 | 100% |
Appendix E. DTMF Grammars | 4 | 100% | 6 | 100% |
Appendix J. Example Grammars | 8 | 100% | 6 | 100% |
Total | 109 | 100% | 121 | 100% |
The following two tables indicate the outcome of each single test. Possible outcomes are "pass", "fail" or "no-lang". "Pass" means that the output of the grammar processor was equivalent to the output specified in the respective test file for all inputs in this test file. "No-lang" means the recognizer did not have the capability to support a specific language or combination of languages required for a grammar.
Tests marked as "removed" in the status column have been removed from the test set because the tested feature has been removed from the specification.
Test ID | Ref | Description | Level | Speech Server from Lucent Speech Solutions | Microsoft SAPI | IBM Java Speech API support for W3C Speech Recognition Grammar Specification | SpeechWorks OpenSpeech Recognizer | Loquendo Speech Suite | Status |
---|---|---|---|---|---|---|---|---|---|
token-basic.grxml | 2.1 | basic tokens | required | pass | pass | pass | pass | pass | complete |
token-quoted.grxml | 2.1 | quoted tokens | required | pass | pass | pass | pass | pass | complete |
token-unicode.grxml | 2.1 | Unicode tokens | required | pass | pass | pass | pass | pass | complete |
token-element.grxml | 2.1 | token delimited by "token" element | required | pass | pass | pass | pass | pass | complete |
ruleref-nonexistent-local.grxml | 2.2 | reference to a non-existent local rule reference | required | pass | pass | pass | pass | pass | complete |
duplicated-rulenames.grxml | 2.2 | duplicate rulenames | required | pass | pass | pass | pass | pass | complete |
duplicated-special-rulenames.grxml | 2.2 | redefining special rulenames | required | pass | pass | pass | pass | pass | complete |
ruleref-local.grxml | 2.2.1 | local rule reference | required | pass | pass | pass | pass | pass | complete |
ruleref-ext-rule.grxml | 2.2.2 | reference to a named rule of a grammar identified by a URI | required | pass | pass | complete | |||
ruleref-ext-root.grxml | 2.2.2 | reference to the root rule of a grammar identified by a URI | required | pass | pass | complete | |||
ruleref-ext-rule-mediatype.grxml | 2.2.2 | reference to a named rule of a grammar identified by a URI with a Media Type | required | pass | pass | complete | |||
ruleref-ext-root-mediatype.grxml | 2.2.2 | reference to the root rule of a grammar identified by a URI with a Media Type | required | pass | pass | complete | |||
ruleref-mismatch-modes.grxml | 2.2.2 | modes do not agree between rulerefs | required | pass | pass | pass | pass | pass | complete |
ruleref-mismatch-mediatype.grxml | 2.2.2 | media type specified does not match actual content | required | pass | pass | complete | |||
special-null.grxml | 2.2.3 | special rule definitions ($NULL) | required | pass | pass | pass | pass | pass | complete |
special-void.grxml | 2.2.3 | special rule definitions ($VOID) | required | pass | pass | pass | pass | pass | complete |
special-garbage.grxml | 2.2.3 | special rule definitions ($GARBAGE) | required | pass | pass | pass | pass | pass | complete |
lang-ruleref.grxml | 2.2.5 | xml:lang attribute on ruleref | optional | pass | no-lang | no-lang | pass | removed | |
sequence-token.grxml | 2.3 | sequence of tokens | required | pass | pass | pass | pass | pass | complete |
sequence-ruleref.grxml | 2.3 | sequence of rule references | required | pass | pass | pass | pass | pass | complete |
sequence-ruleref-token.grxml | 2.3 | sequence of tokens and rule references | required | pass | pass | pass | pass | pass | complete |
sequence-item-empty.grxml | 2.3 | empty item element | required | pass | pass | pass | pass | pass | complete |
sequence-item-whitespace.grxml | 2.3 | element containing only whitespace | required | pass | pass | pass | pass | pass | complete |
alternatives-no-weights.grxml | 2.4 | a set of alternatives with no weights | required | pass | pass | pass | pass | pass | complete |
alternatives-all-weights.grxml | 2.4 | a set of alternatives with a legal weight on every alternative | required | pass | pass | pass | pass | pass | complete |
alternatives-some-weights.grxml | 2.4 | a set of alternatives with legal weights on one or many but not all alternatives | required | pass | pass | pass | pass | pass | complete |
alternatives-one-with-weight.grxml | 2.4 | a single alternative with a weight | required | pass | pass | pass | pass | pass | complete |
alternatives-one-no-weight.grxml | 2.4 | a single alternative without a weight | required | pass | pass | pass | pass | pass | complete |
alternative-null.grxml | 2.4 | alternative reference to NULL | required | pass | pass | pass | pass | pass | complete |
alternative-one-tag.grxml | 2.4 | alternative reference to a single tag | required | pass | pass | pass | pass | pass | complete |
alternative-one-item.grxml | 2.4 | one-of element containing a single item | required | pass | pass | pass | pass | pass | complete |
repeat-n-exact.grxml | 2.5 | 2.5 repeat an expansion exactly "n" times | required | pass | pass | pass | pass | pass | complete |
repeat-m-n-times.grxml | 2.5 | repeat an expansion between "n" and "m" times | required | pass | pass | pass | pass | pass | complete |
repeat-m-or-more.grxml | 2.5 | repeat an expansion "m" or more times | required | pass | pass | pass | pass | pass | complete |
repeat-optional.grxml | 2.5 | optional expansion | required | pass | pass | pass | pass | pass | complete |
repeat-with-probs.grxml | 2.5 | repeat probabilities | required | pass | pass | pass | pass | pass | complete |
repeat-optional-void.grxml | 2.5 | optional VOID equivalent to NULL | required | pass | pass | pass | pass | pass | complete |
repeat-many-null.grxml | 2.5 | any number of NULL's is equivalent to a single NULL | required | pass | pass | pass | pass | pass | complete |
repeat-0-times.grxml | 2.5 | zero repetitions never matched | required | pass | pass | pass | pass | pass | complete |
tag-many.grxml | 2.6 | any number of tags may be included | required | pass | pass | pass | pass | pass | complete |
tag-repetition.grxml | 2.5 | any number of possible repetitions of a tag is equivalent to a single instance of the tag | required | fail | fail | pass | fail | removed | |
tag-standalone.grxml | 2.6 | standalone tags are legal | required | pass | pass | pass | pass | pass | complete |
xml_lang-token-single-lang.grxml | 2.7 | xml:lang attribute on token | optional | pass | no-lang |
pass |
pass | pass | complete |
xml_lang-item-single-lang.grxml | 2.7 | xml:lang attribute on item | optional | pass | no-lang | pass | pass | pass | complete |
xml_lang-one-of-single-lang.grxml | 2.7 | xml:lang attribute on one-of | optional | pass | no-lang | pass | pass | pass | complete |
lang-sequence.grxml | 2.7 | xml:lang attribute on sequence | optional | pass | no-lang | pass | pass | pass | complete |
rule-basic-def.grxml | 3.1 | rule definition | required | pass | pass | pass | pass | pass | complete |
rule-no-empty.grxml | 3.1 | no empty expansions | required | pass | pass | pass | pass | pass | complete |
rule-tag.grxml | 3.1 | single tag expansion | required | pass | pass | pass | pass | pass | complete |
rule-empty-item.grxml | 3.1 | empty item expansion | required | pass | pass | pass | pass | pass | complete |
rule-null.grxml | 3.1 | NULL expansion | required | pass | pass | pass | pass | pass | complete |
rule-private.grxml | 3.2 | declaration of private rule | required | pass | pass | pass | pass | pass | complete |
rule-public.grxml | 3.2 | declaration of public rule | required | pass | pass | pass | pass | pass | complete |
ruleref-ext-private-root.grxml | 3.2 | external reference to private root rule | required | pass | pass | pass | pass | pass | complete |
ruleref-ext-private-rule.grxml | 3.2 | external reference to private non-root rule | required | pass | pass | pass | pass | pass | complete |
example.grxml | 3.3 | example phrases | required | pass | pass | pass | pass | pass | complete |
no-rules.grxml | 4 | Grammar with no rules | required | pass | pass | pass | pass | pass | complete |
no-version.grxml | 4 | Grammar with no version | required | pass | pass | pass | pass | pass | complete |
no-namespace.grxml | 4 | XML grammar with no namespace | required | pass | pass | pass | pass | pass | complete |
no-doctype.grxml | 4 | XML grammar with no DOCTYPE | required | pass | pass | pass | pass | pass | complete |
doctype.grxml | 4 | XML grammar with a DOCTYPE | required | pass | pass | pass | pass | pass | complete |
korean-yesno-utf16-le.grxml | 4.2 | UTF16 Little Endian Korean XML grammar | required | pass | pass | pass | pass | no-lang | complete |
korean-yesno-utf16-be.grxml | 4.2 | UTF16 Big Endian Korean XML grammar | required | pass | pass | pass | pass | no-lang | complete |
header-encoding-none.grxml | 4.4 | no character encoding | required | pass | pass | pass | pass | pass | complete |
korean-yesno-utf8.grxml | 4.4 | UTF8 Korean XML grammar | required | pass | pass | pass | pass | no-lang | complete |
language-missing.grxml | 4.5 | language declaration missing is an error | required | pass | pass | pass | pass | pass | complete |
language-en-us.grxml | 4.5 | language declaration of en-US for mode="voice" | required | pass | pass | pass | pass | pass | complete |
language-other.grxml | 4.5 | other language declaration for mode="voice" | required | pass | pass | pass | pass | pass | complete |
language-dtmf-ignore.grxml | 4.5 | language declaration ignored for mode="dtmf" | optional | pass | pass | pass | pass | fail | complete |
no-language-no-mode.grxml | 4.5 | Grammar with no mode and no language | required | pass | pass | pass | pass | pass | complete |
mode-none.grxml | 4.6 | no mode declaration implies voice | required | pass | pass | pass | pass | pass | complete |
mode-voice.grxml | 4.6 | mode declaration voice | required | pass | pass | pass | pass | pass | complete |
mode-dtmf.grxml | 4.6 | mode declaration dtmf | optional | pass | pass | pass | pass | fail | complete |
root-rule-decl.grxml | 4.7 | root rule declaration | required | pass | pass | pass | pass | pass | complete |
root-rule-decl-missing.grxml | 4.7 | root rule declaration missing | required | pass | pass | pass | pass | pass | complete |
uri-ref-undefined-root-referenced.grxml | 4.7 | grammar ref with no fragment and no root rule | required | pass | pass | pass | pass | pass | complete |
uri-ref-undefined-root-referring.grxml | 4.7 | grammar ref with no fragment and no root rule | required | pass | pass | pass | pass | pass | complete |
undefined-root.grxml | 4.7 | reference to undefined root rule | required | pass | pass | pass | pass | pass | complete |
tag-format-decl.grxml | 4.8 | tag format declaration | required | pass | pass | pass | pass | pass | complete |
tag-format-decl-missing.grxml | 4.8 | omitted tag format declaration | required | pass | pass | pass | pass | pass | complete |
base-declaration.grxml | 4.9 | base uri declaration | required | pass | pass | pass | pass | pass | complete |
metabase-declaration.grxml | 4.9.1 | meta declaration of base uri | required | pass | pass | pass | pass | pass | complete |
base-metabase.grxml | 4.9.1 | base uri precedence | required | pass | pass | pass | pass | pass | complete |
lexicon-none.grxml | 4.10 | zero pronunciation lexicon declarations | required | pass | pass | pass | pass | pass | complete |
lexicon-one.grxml | 4.10 | one pronunciation lexicon declaration | required | pass | pass | pass | pass | fail | complete |
lexicon-many.grxml | 4.10 | many pronunciation lexicon declarations | required | pass | pass | pass | pass | fail | complete |
meta.grxml | 4.11 | meta declarations | required | pass | pass | pass | pass | pass | complete |
meta-http.grxml | 4.11 | HTTP response headers | required | pass | pass | pass | pass | pass | complete |
rdf-metadata.grxml | 4.11.2 | RDF meta data | required | pass | pass | pass | pass | pass | complete |
comment-xml.grxml | 4.12 | comments | required | pass | pass | pass | pass | pass | complete |
conformance-1.grxml | 5.4 | conforming grammar processor: parse all language declarations | required | pass | pass | pass | pass | pass | complete |
conformance-2.grxml | 5.4 | inform hosting environment of unsupported language | required | pass | pass | pass | pass | pass | complete |
conformance-3.grxml | 5.4 | activate root, single public rule, set of public rules or roots of one or many grammars directly or indirectly referenced (multiple languages) | optional | pass | no-lang | pass | pass | pass | complete |
conformance-4.grxml | 5.4 | activate root, single public rule, set of public rules or roots of one or many grammars directly or indirectly referenced (same language) | required | pass | pass | pass | pass | pass | complete |
conformance-5.grxml | 5.4 | handling of non-standard elements and attributes | required | pass | pass | pass | pass | pass | complete |
recursion.grxml | 5.4 | recursive grammar | optional | pass | pass | pass | fail | pass | complete |
conformance-6.grxml | 5.4 | inform hosting environment if unable to process content | required | pass | pass | pass | pass | pass | complete |
conformance-7.grxml | 5.7 | references to ABNF grammars within XML grammars | optional | pass | pass | pass | pass | pass | complete |
dtmf-sequence.grxml | AppE | simple DTMF grammar with a sequence | optional | pass | pass | pass | pass | fail | complete |
dtmf-full.grxml | AppE | DTMF grammar with alternatives and sequences | optional | pass | pass | pass | pass | fail | complete |
dtmf-pound-star.grxml | AppE | DTMF grammar with "pound" and "star" as symbols | optional | pass | pass | pass | pass | fail | complete |
dtmf-simple.grxml | AppE | simple DTMF grammar with one character | optional | pass | pass | pass | pass | fail | complete |
example-1.grxml | AppJ.1 | Example 1 XML | required | pass | pass | pass | pass | pass | complete |
example-2-booking.grxml | AppJ.2 | Example 2 booking | required | pass | pass | pass | pass | pass | complete |
example-2-places.grxml | AppJ.2 | Example 2 places | required | pass | pass | pass | pass | pass | complete |
example-3-korean-yesno-unicode.grxml | AppJ.3 | Example 3 | required | pass | pass | pass | pass | no-lang | complete |
example-3-korean-yesno-utf8.grxml | AppJ.3 | Example 3 | required | pass | pass | pass | pass | no-lang | complete |
example-4-chinese-digits-unicode.grxml | AppJ.4 | Example 4 Chinese digits | required | pass | pass | pass | pass | no-lang | complete |
example-4-chinese-digits-utf8.grxml | AppJ.4 | Example 4 Chinese digits | required | pass | pass | pass | pass | no-lang | complete |
example-5-swedish-boolean.grxml | AppJ.5 | Example 5 Swedish boolean | required | pass | pass | pass | pass | pass | complete |
Test ID | Ref | Description | Level | Speech Server from Lucent Speech Solutions | IBM Java Speech API support for W3C Speech Recognition Grammar Specification | BeVocal Foundation Platform | Status |
---|---|---|---|---|---|---|---|
token-basic.gram | 2.1 | basic tokens | required | pass | pass | complete | |
token-quoted.gram | 2.1 | quoted tokens | required | pass | pass | complete | |
token-unicode.gram | 2.1 | Unicode tokens | required | pass | pass | complete | |
token-element.gram | 2.1 | token delimited by "token" element | required | pass | pass | complete | |
ruleref-nonexistent-local.gram | 2.2 | reference to a non-existent local rule reference | required | pass | pass | complete | |
duplicated-rulenames.gram | 2.2 | duplicate rulenames | required | pass | pass | complete | |
duplicated-special-rulenames.gram | 2.2 | redefining special rulenames | required | pass | pass | complete | |
ruleref-local.gram | 2.2.1 | local rule reference | required | pass | pass | complete | |
ruleref-ext-rule.gram | 2.2.2 | reference to a named rule of a grammar identified by a URI | required | pass | incomplete | ||
ruleref-ext-root.gram | 2.2.2 | reference to the root rule of a grammar identified by a URI | required | pass | incomplete | ||
ruleref-ext-rule-mediatype.gram | 2.2.2 | reference to a named rule of a grammar identified by a URI with a Media Type | required | pass | incomplete | ||
ruleref-ext-root-mediatype.gram | 2.2.2 | reference to the root rule of a grammar identified by a URI with a Media Type | required | pass | incomplete | ||
ruleref-mismatch-modes.gram | 2.2.2 | modes do not agree between rulerefs | required | pass | pass | complete | |
ruleref-mismatch-mediatype.gram | 2.2.2 | media type specified does not match actual content | required | pass | pass | complete | |
special-null.gram | 2.2.3 | special rule definitions ($NULL) | required | pass | pass | complete | |
special-void.gram | 2.2.3 | special rule definitions ($VOID) | required | pass | pass | complete | |
special-garbage.gram | 2.2.3 | special rule definitions ($GARBAGE) | required | pass | pass | complete | |
lang-ruleref.gram | 2.2.5 | language attachment on ruleref | optional | pass | no-lang | removed | |
sequence-token.gram | 2.3 | sequence of tokens | required | pass | pass | complete | |
sequence-ruleref.gram | 2.3 | sequence of rule references | required | pass | pass | complete | |
sequence-ruleref-token.gram | 2.3 | sequence of tokens and rule references | required | pass | pass | complete | |
sequence-parentheses-empty.gram | 2.3 | empty parenthetical | required | pass | pass | complete | |
sequence-parentheses.gram | 2.3 | parenthesis for explicit encapsulation | required | pass | pass | complete | |
alternatives-no-weights.gram | 2.4 | a set of alternatives with no weights | required | pass | pass | complete | |
alternatives-all-weights.gram | 2.4 | a set of alternatives with a legal weight on every alternative | required | pass | pass | complete | |
alternatives-some-weights.gram | 2.4 | a set of alternatives with legal weights on one or many but not all alternatives | required | pass | pass | complete | |
alternatives-one-with-weight.gram | 2.4 | a single alternative with a weight | required | pass | pass | complete | |
alternative-null.gram | 2.4 | alternative reference to NULL | required | pass | pass | complete | |
alternative-empty-paren.gram | 2.4 | alternative reference to "()" | required | pass | pass | complete | |
alternative-one-tag.gram | 2.4 | alternative reference to a single tag | required | pass | pass | complete | |
repeat-abnf-symbols.gram | 2.5 | "*" and "?" reserved | required | pass | pass | complete | |
wrong-repeat-abnf-symbols.gram | 2.5 | illegal use of "*", "+" and "?" | required | pass | pass | complete | |
repeat-n-exact.gram | 2.5 | 2.5 repeat an expansion exactly "n" times | required | pass | pass | complete | |
repeat-m-n-times.gram | 2.5 | repeat an expansion between "n" and "m" times | required | pass | pass | complete | |
repeat-m-or-more.gram | 2.5 | repeat an expansion "m" or more times | required | pass | pass | complete | |
repeat-optional.gram | 2.5 | optional expansion | required | pass | pass | complete | |
repeat-with-probs.gram | 2.5 | repeat probabilities | required | pass | pass | complete | |
repeat-optional-void.gram | 2.5 | optional VOID equivalent to NULL | required | pass | pass | complete | |
repeat-many-null.gram | 2.5 | any number of NULL's is equivalent to a single NULL | required | pass | pass | complete | |
repeat-0-times.gram | 2.5 | zero repetitions never matched | required | pass | pass | complete | |
tag-many.gram | 2.6 | any number of tags may be included | required | pass | pass | complete | |
tag-repetition.gram | 2.5 | any number of possible repetitions of a tag is equivalent to a single instance of the tag | required | fail | pass | removed | |
tag-standalone.gram | 2.6 | standalone tags are legal | required | pass | pass | complete | |
tag-delimit-1.gram | 2.6 | tag delimited by "{" and "}" | required | pass | pass | complete | |
wrong-tag-delimit-1.gram | 2.6 | wrong use of tag delimiters | required | pass | pass | complete | |
tag-delimit-2.gram | 2.6 | tag delimited by "{!{" and "}!}" | required | pass | pass | complete | |
wrong-tag-delimit-2.gram | 2.6 | wrong use of tag delimiters | required | pass | pass | complete | |
lang-attachment-token-single-lang.gram | 2.7 | language attachment on token | optional | pass | pass | complete | |
lang-attachment-item-single-lang.gram | 2.7 | language attachment on item | optional | pass | pass | complete | |
lang-attachment-one-of-single-lang.gram | 2.7 | language attachment on one-of | optional | pass | pass | complete | |
lang-sequence.gram | 2.7 | language attachment on sequence | optional | pass | pass | complete | |
abnf-precedence.gram | 2.8 | precedence | required | pass | pass | pass | complete |
rule-basic-def.gram | 3.1 | rule definition | required | pass | pass | complete | |
rule-no-empty.gram | 3.1 | no empty expansions | required | pass | pass | complete | |
rule-tag.gram | 3.1 | single tag expansion | required | pass | pass | complete | |
rule-empty-item.gram | 3.1 | empty item expansion | required | pass | pass | complete | |
rule-null.gram | 3.1 | NULL expansion | required | pass | pass | complete | |
rule-private.gram | 3.2 | declaration of private rule | required | pass | pass | complete | |
rule-public.gram | 3.2 | declaration of public rule | required | pass | pass | complete | |
ruleref-ext-private-root.gram | 3.2 | external reference to private root rule | required | pass | pass | complete | |
ruleref-ext-private-rule.gram | 3.2 | external reference to private non-root rule | required | pass | pass | complete | |
example.gram | 3.3 | example phrases | required | pass | pass | complete | |
example-end.gram | 3.3 | comment with example at the end | required | pass | pass | complete | |
no-rules.gram | 4 | Grammar with no rules | required | pass | pass | complete | |
no-version.gram | 4 | Grammar with no version | required | pass | pass | complete | |
unrecognized-header.gram | 4 | Unrecognized ABNF Header | required | pass | pass | complete | |
multiple-header.gram | 4 | Multiple ABNF Header | required | pass | pass | complete | |
korean-yesno-utf16-le.gram | 4.2 | UTF16 Little Endian Korean grammar | required | pass | pass | complete | |
korean-yesno-utf16-be.gram | 4.2 | UTF16 Big Endian Korean grammar | required | pass | pass | complete | |
byte-order-mark.gram | 4.2 | byte order mark preceding # | required | pass | pass | complete | |
byte-order-mark-unicode.gram | 4.2 | byte order mark preceding # | required | pass | pass | complete | |
no-abnf-sih-header.gram | 4.2 | Invalid ABNF Self-identifying header | required | pass | pass | complete | |
wrong-abnf-sih-version.gram | 4.2 | Wrong version number in ABNF Self-identifying header | required | pass | pass | complete | |
no-abnf-sih-version.gram | 4.2 | Missing version number in ABNF Self-identifying header | required | pass | pass | complete | |
abnf-sih-header-no-newline.gram | 4.2 | No newline after ABNF header | required | pass | pass | complete | |
header-encoding-none.gram | 4.4 | no character encoding | required | pass | pass | complete | |
korean-yesno-utf8.gram | 4.4 | UTF8 Korean ABNF grammar | required | pass | pass | complete | |
language-missing.gram | 4.5 | language declaration missing is an error | required | pass | pass | pass | complete |
language-en-us.gram | 4.5 | language declaration of en-US for mode="voice" | required | pass | pass | complete | |
language-other.gram | 4.5 | other language declaration for mode="voice" | required | pass | pass | complete | |
language-dtmf-ignore.gram | 4.5 | language declaration ignored for mode="dtmf" | optional | pass | pass | complete | |
no-language-no-mode.gram | 4.5 | Grammar with no mode and no language | required | pass | pass | pass | complete |
mode-none.gram | 4.6 | no mode declaration implies voice | required | pass | pass | complete | |
mode-voice.gram | 4.6 | mode declaration voice | required | pass | pass | complete | |
mode-dtmf.gram | 4.6 | mode declaration dtmf | optional | pass | pass | complete | |
root-rule-decl.gram | 4.7 | root rule declaration | required | pass | pass | complete | |
root-rule-decl-missing.gram | 4.7 | root rule declaration missing | required | pass | pass | complete | |
uri-ref-undefined-root-referenced.gram | 4.7 | grammar ref with no fragment and no root rule | required | pass | pass | complete | |
uri-ref-undefined-root-referring.gram | 4.7 | grammar ref with no fragment and no root rule | required | pass | pass | complete | |
undefined-root.gram | 4.7 | reference to undefined root rule | required | pass | pass | complete | |
tag-format-decl.gram | 4.8 | tag format declaration | required | pass | pass | complete | |
tag-format-decl-missing.gram | 4.8 | omitted tag format declaration | required | pass | pass | complete | |
base-declaration.gram | 4.9 | base uri declaration | required | pass | pass | complete | |
metabase-declaration.gram | 4.9.1 | meta declaration of base uri | required | pass | pass | pass | complete |
base-metabase.gram | 4.9.1 | base uri precedence | required | pass | pass | complete | |
lexicon-none.gram | 4.10 | zero pronunciation lexicon declarations | required | pass | pass | complete | |
lexicon-one.gram | 4.10 | one pronunciation lexicon declaration | required | pass | pass | complete | |
lexicon-many.gram | 4.10 | many pronunciation lexicon declarations | required | pass | pass | complete | |
meta.gram | 4.11 | meta declarations | required | pass | pass | complete | |
meta-http.gram | 4.11 | HTTP response headers | required | pass | pass | complete | |
comment-abnf.gram | 4.12 | comments | required | pass | pass | complete | |
comment-interspersed.gram | 4.12 | header with comments interspersed | required | pass | pass | complete | |
abnf-keywords.gram | 4.14 | grammar using ABNF keywords | required | pass | pass | complete | |
conformance-1.gram | 5.6 | conforming grammar processor: parse all language declarations | required | pass | pass | pass | complete |
conformance-2.gram | 5.6 | inform hosting environment of unsupported language | required | pass | pass | pass | complete |
conformance-3.gram | 5.6 | activate root, single public rule, set of public rules or roots of one or many grammars directly or indirectly referenced (multiple languages) | optional | pass | pass | complete | |
conformance-4.gram | 5.6 | activate root, single public rule, set of public rules or roots of one or many grammars directly or indirectly referenced (same language) | required | pass | pass | complete | |
conformance-5.gram | 5.6 | inform hosting environment if unable to process content | required | pass | pass | complete | |
recursion.gram | 5.6 | recursive grammar | optional | pass | pass | complete | |
conformance-6.gram | 5.7 | references to XML grammars within ABNF grammars | optional | pass | pass | complete | |
dtmf-simple.gram | AppE | simple DTMF grammar with one character | optional | pass | pass | complete | |
dtmf-sequence.gram | AppE | simple DTMF grammar with a sequence | optional | pass | pass | complete | |
dtmf-full.gram | AppE | DTMF grammar with alternatives and sequences | optional | pass | pass | complete | |
dtmf-pound-star-text.gram | AppE | DTMF grammar with "pound" and "star" as text | optional | pass | pass | complete | |
dtmf-pound-and-star.gram | AppE | DTMF grammar with "pound" and "star" as symbols | optional | pass | pass | complete | |
dtmf-star-no-quotes.gram | AppE | DTMF grammar with "star" unquoted | required | pass | pass | complete | |
example-1.gram | AppJ.1 | Example 1 ABNF | required | pass | pass | complete | |
example-2-booking.gram | AppJ.2 | Example 2 booking | required | pass | pass | complete | |
example-2-places.gram | AppJ.2 | Example 2 places | required | pass | pass | complete | |
example-3-korean-yesno-utf8.gram | AppJ.3 | Example 3 Chinese digits | required | pass | pass | complete | |
example-4-chinese-digits-utf8.gram | AppJ.4 | Example 4 Chinese digits | required | pass | pass | complete | |
example-5-swedish-boolean.gram | AppJ.5 | Example 5 Swedish boolean | required | pass | pass | complete |