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.

Ответ 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-серверах). Следите за конфликтами версий, которые могут быть кошмаром для изоляции и отладки.