1

私の問題の解決策は非常に簡単だと思いますが、見つけることができませんでした。

異なる名前の要素のリストを持つ XML がありますが、順番に並んでいます。例:

<DOC>
 <DOC_OBL_1>
  <TIP_DOC_OBL>1</TIP_DOC_OBL> 
 </DOC_OBL_1>
 <DOC_OBL_2>
  <TIP_DOC_OBL>2</TIP_DOC_OBL> 
 </DOC_OBL_2>
 <DOC_OBL_3>
  <TIP_DOC_OBL>3</TIP_DOC_OBL>  
 </DOC_OBL_3>
</DOC>

したがって、 DOC_OBL_1 、 DOC_OBL_2 、および DOC_OBL_3 の3つの要素があります。はい、番号 4、5、6 などがある可能性があります。ご覧のとおり、3 つすべてが同じ要素を内部に持っています (実際には、それらには多くの要素がありますが、今は重要ではありません)。宣言できると思いました。この種のドキュメントを検証できる一般的なタイプ。

これをスキーマで検証するにはどうすればよいですか???

私はそれが非常に醜い XML であることを知っています (おそらくそれは標準ではないので、教えてください、私にはわかりません) が、この文書を作成することは私の関心事ではありません。私はそれを解析し、検証し、変換するだけです。

4

2 に答える 2

2

残念ながら、xml要素名には基本的にシーケンス番号/識別子が含まれています。私はそれが不十分に定義された(非標準の)XMLだと思います。

私の限られた(!)経験では、これは、xsdスキーマにシーケンスで定義されたすべての可能な「DOC_OBL_N」要素が必要であることを意味します。それらの数に理論上の上限がない場合、これはおそらく実用的ではありません。

有効なxmlである限り、それをロードして要素DOCのすべての子をカウントし、その場でスキーマを作成することができますが、それは自滅のように聞こえます。

これにより、いくつかのxpathを使用してxmlインスタンスを手動で検証する必要が生じる可能性があります。これは、ブルートフォースアプローチの一種であり、xsdスキーマに対して技術的に検証するものではありません。

于 2009-08-19T12:46:31.640 に答える
2

そうですね、もちろんできます!実際には非常に単純です。各要素の構造が同じである場合、<xs:complexType>それを検証するために単一を定義してから、次を使用できます。

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="DOC" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="DOC">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="DOC_OBL_1" type="DocType" />
        <xs:element name="DOC_OBL_2" type="DocType" />
        <xs:element name="DOC_OBL_3" type="DocType" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="DocType">
    <xs:sequence>
      <xs:element name="TIP_DOC_OBL" type="xs:string" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

それはあなたのために働きますか?それはあなたのすべてのニーズを処理しますか?

Zach が非常に正しく指摘しているように、この「解決策」は、任意の数のタグ DOC_OBL_1、DOC_OBL_2、....、DOC_OBL_x を処理できないため、明らかにかなり制限されています。名前とタグの数を知る必要があります。事前に。

これは残念なことですが、この不自由な XML を考えると、これが唯一の解決策です。実際の解決策は、次のようなものにすることです。

<DOC>
  <DOC_OBL id="1">
  </DOC_OBL>
  <DOC_OBL id="2">
  </DOC_OBL>
  .....
  <DOC_OBL id="x">
  </DOC_OBL>
</DOC>

そして、XML スキーマはさらに簡単になり、任意の数の<DOC_OBL>タグを処理できるようになります。

しかし、GIGO の原則が適用されます。ガベージ イン、ガベージ アウト ==> くだらない XML 構造が入ってくると、くだらない不完全な検証しかできません。

マルク

于 2009-08-19T12:39:17.627 に答える