3

実装された型の要素名が xs:simpleType であるシーケンス内のすべての子要素を選択しようとしています。

<xs:complexType name="Truck">
    <xs:complexContent>
        <xs:extension base="Car">
            <xs:sequence>
                <xs:element name="DriverName" type="Name">
                    ...
                </xs:element>
                <xs:element name="Engine" type="TruckEngine">
                    ...                   
                </xs:element>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

タイプ「名前」は次のようになります。

<xs:simpleType name="Name">
    ...
</xs:simpleType>

「TruckEngine」は次のようになります。

<xs:complexType name="TruckEngine">
    ... 
</xs:complexType>

DriverName 要素を選択する XPATH を作成するにはどうすればよいですか? これまでのところ、 xs:complexType/xs:complexContent/xs:extension/xs:sequence/xs:element のようなものがありますが、選択をさらに改善する方法がわかりません。このようなものを選択するためにどの用語を使用すればよいかわからないため、関連情報を検索するのに非常に苦労しました. 例をより一般的なものに変更しました。

4

2 に答える 2

3

スキーマの作成者が使用する規則を知らない限り、スキーマ ドキュメントから情報を抽出することは困難です (ほとんど不可能です)。たとえば、DevNull (受け入れた) のソリューションは、型が同じスキーマ ドキュメントで定義されている場合にのみ機能し、名前付き (匿名ではない) 型に対してのみ機能し、targetNamespace のないスキーマ ドキュメントに対してのみ機能します。 .

オーサリング規則に関係なく任意のスキーマで機能する、より一般的なソリューションについては、この方法で実行しようとしないでください。スキーマ プロセッサによる分析に続いて、「調理された」スキーマ コンポーネントにアクセスできるスキーマ API を使用してください。1 つのアプローチは、コンポーネントをスキーマ化するための Java API を提供する Xerces を使用することです。もう 1 つは、単一のドキュメントで「調理された」スキーマ コンポーネントの XML 表現を提供する Saxon の SCM 形式を使用することです。

于 2012-07-20T08:23:48.317 に答える
2

あなたが使用することができます:

//xs:element[@type = //xs:simpleType/@name]

を使用する代わりに、より明示的なパスをお勧めしますが//

(編集:eqに変更=)

于 2012-07-19T22:37:17.070 に答える