xml-dsig 標準に従ってデジタル署名用の要素への参照を作成する場合、「id」属性の大文字と小文字は重要ですか?
「ID」、「Id」、「id」という名前の属性を見たことがありますが、一部のソフトウェア パッケージでは、さまざまなフォームの正しい要素/ノードを見つけるのに問題があります。
また、さまざまな仕様とスキーマに従って、さまざまな id 属性が予想されます。
確かに、属性には「id」という名前を付ける必要がありますが、ケースが指定されているか、それとも推奨事項しかありませんか?
xml-dsig 標準に従ってデジタル署名用の要素への参照を作成する場合、「id」属性の大文字と小文字は重要ですか?
「ID」、「Id」、「id」という名前の属性を見たことがありますが、一部のソフトウェア パッケージでは、さまざまなフォームの正しい要素/ノードを見つけるのに問題があります。
また、さまざまな仕様とスキーマに従って、さまざまな id 属性が予想されます。
確かに、属性には「id」という名前を付ける必要がありますが、ケースが指定されているか、それとも推奨事項しかありませんか?
本質的な問題は 2 つあります。まず、ご存じのとおり、XML では大文字と小文字が区別されます。
次に、XML はID 属性の名前を「定義」しません。要素が 'id' 属性を持つ可能性があると言う HTML とは異なり、XML 自体はそうではありません。タイプの概念はありますがxs:ID
、属性の名前 ( ID
、 、Id
、id
などmyIdentifier
) はデフォルトでは提供されません。
参照については、W3Cを参照してください。.
したがって、一部の解析ソフトウェアは を想定しid
、一部はid
、ID
、のいずれかを想定し、一部は何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 ...
(注:私はxml-dsigの専門家ではないことを知っておく必要があるため、XML、DTD、およびXMLスキーマに関する限りのみ回答します。)
XMLでは大文字と小文字が区別されるため、大文字と小文字は重要であり、使用しているDTDまたはスキーマと同じである必要があります。
もちろん、アプリケーションがさまざまなケースでさまざまなスキーマを使用する場合、互換性の問題があります。
http://www.w3.org/TR/xmldsig-core/で公式のW3C仕様を確認しましたが、スキーマとDTDで「Id」が指定されているようです。これはあなたが使用している仕様ですか?
また、対応するDTDタイプが「ID」であり、「id」と呼ばれるXQuery関数があることを知っていると混乱する可能性があります。