Случай атрибута "id" при подписании элемента в файле XML - PullRequest
1 голос
/ 19 марта 2010

Важен ли случай атрибута "id" при создании ссылки на элемент для цифровой подписи в соответствии со стандартом xml-dsig?

Я видел атрибуты с именами "ID", "Id" и "id", и в некоторых программных пакетах возникают проблемы с поиском правильного элемента / узла для различных форм.

Также, следуя различным спецификациям и схемам, ожидаются разные атрибуты id.

Конечно, атрибут должен называться «id», но указан ли регистр или есть только рекомендации?

Ответы [ 2 ]

1 голос
/ 12 октября 2018

Существенная проблема двоякая. Во-первых, как вы знаете, XML чувствителен к регистру.

Во-вторых, XML не «определяет» имя атрибута ID. В отличие от HTML, который говорит, что элементы могут иметь атрибут 'id', 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.

(Вы можете объявить foobar атрибутом xs: ID, и он будет отлично работать, поэтому, если ваш исходный XML имеет что-то вроде:

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

использование:

xmlsec1 --id-attr:foobar node ...
1 голос
/ 19 марта 2010

(Примечание. Вы должны знать, что я не являюсь экспертом по xml-dsig, поэтому отвечаю только в отношении XML, DTD и XML-схемы.)

XMLучитывает регистр, поэтому регистр важен и должен совпадать с используемым DTD или схемой.

Конечно, если приложения используют разные схемы в разных случаях, возникает проблема совместимости.

Я посмотрел официальную спецификацию W3C на http://www.w3.org/TR/xmldsig-core/, и Схема и DTD, похоже, указывают "Id".Используете ли вы эту спецификацию?

Кроме того, может быть странно знать, что соответствующий тип DTD - это "ID" и что есть функция XQuery с именем "id".

...