Инструменты разработчика · Конвертеры синтаксиса
Происхождение XML от SGML: почему у него есть атрибуты, пространства имен и DTD
· Фон
xml форматы данных безопасность
Странности XML (атрибуты и элементы, пространства имен, DTD, смешанный контент) обретают смысл, если вы знаете, что он был разработан как упрощенный SGML для документов, а не для данных. В этом посте прослеживается это происхождение и то, что оно означает, когда вы конвертируете XML в JSON.
Почему этот формат данных имеет атрибуты? — разработчик преобразует XML в JSON и удовлетворяет различению JSON, которое никогда не требовалось
JSON имеет один тип свойства объекта; XML различает атрибуты, дочерние элементы и текст. ToolAcre отображает это различие с помощью атрибутов `@` и обычных дочерних ключей. Разница видна, когда элемент имеет как `id="7"`, так и дочерний элемент `<id>`: оба сохраняются под разными свойствами.
Это соглашение объясняет полученную форму, не утверждая, что атрибуты имеют одну универсальную семантическую роль. XML авторы выбирают их по своим схемам. Преобразователь сохраняет категорию узла, которую он может наблюдать, а не бизнес-причину, по которой он был выбран.
SGML и традиция документа — ISO 8879, разметка для публикации и идея тегирования текста, а не кодирования записей
Смешанное содержимое, упорядоченные дочерние элементы, атрибуты, комментарии и инструкции по обработке — это функции, ориентированные на документы, присутствующие в исходном коде XML. Реализация демонстрирует их обработку, но не содержит доказательств SGML хронологии, истории публикаций ISO или мотивов издательской индустрии.
Таким образом, статья, ограниченная исходным кодом, начинается с поведения исполняемого файла. Текст вокруг дочерних элементов теряется; комментарии и инструкции по обработке удаляются; CDATA остается отмеченным. Эти факты объясняют, почему дерево документа не вписывается в дерево значений JSON.
Ориентированные на документы функции XML, видимые в реализации, без заявления истории SGML.
Анализатор проверяет правильность формата XML и сообщает строку и столбец. Он игнорирует объявление в результирующем значении и сохраняет пять встроенных сущностей и числовые ссылки на символы как декодированный текст. Он не устанавливает цели рабочей группы или десять принципов проектирования.
Исторические утверждения требуют внешних редакционных источников, которых эта задача не добавляет. Пропустить их более точно, чем придумывать соответствие или происхождение из имени зависимости.
Анализатор обрабатывает синтаксис XML; Доказательства репозитория не подтверждают историю проектирования 1998
Атрибуты становятся ключами с префиксом `@`; элементы сохраняют свои имена. Текст внутри структурированного элемента перемещается в `#text`, а текстовый элемент сворачивается в строку. Это позволяет разделить структурные категории, насколько это позволяет объектная модель.
Написание XML меняет соглашение: `@id` становится атрибутом. Неверные имена атрибутов или элементов отклоняются, а не очищаются. Это решение не позволяет искаженному отображению стать правдоподобным XML с незаметно измененными именами.
Атрибуты и элементы остаются разными в соответствии с соглашением @ ToolAcre.
Префиксы пространства имен сохраняются дословно в именах элементов и атрибутов, включая объявления пространств имен. Они не решены, не удалены и не переписаны. При этом сохраняется исходное написание, но не выполняется разрешение типов с учетом пространства имен.
Каждый DOCTYPE отклоняется до того, как fast-xml-parser получит документ. Маска позволяет избежать ложных совпадений внутри комментариев и CDATA. Это предотвращает запросы внешних сущностей, чтение сущностей локальных файлов и атаки расширения сущностей, без возможности обойти отказ.
Префиксы пространства имен сохраняются буквально, и каждый DOCTYPE отклоняется.
В `<p>before<b>bold</b>after</p>` расположение текста имеет значение. ToolAcre обнаруживает смешанный контент, объединяет фрагменты под `#text` и предупреждает, что их позиции относительно дочерних элементов теряются. Свойства объекта JSON не могут воспроизводить упорядоченную последовательность чередующихся узлов текста и элементов.
Повторяющиеся дочерние элементы с одинаковыми именами становятся массивами, но братья и сестры с разными именами остаются свойствами. Код, требующий точного порядка документов, должен использовать представление узла XML, а не рассматривать преобразованный объект как завершенный.
Что здесь не распространяется — XSLT, XPath и XQuery, языки обработки, возникшие вокруг XML.
XSLT, XPath и XQuery не импортируются и не предоставляются. Панель также не проверяет XSD, не обрабатывает объявления DTD и не создает типизированные объекты домена. Это проекция данных с четкими границами безопасности и точности.
Язык запросов или преобразований может сохранять порядок узлов и перемещаться по нему так, как это не может сделать преобразование простых значений. Выбирайте этот инструмент, когда функции документа являются частью работы, а не случайной упаковкой.
Вывод: XML — это формат документа, который научился переносить данные, и как панель преобразователей синтаксиса показывает, что сохраняется после перевода в JSON.
Наблюдаемая модель данных XML включает в себя различия, отсутствующие в JSON. ToolAcre отмечает атрибуты, CDATA и структурированный текст, сохраняет префиксы пространства имен, удаляет узлы, не являющиеся данными, и отклоняет DOCTYPE. Каждый выбор виден и проверен.
Используйте панель, чтобы узнать, что переживает проекцию, а не исторический авторитет или полноценный процессор XML. Если порядок, схемы или семантика пространства имен имеют значение, сохраните исходное дерево и используйте специально разработанный инструментарий XML.
Безопасность и точность также пересекаются на границе DOCTYPE. Отказ от объявления предотвращает обработку объекта, но удаление его из произвольного устаревшего документа может изменить ссылки на объекты или предположения проверки. Если вы являетесь владельцем источника, замените необходимые сущности явным безопасным текстом и проверьте полученный документ. Если вы не являетесь его владельцем, используйте утвержденный рабочий процесс XML вместо того, чтобы ослаблять отказ или представлять частичное преобразование в качестве исходного контента.