1

目の前に問題があります - 完全なスキーマ解析 (インクルード、インポート、再定義) です。問題は、構文解析ではなく、このスキーマから型を解決することです。問題を説明するために、例を次に示します。

スキーマ.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:myprefix="http://myhost.ru/service/" xmlns:anprefix="http://anotherhost.ru/pub-service/" targetNamespace="http://myhost.ru/service/">
    <xs:import namespace="http://anotherhost.ru/pub-service/" schemaLocation="anotherhost_schema.xsd"/>

    <xs:complexType>
        <xs:sequence>
            <xs:element name="ServiceCode" type="anprefix:ServiceCodeType">
                <xs:annotation>
                    <xs:documentation>Service code</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="MessageClass" type="myprefix:MessageClassType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="MessageClassType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="REQUEST">
                <xs:annotation>
                    <xs:documentation>Request from client
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="RESPONSE">
                <xs:annotation>
                    <xs:documentation>Response to client</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

</xs:schema>

anotherhost_schema.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:anprefix="http://anotherhost.ru/pub-service/" targetNamespace="http://anotherhost.ru/pub-service/">
    <xs:simpleType name="ServiceCodeType">
        <restriction base="xs:string">
        </restriction>
    </xs:simpleType>
</xs:schema>

例はそれほど難しくありませんが、実際の問題ははるかに大きくなります。私の問題は、スキーマを解析し、その内部表現 (フォーム ジェネレーターと要求ハンドラーが使用するもの) を作成することです。たとえば、次のようになります。

{
    "ServiceCode": {"string", String.class, "Service code"},
    "MessageClass": {"string", {"REQUEST":"Request from client","RESPONSE":"Response to client"}, ""}
}

内部表現はさまざまですが、Java で使用する場合は単純です。そのような図書館はありますか?XML 解析用に特別に作成された JAXB と呼ばれるライブラリがあることは知っていますが、それを問題にバインドする方法がわかりません。

4

0 に答える 0