0

次のように xmlns 宣言を持つ XML があります。

<dc:record xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mods="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd">

この行は、Python で eTree XML パーサーをトリップしているようです。

lxml.etree.XMLSyntaxError: xmlns:mods: 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd' is not a valid URI, line 6, column 63

xmlns:mods 宣言で見つかった 2 つの URI のいずれかを削除すると、正常に解析されます。

したがって、xmlns 要素は人間の解析を支援するために存在し、具体的に延期することを意図していないことを知っていることは、これが XML に対する真の制約 (xmlns 名前空間宣言に単一の URI を持つこと) であるか、またはlxml etree パーサー?

4

2 に答える 2

3

ここで lxml.etree が正しいことをしていると思います。

仕様によると、名前空間宣言属性には、「IRI参照 (名前空間を識別する名前空間名) または空の文字列」の値が必要です。

あなたの例には属性 value がありますが"http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd"、これは有効な IRI ではありません (コロンが間違った場所にあるなど)。

于 2013-04-08T02:59:01.237 に答える
1

名前空間名が有効な URI でなければならないかどうかの問題は、厄介なものです。確かに、ここにあるものは間違っています。ただし、パーサーが「熱心すぎる」かどうかは別の問題です。

名前空間 1.1 仕様では、セクション 8 で、「名前空間名が正当な IRI であることを確認する必要がないことを除いて、プロセッサは名前空間の整形式の違反を報告する必要があります」と述べています。

実際には、ほとんどのパーサーはこのチェックを行わず、大部分のソフトウェア製品が仕様の条項の実施に寛容になると、それを実施するソフトウェアはユーザーに人気がなくなり始めます。

于 2013-04-08T07:23:47.363 に答える