2013-03-06 17 views

回答

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> 

1

IBM的實現目前支持DFDL:sequenceKind = 「無序」 爲每DFDL 1.0規範。