API Java для анализа файла схемы XSD
Существует ли Java API для анализа файла схемы XSD?
Я нашел XSOM, но, похоже, он больше не поддерживается.
Ответы
Ответ 1
Использование стандартного JDK 6:
System.setProperty(DOMImplementationRegistry.PROPERTY, "com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl");
DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
com.sun.org.apache.xerces.internal.impl.xs.XSImplementationImpl impl = (XSImplementationImpl) registry.getDOMImplementation("XS-Loader");
XSLoader schemaLoader = impl.createXSLoader(null);
XSModel model = schemaLoader.loadURI("src/test/resources/my.xsd");
Ответ 2
Мы обычно использовали Apache Xerces http://xerces.apache.org/. Хорошо работает для нас.
Ответ 3
Вы можете использовать XMLBeans http://xmlbeans.apache.org. Для большинства случаев использования XML/Java привязки людей, похоже, перемещаются в JAXB, поскольку они встроены. Но для того, что вы хотите сделать, XMLBeans обеспечивает доступ к некоторым большим структурам данных высокого уровня, которые представляют схемы таким образом, траверс.
Вы можете начать с чего-то вроде...
SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
XmlObject.Factor.parse(xsdFile) }, XmlBeans.getBuiltInTypeSystem(), null);
Оттуда вы сможете выяснить, как сверлить в SchemaTypeSystem из JavaDoc.
Если кто-то знает альтернативу, которая удобна и относительно поддерживается, было бы здорово узнать об этом. Я активно смотрю.
Ответ 4
Попробуйте EasyWSDL - он может анализировать как XSD спецификации WSDL.
Ответ 5
JAXB
Смотрите question
Ответ 6
public class XsdElements {
public static void main(String args[]) {
try {
// parse the document
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("C:/Users/rb054/Desktop/Descriptor.1.5.1.xsd"));
NodeList list = doc.getElementsByTagName("xs:element");
//loop to print data
for(int i = 0 ; i < list.getLength(); i++)
{
Element first = (Element)list.item(i);
if(first.hasAttributes())
{
String nm = first.getAttribute("name");
System.out.println(nm);
String nm1 = first.getAttribute("type");
System.out.println(nm1);
}
}
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
catch (SAXException e)
{
e.printStackTrace();
}
catch (IOException ed)
{
ed.printStackTrace();
}
}
}
Ответ 7
Как уже упоминалось, сама схема является действительной XML. Что вы хотите загрузить, для проверки? Если это так, в пакете javax.xml.validation
есть несколько удобных классов.
Ответ 8
Зависит от ваших конкретных требований. Эта страница дает хороший обзор основных вариантов и вариантов использования, которые они поддерживают.
О чем подумать: в зависимости от платформы, которую вы развертываете, и других фреймворков, которые вы используете, в вашем дереве зависимостей могут быть разные API-интерфейсы (например, xerces особенно распространен в App-серверах). Следите за конфликтами версий, которые могут быть кошмаром для изоляции и отладки.
Ответ 9
Я использовал этот Xerces, но он не анализирует группы подстановки абстрактных элементов. Пожалуйста, напишите мой вопрос https://stackoverflow.com/info/25203139/parsing-a-abstract-node-with-substitutiongroup-using-apache-xerces-api-in-java