数据格式描述语言(DFDL) v 1.0的当前实现不支持无序列表。有解决方法吗?
问问题
836 次
2 回答
1
根据 DFDL 1.0 规范,IBM 的实现现在支持 dfdl:sequenceKind="unordered"。
于 2015-10-09T15:13:32.260 回答
0
是的,有一个解决方法。举个简单的例子,假设输入文本只是一组字符(a、b 和 c),它们可以以任意顺序出现。要创建无序列表,请为每个字符创建一个元素。将它们放在包含元素中,以使容器具有无限的最大出现次数,并且子元素都是选择。
从概念上讲,它看起来像这样:
Container Element
Choice
A Element
B Element
C Element
使用鉴别器来测试每个字符是否存在。
DFDL 模式看起来像这样(部分)
<xsd:element name="Container" dfdl:occursCountKind="implicit"
dfdl:terminator="" maxOccurs="unbounded" minOccurs="1" >
<xsd:complexType>
<xsd:choice>
<xsd:element name="a" dfdl:length="1" dfdl:lengthKind="explicit"
fixed="a" minOccurs="1" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:discriminator>{. eq 'a'}</dfdl:discriminator>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="b" dfdl:length="1" dfdl:lengthKind="explicit"
fixed="b" minOccurs="1" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:discriminator>{. eq 'b'}</dfdl:discriminator>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="c" dfdl:length="1" dfdl:lengthKind="explicit"
fixed="c" minOccurs="1" type="xsd:string">
<xsd:annotation>
<xsd:appinfo source="http://www.ogf.org/dfdl/">
<dfdl:discriminator>{. eq 'c'}</dfdl:discriminator>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
:
于 2013-03-06T15:38:17.953 回答