web-dev-qa-db-ja.com

Java XSDスキーマファイルを解析するAPI

XSDスキーマファイルを解析するためのJava APIはありますか?

[〜#〜] xsom [〜#〜] が見つかりましたが、もはや維持されていないようです。

19
Henryk Konsek

標準の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");
20
emicklei

Apache Xerces http://xerces.Apache.org/ を使用する傾向があります。私たちにとって本当にうまくいきます。

4
Chris Aldrich

XMLBeans http://xmlbeans.Apache.org を使用できます。 XML/Javaバインディングに関するほとんどのユースケースでは、人々はJAXBが組み込まれているため、JAXBに移行しているように見えます。しかし、XMLBeansは、やりたいことのために、トラバース。

次のようなものから始めることができます...

SchemaTypeSystem sts = XmlBeans.compileXsd(new XmlObject[] {
    XmlObject.Factory.parse(xsdFile) }, XmlBeans.getBuiltinTypeSystem(), null);

そこから、JavaDocからSchemaTypeSystemにドリルする方法を理解できるはずです。

誰かが便利で比較的サポートされている代替手段を知っているなら、それについて知ることは素晴らしいことです。私は積極的に探しています。

4
Chuck
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();
        }
    }
}
4
Roshan Dsouza

EasyWSDL を試してください-XSDとWSDL仕様の両方を解析できます。

2
Martin

[〜#〜] jaxb [〜#〜]

こちらをご覧ください question

1
Marcus

前述のように、スキーマ自体は有効なXMLです。検証のために何をロードしますか?その場合は、javax.xml.validationパッケージに便利なクラスがいくつかあります。

0
Qwerky

特定の要件によって異なります。 このページ は、主要なオプションとそれらがサポートするユースケースの概要を示しています。

考慮すべき点が1つあります。デプロイするプラットフォームや使用している他のフレームワークによっては、依存関係ツリーにさまざまなAPIが既に存在する場合があります(たとえば、アプリケーションサーバーでは特に一般的です)。バージョンの競合に注意してください。バージョンの競合は、分離とデバッグが困難になる場合があります。

0