Канонический XML
Канонический XML это нормальная форма XML — , предназначенная для обеспечения относительно простого сравнения пар XML-документов на предмет эквивалентности; для этой цели преобразование Canonical XML удаляет несущественные различия между документами. Любой документ XML можно преобразовать в канонический XML.
Например, XML допускает появление пробелов в различных точках начальных тегов, а атрибуты можно указывать в любом порядке. Такие различия редко, если вообще когда-либо, используются для передачи значения, поэтому эти формы обычно считаются эквивалентными:
<p class="a" secure="1">
<p secure = "1" class='a' >
При преобразовании произвольного XML-документа в канонический XML атрибуты кодируются в нормативном порядке (в алфавитном порядке по имени) с нормативными интервалами и кавычками (хотя все объявления пространства имен размещаются перед обычными атрибутами, а атрибуты в пространстве имен сортируются по пространству имен, а не по префиксу). или квалифицированное имя). Таким образом, вторая форма выше будет преобразована в первую.
Канонический XML определяет ряд других деталей, некоторые из которых:
- UTF -8 используется кодировка
- концы строк представлены с использованием новой строки символа 0x 0А
- пробелы в значениях атрибутов нормализованы
- ссылки на сущности и ссылки на неспециальные символы расширены
- Разделы CDATA заменяются их символьным содержимым.
- пустые элементы кодируются как пары начала/конца без использования специального синтаксиса пустых элементов.
- атрибуты по умолчанию сделаны явными
- лишние объявления пространства имен удаляются
Согласно W3C , если два XML- документа имеют одинаковую каноническую форму, то эти два документа логически эквивалентны в рамках данного контекста приложения (за исключением ограничений, касающихся нескольких необычных случаев).
Однако в определенном контексте пользователей может интересовать особая семантика, выходящая за рамки общей логической эквивалентности, с которой связан канонический XML. Например, система стеганографии может скрывать информацию в XML-документе, изменяя пробелы, кавычки и порядок атрибутов, используя ссылки на шестнадцатеричные или десятичные числовые символы и т. д. Очевидно, что преобразование такого файла в канонический XML потеряет эту специализированную семантику. С другой стороны, XML-файлы, которые различаются использованием верхнего и нижнего регистра или используют архаичное и современное написание и т. д., могут считаться эквивалентными для определенных целей. Такие контексты выходят за рамки канонического XML.