1

xml-dsig 標準に従ってデジタル署名用の要素への参照を作成する場合、「id」属性の大文字と小文字は重要ですか?

「ID」、「Id」、「id」という名前の属性を見たことがありますが、一部のソフトウェア パッケージでは、さまざまなフォームの正しい要素/ノードを見つけるのに問題があります。

また、さまざまな仕様とスキーマに従って、さまざまな id 属性が予想されます。

確かに、属性には「id」という名前を付ける必要がありますが、ケースが指定されているか、それとも推奨事項しかありませんか?

4

2 に答える 2

2

本質的な問題は 2 つあります。まず、ご存じのとおり、XML では大文字と小文字が区別されます。

次に、XML はID 属性の名前を「定義」しません。要素が 'id' 属性を持つ可能性があると言う HTML とは異なり、XML 自体はそうではありません。タイプの概念はありますがxs:ID、属性の名前 ( ID、 、IdidなどmyIdentifier) はデフォルトでは提供されません。

参照については、W3Cを参照してください。.

したがって、一部の解析ソフトウェアは を想定しid、一部はidID、のいずれかを想定し、一部は何Idも想定しません。

より具体的には、通常ID、SAML 署名での使用を目にします。一般的に使用されるコマンドxmlsec1は、使用する名前を識別しないため、使用する必要があります。例えば:

xmlsec1 --decrypt --privkey-pem /foo/key.pem --id-attr:ID EncryptedKey my.xml

xmlsec1 に、名前付きID属性をEncryptedKeyノード (のみ) で既知の xs:ID 属性として宣言するように指示します。それは相加的であるように見えます:あなたは倍数を行うことができます:

xmlsec1 --decrypt ... --id-attr:Id EncryptedKey --id-attr:ID EncryptedKey --id-attr:id EncryptedKey 

EncryptedKey ノードで any を使用します。

(xs:ID 属性であると宣言foobarすることができ、それは問題なく動作するので、ソース XML に次のようなものがある場合:

<node foobar="1234"/>
<otherNode URI="#1234"/>

使用する:

xmlsec1 --id-attr:foobar node ...
于 2018-10-12T15:46:09.683 に答える
1

(注:私はxml-dsigの専門家ではないことを知っておく必要があるため、XML、DTD、およびXMLスキーマに関する限りのみ回答します。)

XMLでは大文字と小文字が区別されるため、大文字と小文字は重要であり、使用しているDTDまたはスキーマと同じである必要があります。

もちろん、アプリケーションがさまざまなケースでさまざまなスキーマを使用する場合、互換性の問題があります。

http://www.w3.org/TR/xmldsig-core/で公式のW3C仕様を確認しましたが、スキーマとDTDで「Id」が指定されているようです。これはあなたが使用している仕様ですか?

また、対応するDTDタイプが「ID」であり、「id」と呼ばれるXQuery関数があることを知っていると混乱する可能性があります。

于 2010-03-19T13:57:04.610 に答える