2009-11-12 2 views
1

Каков самый простой способ получить статически типизированное представление XML-схемы (.XSD) в Java?Получение объектного представления файла .XSD в Java

Более конкретно я хочу, чтобы иметь возможность пройти все программно определенный simpleType: S и ComplexType: сек в XSD, получить определенные элементы и их типы и т.д.

Что-то вдоль линий:

for (XsdComplexType complexType : document.getDefinedComplexTypes()) { 
    .. 
} 

Обратите внимание: я говорю об объектном представлении документа .XSD. Я не ищу xjc стиль создания классов Java из схемы XML.

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

ответ

2

Ознакомьтесь с библиотекой Castor XML-библиотеки Schema. И SchemaReader, чтобы загрузить его. Это должно быть именно то, что вы ищете.

Содержит методы, такие как:


public java.util.Enumeration getComplexTypes() 
    Returns: 
     an Enumeration of all top-level ComplexType declarations 
-2

Почему бы просто не прочитать его как документ DOM, а затем сделать все, что вы хотите с ним сделать?

+0

От вопроса: «Один подход был бы просто применить стандартные инструменты для чтения XML в файл .xsd, но я бы предположить, есть с открытым исходным кодом библиотеки, вокруг которого может помочь мне решить эту проблему ». – knorv

+0

Переосмысление того, что вам нужно на самом деле делать (как в терминах проблемы для решения). То, что я вижу из вашего отредактированного утверждения, легко выполнимо в XSLT с XPath. –

0

В то время как я согласен и хочу повторить два других (на данный момент) ответов, которые предлагаются с использованием стандартного инструмента, такого как dom4j или jdom, я бы хотел установить предложение о стене. Вы можете использовать JiBX или другой инструмент привязки данных XML для создания объектов Java по своему вкусу непосредственно из XML схемы.

Или вы можете просто использовать стандартный парсер DOM.

+0

См. Мое обновленное сообщение с псевдокодом. Надеюсь, это прояснит ситуацию. – knorv

+0

Макс: Я думаю, вы имеете в виду применить JAXB (или другое) к «Схеме для схем» для создания объектов Java, соответствующих элементам XML-схемы. Эта схема для схемы не полностью определяет XML-схему, но ее может быть достаточно для привязки. В приложении A спецификации XML-схемы: http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/#normative-schemaSchema – 13ren

+0

@ 13ren: В моих путешествиях я обнаружил, что JAXB немного переработанный. Но это только мое мнение. JiBX тоже может выглядеть так, когда применяется неправильно. Во всяком случае, я чувствую, что существует небольшая разница между использованием представления схемы OO и стандартным DOM. Чтобы оправдать первое, POJO должны нести некоторую внутреннюю ценность, такую ​​как специальные аспектные схемы, которые были бы нетривиальны для реализации в простой DOM. –

3

Вы посмотрели Apache XmlSchema? Я никогда не использовал его, но он кажется хорошим.

+0

Просто любопытно - почему downvote? Кто-то имеет отрицательные отзывы об Apache XmlSchema? –

+0

Согласен, это похоже на http: //ws.apache.org/commons/XmlSchema/schematutorial.html # чтение, хотя навигация не рассматривается подробно. – 13ren

+0

Он используется для этой цели внутри Apache CXF. – bmargulies

1

Попробуйте org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader. Вот пример кода, который фрагмент может работать:

org.apache.ws.jaxme.generator.sg.SchemaSG schema = JaxbSchemaReader.parse(schema); 
org.apache.ws.jaxme.generator.sg.TypeSG types = schema.getTypes(); 
for (TypeSG type : types) { 
    if (type.getComplexTypeSG() != null) { 
      //do something here 
    } 
} 
+0

получил пару downvotes на этот ответ ... кто-нибудь знает, если этот ответ полностью отключен? – Thimmayya

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