scalaxb и несколько групп
Используя scalaxb 1.1.2 ( http://scalaxb.org/) на MusicXML ( 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?
Есть ли способ настроить скалаксб для решения этой проблемы с благодарностью?
1 ответ
В настоящее время я заинтересован в том, чтобы заставить работать синтаксический анализатор XML, поэтому меня интересовал некоторый взлом XSD, который позволяет мне это делать;).
Вот простая замена, которую вы можете сделать, чтобы разобрать грамматику, которая компилируется:
<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.