Data Format Description Language (DFDL) v1.0 Specification
OGF Proposed Recommendation GFD-P-R.174, January 31, 2011
A discriminator determines the existence or non-existence of a component. If the discriminator is successful then the component is known to exist and any subsequent errors will not cause backtracking at points of uncertainty. If a discriminator is unsuccessful then the component is known not to exist and backtracking occurs immediately.
If the complex type of an element contains a sequence group as its content then if the sequence group is known not to exist, then the element is known not to exist.
<dfdl:discriminator >
{../recType eq 0}
</dfdl:discriminator>
<dfdl:discriminator test="{ ../recType eq 0}" />
When the discriminator’s expression evaluates to "false", then it causes a processing error, and the discriminator is said to fail.
A DFDL discriminator contains a test expression that is an expression that evaluates to true or false. The discriminator is said to be successful if the test evaluates to true and unsuccessful (or fails) if the test evaluates to false.
<dfdl:discriminator test="{test expression}" />
<dfdl:discriminator >
{test expression}
</dfdl:discriminator>
It is a schema definition error if a property is specified in more than one form.
It is a schema definition error if both a test expression and a test pattern are specified.
A dfdl:discriminator can be an annotation on
When the discriminator’s expression evaluates to "false", then it causes a processing error, and the discriminator is said to fail.
A DFDL discriminator contains a test expression that is an expression that evaluates to true or false. The discriminator is said to be successful if the test evaluates to true and unsuccessful (or fails) if the test evaluates to false.
<dfdl:discriminator test="{test expression}" />
<dfdl:discriminator >
{test expression}
</dfdl:discriminator>
It is a schema definition error if a property is specified in more than one form.
It is a schema definition error if both a test expression and a test pattern are specified.
A dfdl:discriminator can be an annotation on
a local xs:element declaration
an xs:element reference
an xs:group reference (when the top level of a choice branch)
an xs:sequence (when the top level of a choice branch)
an xs:choice (when the top level of a choice branch)
Any one annotation point can contain only a single dfd:discriminator or one or more dfdl:asserts, but not both. It is a schema definition error otherwise
Property Name |
Description |
---|---|
testKind |
Enum Valid values are 'expression', 'pattern' Default value is 'expression' Specifies whether a DFDL expression or DFDL regular expression is used in the dfdl:discriminator . Annotation: dfdl:discriminator |
test |
DFDL Expression Applies when dfdl:testKind is 'expression' A DFDL expression that evaluates to true or false. If the expression evaluates to true then the discriminator succeeds and parsing continues. If the expression evaluates to false then the discriminator fails and a processing error is raised. If a processing error occurs during the evaluation of the test expression then the discriminator also fails. Any element referred to by the expression must have already been processed or is a descendent of this element. The expression must have been evaluated by the time this element and it descendents have been processed or when a processing error occurs when processing this element or its descendents. It is a schema definition error if dfdl:test is the empty string and the value is not specified and dfdl:testKind is 'expression' or not specified Annotation: dfdl:discriminator |
testPattern |
DFDL Regular Expression Applies when dfdl:testKind is 'pattern' A DFDL regular expression that is executed against the data stream starting at the start of the component on which the dfdl:discriminator is positioned. If the length of the match is zero then the dfdl:discriminator evaluates to false and a processing error is raised. If the length of the match is non-zero then the dfdl:discriminator evaluates to true. It is a schema definition error if dfdl:testPattern is the empty string and the value is not specified and dfdl:testKind is 'pattern'. Annotation: dfdl:discriminator |
message |
String Defines text to be used as a diagnostic code or for use in an error message. The DFDL specification does not specify how a DFDL processor uses this message text. Annotation: dfdl:discriminator |
<xs:sequence>
<xs:choice>
<xs:element name='branchSimple' >
<xs:annotation>
<xs:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:discriminator test='{. eq "a"}' />
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name='branchComplex' >
<xs:annotation>
<xs:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:discriminator test='{./identifier eq "b"}' />
</xs:appinfo>
</xs:annotation>
<xs:complexType >
<xs:element name='identifier' />
…..
</xs:complexType>
</xs:element>
<xs:element name='branchNestedComplex' >
<xs:annotation>
<xs:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:discriminator test='{./Header/identifier eq "c"}'/>
</xs:appinfo>
</xs:annotation>
<xs:complexType >
<xs:sequence>
<xs:element name='Header' />
<xs:complexType >
<xs:sequence>
<xs:element name='identifier' />
…..
</xs:sequence>
</xs:complexType>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
Copyright (C) Open Grid Forum (2005-2010). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the OGF or other organizations, except as needed for the purpose of developing Grid Recommendations in which case the procedures for copyrights defined in the OGF Document process must be followed, or as required to translate it into languages other than English.