scalaxb和多个组

时间:2014-02-08 09:24:04

标签: scala xsd scalaxb

在MusicXML(http://scalaxb.org)上使用scalaxb 1.1.2(http://www.musicxml.com/for-developers/),我得到了以下代码段:

<xs:complexType name="part-list">
    <xs:sequence>
        <xs:group ref="part-group" minOccurs="0" maxOccurs="unbounded"/>
        <xs:group ref="score-part"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:group ref="part-group"/>
            <xs:group ref="score-part"/>
        </xs:choice>
    </xs:sequence>
</xs:complexType>

这会导致非法继承:

  trait DefaultGeneratedPartu45listFormat extends scalaxb.ElemNameParser[generated.Partu45list] 
    with GeneratedPartu45groupGroupFormat 
    with GeneratedScoreu45partGroupFormat 
    with GeneratedPartu45groupGroupFormat {

    ...    
  }

正如您所看到的,GeneratedPartu45groupGroupFormat的双重继承会使编译失败。

所以我有两个问题:

  1. 有没有办法通过将XSD更改为解决此问题 与scalaxb相同的东西?

  2. 有没有办法让scalaxb来处理这个问题 感激?

1 个答案:

答案 0 :(得分:1)

  

我目前对使用XML解析器感兴趣,所以我对一些允许我这样做的XSD hack感兴趣;)。

这是一个简单的替换,你可以用来解析编译的语法:

<xs:complexType name="part-list">
  <xs:choice maxOccurs="unbounded">
    <xs:group ref="part-group" />
    <xs:group ref="score-part" />
  </xs:choice>
</xs:complexType>
  

一旦我提供了一小段可以触发此错误的XML,我肯定会打开一个问题。

这是一个可以重现问题的快速示例XSD:

<xs:schema targetNamespace="http://www.example.com/music"
        elementFormDefault="qualified"
        xmlns="http://www.example.com/music"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:music="http://www.example.com/music">
  <xs:complexType name="part-list">
      <xs:sequence>
          <xs:group ref="part-group" minOccurs="0" maxOccurs="unbounded"/>
          <xs:group ref="score-part"/>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:group ref="part-group"/>
              <xs:group ref="score-part"/>
          </xs:choice>
      </xs:sequence>
  </xs:complexType>

  <xs:group name="part-group">
    <xs:sequence>
      <xs:element name="part" type="xs:string"/>
    </xs:sequence>
  </xs:group>

  <xs:group name="score-part">
    <xs:sequence>
      <xs:element name="score" type="xs:string"/>
    </xs:sequence>
  </xs:group>
</xs:schema>

请在Github上提交问题。