Спецификация XML определяет уникальный тип идентификатора:
Ограничение допустимости: ID
Значения идентификатора типа должны соответствовать продукции Name.Имя не должно появляться более одного раза в документе XML как значение этого типа;т. е. значения идентификатора должны однозначно идентифицировать элементы, которые их несут.
Производство имени равно
[5] Name ::= (Letter | '_' | ':') ( NameChar)*
Это говорит о том, что если атрибут объявлен как идентификатор типа (или вDTD или XMLSchema), тогда валидатор должен убедиться, что он уникален в документе.Обратите внимание, что идентификатор должен начинаться с буквы или подчеркивания, чтобы чистые числа не работали.
Лично я не использую идентификатор (я считаю его слишком ограничительным для меня), но вы, вероятно, должны рассмотреть его.Обратите внимание, что инструменты XML-схемы по умолчанию не будут генерировать для вас уникальные идентификаторы (хотя XSLT будет).
Обратите внимание, что именем атрибута (в вашем случае «id») может быть любое допустимое имя (например, «Id»)."," foo "), но он должен быть объявлен в DTD или Схеме с идентификатором типа.
ОБНОВЛЕНИЕ: OP спрашивает, почему мы не используем XML ID.Мы часто объединяем узлы из разных источников, например
и
Идентификаторы - это то, что выбрали авторы (это не одно приложение базы данных- больше думать о людях, создающих блог-посты в сообществе и создающих свои идентификаторы. Поэтому люди обычно создают один и тот же идентификатор (в основном m1). В этом случае у нас вполне может быть:
Это выглядит ужасно, но простых ответов нет.
Мы используем другую информацию для устранения неоднозначности. У нас есть правило, что идентификаторы уникальны в определенной области - например, атомы в молекуле должны иметь уникальные идентификаторы.
Если бы мы использовали уникальный генератор идентификаторов, они были бы полностью непрозрачными, и люди в нашем сообществе взбунтовались бы (они так и сделали).
Идентификациями не легко управлять в неуправляемом человеческом сообществе!