Оптимальная генерация кода JAXB XJC и оптимальная схема XML с наследованием

Было много подобных вопросов, которые фокусировались на одном аспекте оптимизации, но каждое решение имело неприятный недостаток.

Предположим, я хочу разработать XML-схему (XSD), которая позволяет использовать следующие документы и генерировать классы с использованием XJC:


    ...
    ...
    ...
    ...

Схема должна моделировать иерархию типов ( Bookи Journal являются подклассами публикации ). Естественно, это также должно быть случай для сгенерированных классов Java.

Я попробовал следующие подходы, у всех из которых есть одна серьезная проблема:

1.) моделирование Каталога, содержащего xsd:choiceвсех возможных подтипов.


    
        
        
    







    



    
        
        
    

...

Проблема здесь в том, что я должен упомянуть все возможные подтипы в элементе selection, которых может быть много в реальном приложении. Незначительная проблема заключается в том, что хотя атрибут Catalogueимеет правильный тип List, он имеет уродливое имя bookAndMagazine. Из-за избыточного определения схемы это не вариант!

2.) моделирование Каталога, содержащего xsd:sequenceродительского класса


    
        
    

Это работает, только если XML-документы сформулированы как . Так что не вариант!

3.) Используйте substitutionGroup, как указано здесь http://www.xfront.com/ElementHierarchy.html


    
        
    







    



    
        
        
    

...

Здесь генерация кода является проблемой, поскольку внутренний элемент Каталогасопоставляется с List>, а не Список. Следовательно, и это не вариант.

Как объединить все мои цели?:

  • каноническая, неизбыточная схема, моделирующая наследование (например, 2.)или 3.))
  • простые и чистые классы Java, сгенерированные из этой схемы и моделирующие наследование (как в 2.)и частично в 1.))
  • чистые XML-документы (не такие, как в 2.))
  • использование стандартного JAXB и предпочтительнее небольшое количество обязательных метаданных

И если нет решения, отвечающего всем этим целям, какое из них вы бы предпочли?

5
задан rainer198 12 April 2012 в 14:43
поделиться