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 сделает компиляцию несчастной.

Итак, у меня есть два вопроса:

  1. Есть ли способ обойти эту проблему, изменив XSD на эквивалент, который понимает scalaxb?

  2. Есть ли способ настроить скалаксб для решения этой проблемы с благодарностью?

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.

Другие вопросы по тегам