2013-05-07 2 views
7

У меня есть входной XMLКак создать XSD из элементов XML

<field> 
    <name>id</name> 
    <dataType>string</dataType> 
    <maxlength>42</maxlength> 
    <required>false</required> 
</field> 

Я ищу для библиотеки или инструмент, который будет принимать экземпляр документа XML и вывода соответствующего XSD-схемы.

Я ищу некоторые Java библиотеки, с которой я могу генерировать XSD для вышеуказанной структуры XML

ответ

1

Вы можете написать XSLT, чтобы сделать что-то такой. Но проблема в том, что одного документа недостаточно для создания схемы. Являются ли какие-либо из этих элементов факультативными? Есть ли что-либо в этом документе, которое может появиться в других случаях? Сколько может быть определенного элемента? Должны ли они быть в таком порядке? Есть множество вещей, которые могут быть выражены в схеме, которые не сразу очевидны из одного экземпляра документа, который соответствует этой схеме.

9

Если все, что вам нужно, это XSD, так что XML, который вы дали, соответствует ему, вам будет намного лучше, создав его самостоятельно, а не используя инструмент.

Никто не знает лучше, чем вы в особенности схемы, например, какие допустимые значения находятся там (например, является <maxlength> элементом, необходимым? Являются true и false единственные допустимые значения для <required>?).

Если вы действительно хотите использовать инструмент (я бы советовал использовать его, если вы не разработали XML и действительно не можете получить настоящий XSD - или если вы его разработали, дважды проверьте сгенерированный XSD) , вы можете попробовать Trang. Он может вывести схему XSD из ряда примеров XML.

Необходимо учитывать, что инструмент XSD может сделать вывод, что вы можете быть неполными или неточными, если образцы XML недостаточно репрезентативны.

java -jar trang.jar sampleXML.xml inferredXSD.xsd 

usage example of Trang here.

+0

Есть ли способ увидеть все выходные параметры для trang? –

+0

Они, похоже, хорошо описаны в [Официальном руководстве Trang] (http://www.thaiopensource.com/relaxng/trang-manual.html#output-modules). –

+0

Я не хочу, чтобы мой xsd использовал теги 'ref' или импорт. Я попробовал -o отключить-абстрактный элемент, но это не работает! –

0

Try XMLBeans у него есть некоторые инструменты, один из них является ins2xsd вы можете найти специфику здесь: http://xmlbeans.apache.org/docs/2.0.0/guide/tools.html Удачи

+1

Добро пожаловать в SO! Несмотря на то, что ссылка в вашем сообщении предоставляет ответ, вы должны предоставить контент в своей ссылке. Позже ссылка может быть недействительной. –

Смежные вопросы