XMLは時々私を混乱させますが、私はこれを理解しようとしています。ベンダーが私に言っていることは意味がありませんが、XMLと私はうまくいきません:)
ベンダーのWebサービスに送信するXMLがあり、ランダムなエラーが発生しています。
<root>
<Request>
<Driver id="1" VehId="1">...</Driver>
<Driver id="2" VehId="1">...</Driver>
<Driver id="3" VehId="2">...</Driver>
<Vehicle id="1">...</Vehicle>
<Vehicle id="2">...</Vehicle>
<Driver id="4" VehId="2">...</Driver>
</Request>
</root>
XMLが有効かどうかを確認するために比較するXSLTまたはXSDはありません。
ベンダーは、ドライバー#4が間違った領域にあるため、XMLは無効であると述べています。 DriverのXPathはroot/Request/Driverで、Vehicleはroot/Request/Vehicleです。
特にXMLと比較するXSDがない場合、XMLパーサーが要素の順序を強制することは一般的ですか?ベンダーのサポートが遅いので、よくある慣行を教えてください。
フォローアップ
私は、これをテストできないことについて(そして、彼らが単にサポート金を得ようとしているように聞こえたように)私たちのアカウント担当者に十分に不満を述べました。だから私は間違ったグループと話していました* facepalm *
XSDを取得しましたが、要素の特定の順序を強制します。
独自のサンプルXMLに関して彼らと戦うためにスキーマに準拠していませんが、少なくとも今はテストする必要があります。
手元にXSD(XMLスキーマ)がない場合、確認できるのは、XMLが整形式であるかどうかだけです。
あなたの場合-それはそうです。重複するXMLタグ、開いたままのXMLタグ、またはそのようなものはありません。
ベンダーがXML内での注文などを強制する必要がある場合は、XSDファイルを提供する必要があります。そうでない場合、ベンダーの「要件」を検証およびチェックできません。
私はこれが古いことを知っていますが、私はポストに出くわしました。
今日まで、私はDoes XML care about the order of elements?
の質問にNo, unless you use a poorly written xml parser.
で答える可能性が高いです
しかし、今日、サードパーティのアプリケーションから、私が作成したxmlファイルが無効であるとの不満がありました。 XSD
ファイルを使用してXMLを検証します。そしてはい、xsdファイル内の順序または要素を強制できます。
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ComplexType">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" default="" name="Value1" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" default="" name="Value2" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
キーワードは xs:sequence
Sequence要素は、子要素がシーケンスに現れる必要があることを指定します。各子要素は、0から任意の回数発生できます。
これは xs:all
とは対照的です。これは順序を気にせず、ゼロまたは1回だけ発生する要素を許可します。
子要素を任意の順序で表示できることを指定します。各子要素は0回または1回発生します
(sequence
とall
はどちらも Compositor と呼ばれるもので、 XMLスキーマ定義。)
XMLスキーマは要素の順序を強制できます。スキーマがない場合、順序もタグも一般的な構造もテキストの種類(それが数値などの場合)ではなく、理論的には規定されています。もちろん、ここではそうではありません。
順序を気にせずにXMLからデータを解析*することは完全に可能ですが、特定の順序であると仮定すると、解析が簡単になります(たとえば、SAXを使用している場合や、非常にずさんなコードを書くのが面倒な場合)。 。特定の順序が必要な場合はshouldにスキーマが含まれますが、パーサーがいずれにせよそれを詰まらせる可能性は十分にあります。はい、彼らはこれをすべきではありませんが、明らかに気にしません。
*「解析」とは、「そのXMLドキュメントを取得して、それをDOMなどに変換する」という意味ではなく、「DOMを取得して、そこから情報を抽出する」という意味です。
ベンダーは彼らがすることをするでしょうが、それは注文に依存するXMLの非標準のアプリケーションです。
XMLは手続き型ではなく、宣言型です。したがって、「段階的」であってはなりません。
DOMでXMLにアクセスすると、XMLドキュメントでのノードの順序が維持されます。ここを見て:
http://www.w3schools.com/dom/dom_nodes_nodelist.asp
そこで見つけます:
ノードリストオブジェクトは、XMLと同じ順序でノードのリストを表します。
Webサービスが注文に依存している場合は別の質問です。Webサービスの実装によって異なります。
XMLスキーマは要素の順序を強制する場合としない場合があります。問題のスキーマによって異なります。最も一般的な意味では、適切なスキーマで特に指定されていない限り、XML要素の順序は重要ではありません。
まあ、私は最良の答えは、彼らに尋ねることだと思います。 XMLをテキストファイルとして解析している可能性もあるため、改行と「正しい」属性の順序が必要になる場合があります。
それらが正しく解析される場合、順序は重要ではありません(少なくとも有効な要求に関しては)。私が見ると、2つのテーブルを作成し、それらを指定されたIDで結合する必要があります。