在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
的双重继承会使编译失败。
所以我有两个问题:
有没有办法通过将XSD更改为解决此问题 与scalaxb相同的东西?
有没有办法让scalaxb来处理这个问题 感激?
答案 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上提交问题。