Преобразование XSD в древовидную структуру с Java - PullRequest
5 голосов
/ 12 июля 2011

Я хочу создать документацию для схем XML.

Моя цель - проанализировать файл xsd и отобразить его в виде древовидной структуры (с разрешением всех сложных / анонимных типов). Кроме того, мне нужно аннотировать все элементы в этом дереве с их количеством элементов (как определено схемой).

Следующий небольшой пример может помочь прояснить мою проблему.

а) файл xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="client" type="clientType" />
    <xs:complexType name="clientType">
        <xs:sequence minOccurs="1" maxOccurs="1">
            <xs:element name="first_name"/>
            <xs:element name="last_name"/>
            <xs:element name="address" type="addressType" 
                        minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="addressType">
        <xs:sequence>
            <xs:element name="street"/>
            <xs:element name="number" minOccurs="0" maxOccurs="1"/>
            <xs:element name="city"/>
            <xs:element name="zipcode"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

б) Вывод, который я хотел бы увидеть:

client [1]
  first_name [1]
  last_name [1]
  address [1..n]
    street [1]
    number [0..1]
    city [1]
    zipcode [1]

Кто-нибудь знает решение этой проблемы на основе Java? Желательно на основе Eclipse Schema Infoset , но я также рад использовать и другие библиотеки.

Ответы [ 3 ]

1 голос
/ 12 июля 2011

XSOM может нормализовать XSD в понятную структуру данных, которую вы можете зациклить и распечатать.

0 голосов
/ 13 июля 2011

Несмотря на отсутствие надлежащего решения, я бы предложил следующее: использовать инструмент, способный генерировать образец XML-экземпляра на основе XSD, например, Eclipse IDE (поскольку это открытый исходный код, должна быть возможность извлечь соответствующий код и использовать его в автономном решении). Этот XML должен быть очень близок к требуемой древовидной структуре. Затем выполните синтаксический анализ XSD и аннотируйте элементы в сгенерированной структуре XML с помощью числа элементов.

0 голосов
/ 12 июля 2011

Учитывая, что схемы XSD также являются XML, вы можете обработать это как XML, предоставляя вам много вариантов, как это сделать.

Я бы предпочел использовать таблицу стилей XSLT с шаблонами для сопоставления элементов и элементов сложного типа для получения списка вывода, а также дополнительные шаблоны для сопоставления атрибутов minOccurs и maxOccurs для получения вашей мощности.

Примеры таблиц для этого, вероятно, уже доступны онлайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...