2009-03-21 13 views
7

XPath式をXML文書と照合して検証できますが、その文書のスキーマに対して同じXPath式を簡単に検証できますか?XMLスキーマに対してXPath式を検証できますか?

は、私はこのようなXSDスキーマを持って言う:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... etc> 
    <xsd:element name="RootData"> 
    <xsd:complexType> 
     <xsd:sequence minOccurs="0"> 
     <xsd:element name="FirstChild"> 
      <xsd:complexType> 
      <xsd:sequence minOccurs="0"> 
       <xsd:element name="FirstGrandChild"> 
... etc etc 

は、XPathことを確認するための簡単または組み込みの方法はあります:

/RootData/FirstChild/FirstGrandChild 

は、任意のXML文書に対して有効になりますそのスキーマに基づいている可能性がありますか? (編集:私は潜在的に有効なを意味推測する。実際のXML文書には、それらの要素が含まれていないかもしれないが、そのXPathはまだスキーマのために潜在的に有効と考えられる/RootData/ClearlyInvalidChild/ThisElementDoesntExistEitherは明らかに無効である、と言うのに対し、。。)

もちろん、これは任意の複雑さよりも標準的なXPath式に対してのみ動作すると期待できますが、それは問題ありません。

私は具体的に.NETで考えていますが、他の実装で可能になったのか不思議です。私は私ができる知っているのに...

/xsd:schema/xsd:element[@name='RootData']/xsd:complexType/xsd:sequence/xsd:element[@name='FirstChild']/...etc... 

:それは、例えば、私は本当に別のもののようにそのXPath式を変換するために自分自身のコードを記述する必要はありません、私は自分自身をロールするほど重要ではありません私が本当にしなければならなかったらそれをしなさい。

乾杯!

+0

XPathはそのXSDに基づく*すべての*ドキュメントに対して有効ではありません。FirstChild(またはFirstGrandChild)が0回発生した場合、後で何をしているのかは分かりません。おそらく、XPathがそのスキーマに基づいていくつかの*文書に対して有効であることを意味します。どうか明らかにしてください。 – 13ren

+0

もちろん、私は "潜在的に有効"を意味します。これは正式なXPathを参照することで私が得ているものですが、可能なXMLドキュメントも想定していることを明確にするために編集しました。 – Gavin

+0

「正規のXPath式」には厳密な技術的定義があるとは思えません。ところで、単純な名前の場合、その変換は正規表現では簡単です(ネストされていないので、残念ながら名前付きの型では機能しません) – 13ren

答えて

6

私たちは実際にこれに関する研究プロジェクトを行い、2000年ごろのXPathベリファイアを実装しました。これはXPath 1のためのものでした。これを行うために使用できる現在利用可能なライブラリは認識していません。

あなたはこの自分を行って、実装したい場合は、ここでいくつかのヒントがあります:

  • あなたは上記そうであるように、スキーマを超えるパスにインスタンス文書の上にパスを変換することができません。たとえば、/a//bは、/xsd:element[@name='a']//xsd:element[@name='b']に変換されません。要素bは、bの下ではなくスキーマの最上位レベルで定義されるためです。

  • XML文書はツリーですが、スキーマはグラフです。// aのような子孫パスを検索する場合は、いつ検索を終了するかを決める必要があります(例えば、 "a"を含む "b"を含む要素 "a"を想像してください)

  • いくつかの道は決定不能であるか、少なくとも決定するのは難しいでしょう。例えば//*[starts-with(@name, 'foo')]

あなたはそれのためにまでまだなら、私はメモリにスキーマをロードし、コードの中であなたのチェックを行うために日食のXSDまたは.NETスキーマクラスをロードするようにライブラリを使用することをお勧め。

+0

あなたの研究プロジェクトは、かなり価値のあるソフトウェアです。 –

3

ツールを使用してサンプルXMLドキュメントを生成し、サンプルに対してXPathを実行できます。 Altova XML SpyはSOAP UIと同様にこの機能を備えています。

SOAP UIは実際にはオープンソース(Java)ですので、サンプルをどのように生成するか見ることができます。実行時の状況(スキーマとXPathが両方とも実行中のプログラムへの入力である場合)では、十分なオプションのコンポーネントを確保し、偽陰性を避けるためにサンプルデータを生成し、複数のサンプルファイルを生成する必要があります。

さまざまなAxesが完全なソリューションを非常に複雑にするため、私はスキーマに対してXPathを直接評価しようとしません。私はそれができると確信していますが、それはハードコアの数学として私を攻撃します。私はショートカットとしてサンプルを生成することを提案する。

関連する問題