3

私のWebサービスが「xmlns」、「xmlns:xsi」、「xsi:schemaLocation」が有効なURIではないプレースホルダー(たとえば「blahblahblah」など)に設定されたXMLを発行し、そのサービスが多数のシステムから使用されたとします。のユーザーは、彼のXMLパーサーがプレースホルダーを気に入らないことに気づきました。

今、私はそれで何かをしなければなりません。オプションの1つは、「xmlns」、「xmlns:xsi」、および「xsi:schemaLocation」属性を削除することです。

それらを削除すると、既存のユーザーが壊れる可能性がありますか?そのようなXMLは有効でしょうか?

4

2 に答える 2

2

以前xmlnsにドキュメント要素に属性があった場合、すべての XML 要素 (プレフィックスなし) が名前空間にあったことを意味します。その名前空間を削除すると、これはもはや真実ではなくなり、(名前空間を認識する) パーサーの出力が変更されます。そして、おそらく、解析されたデータで動作するプログラムの動作です。

例として、XML 要素が名前空間にある場合、Java で XPath を使用することは異なります: How to query XML using namespaces in Java with XPath? . 受け入れられた回答は、名前空間に依存しない方法で XPath を使用する方法を示していますが、ほとんどのプログラムはおそらくこのアプローチを使用しません。

XML は引き続き有効である必要があります (実際には整形式です)。検証をサポートする適切な XML エディター (たとえば Eclipse を含む) で簡単に確認できます。しかし、スキーマへの参照を削除したため、スキーマによって設定された規則ではなく、基本的な XML 規則 (前述のように整形式であること) のみが検証の対象となります。

要するに、はい、クライアントを壊すかもしれませんが、はい、XML は (おそらく) まだ有効です。

于 2012-09-26T13:16:38.017 に答える
1

以前に整形式であった場合、XML ファイルは整形式のままです。とにかく xsi:location 属性を持つ適切なスキーマ ドキュメントを指していないため、有効性は実際には適用されません。

実際、あなたのファイルを検証しようとしているのはおそらくユーザーだけです。残りのコンシューマーは、プレースホルダーで問題なく動作していました。あなたのブラブラブラ発明を「認識する」ように特別にカスタマイズされたソフトウェアを持っていない限り、それらはそれらの属性仕様がまったくなくてもうまくいくかもしれません。

于 2012-12-29T02:45:13.417 に答える