6

問題:

空白が重要でない場合、表現は非常に重要な場合があります。

説明:

XML Schema Part 2: Datatypes Second Editionでは、文字列から派生した型に対して制約ファセットwhiteSpaceが定義されています( http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace )。このwhiteSpaceファセットがreplaceまたはcollapseの場合、値は正規化中に変更される可能性があります。

セクション 4.3.6の最後に次の注記があります。

ここで (およびこの仕様の他の場所で) 使用されている #xA という表記は、ユニバーサル文字セット (UCS) コード ポイントの 16 進数 A (改行) を表し、U+000A で示されます。この表記法は、同じ UCS コード ポイントへの XML 文字参照である とは区別されます。

例:

要素elemのデータ型に空白制約collapse がある場合、(先頭と末尾の空白が削除されます) になる必要が"<elem> text </elem>"ありますが、(文字参照によってエンコードされた空白は削除されません) になる必要があります。"text""<elem>&#x20;text&#x20;</elem>"" text "

質問:

したがって、パーサー/ツリー ビルダーがこの正規化を処理するか、後で処理します。

  • インフォームド解析:
    • 一部の XML 要素を正規化する方法に関する情報をパーサーまたはツリー ビルダーにどこで提供すればよいですか?
    • のようなものはありset_whitespace_normalization('./country/neighbor', 'collapse')ますか?
    • normalize(content)パーサーやツリービルダーのようなフックはありますか?
  • 後処理
    • 一部の要素の元のコンテンツにアクセスするにはどうすればよいですか?
    • elem.original_text" " を返す ,はあり&#x20;text&#x20;ますか?
    • elem.unnormalized_text" " を返す , はありtext ますか?

私は Python の xml.etree.ElementTree を使用したいと思っていますが、その仕事をする他の XML ライブラリを検討します。

免責事項:

もちろん、空白を意味のないもの ( replaceまたはcollapse ) と宣言してから、文字参照を使用してごまかすのは悪いスタイルです。ほとんどの場合、それを防ぐためにデータまたはスキーマのいずれかを変更する必要がありますが、場合によっては、外部 XML スキーマおよび外部 XML ドキュメントを操作する必要があります。そして、上記の注記が完全に存在することは、XML 編集者がこのジレンマを認識しており、意図的にそれを防止しなかったことを示しています。

4

1 に答える 1

3

これは xml.etree.ElementTree の既知のバグのようです: http://bugs.python.org/issue17582。そのバグ レポートによると、これは lxml.etree: https://pypi.python.org/pypi/lxml/で正しく処理されます。

于 2014-02-25T15:55:54.920 に答える