如何在DFDL中创建无序列表?

时间:2013-03-06 14:55:20

标签: dfdl

Data Format Description Language(DFDL)v 1.0的当前实现不支持无序列表。有解决方法吗?

2 个答案:

答案 0 :(得分:1)

IBM的实现现在支持dfdl:sequenceKind =“unordered”,符合DFDL 1.0规范。

答案 1 :(得分: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>