Почему они говорят, что XML обеспечивает безопасность типов и как это выражается в самом XML?
Чем он отличается от JSON (например), который (как я понимаю) не является безопасным типом?
источник
Почему они говорят, что XML обеспечивает безопасность типов и как это выражается в самом XML?
Чем он отличается от JSON (например), который (как я понимаю) не является безопасным типом?
Из-за определения схемы XML (XSD).
С XML у вас может быть дополнительный файл, который описывает схему. Это указывает, например, что элемент /a/b
является массивом и содержит от 1 до 10 элементов или что элемент /a/c
является целым числом. Вы можете найти пример XSD здесь .
Проверка правильности данного XML-файла через XSD поддерживается многими языками . Например, приложение .NET может запросить файл XML из ненадежного источника и проверить , соответствует ли он XSD ; затем он может сохранить его в базе данных Microsoft SQL Server, которая, в свою очередь, может содержать XSD, и выполнить проверку еще раз (чтобы обеспечить соответствие любому клиенту, имеющему доступ к базе данных).
XSD не единственный язык.
Если вы занимались веб-разработкой, вы наверняка слышали об определении типа документа (DTD) - языке разметки, который определяет структуру XML и используется, в частности, при проверке содержимого, связанного с HTML. Несмотря на то, что он не может делать все, что может XSD, например, гарантировать, что элемент или атрибут содержит целое число, он все равно может выполнять несколько структурных проверок.
Преимущество RELAX NG заключается в том, что он относительно прост по сравнению с другими языками и может быть написан в более компактной форме, чем XML.
Schematron - это еще один «язык проверки на основе правил для создания утверждений о наличии или отсутствии шаблонов в деревьях XML» ( Википедия ), который представляет несколько иной подход, основанный на утверждениях XPath.
Подобные инициативы для JSON не так популярны (особенно, я полагаю, в корпоративном мире, ориентированном на Microsoft). Одна из причин заключается в том, что JSON предназначен для ситуаций, когда структура данных является довольно базовой (т.е. может быть выражена в виде дерева, например, без необходимости атрибутов) и не обязательно должна быть проверена. Отличным примером является REST API, используемый динамически типизированным языком:
/something/percentage
является фактическим числом и находится в диапазоне 0..100).XML может быть безопасным по типу, поскольку с помощью схем XSD можно объявлять тип данных элементов. Документ, проверенный по схеме XSD, гарантированно соответствует ожидаемым типам. Но формат XML не обязательно должен иметь схему, поэтому документ не является автоматически безопасным по типу, просто будучи XML.
На самом деле также существует язык схемы для JSON , так что возможен безопасный тип JSON. Но он используется редко, поэтому, как правило, JSON небезопасен.
Тип безопасности не является абсолютным атрибутом. Это не булево. Языки (а XML и JSON являются языками) допускают и предотвращают различные виды ошибок и ошибок. Например, вы можете неправильно именовать элементы. Но вы не можете пропустить необходимые синтаксические элементы, такие как закрывающие теги и фигурные скобки.
Простой XML и JSON в значительной степени одинаково безопасны (или небезопасны). Допустимая строка XML / JSON имеет определенную синтаксическую и семантическую структуру, но этого почти никогда не достаточно для работы приложения с ней. Приложения не только какой - либо на структуру , но конкретный один.
XML прекрасно сочетается с определением схемы XML (XSD), которое является гибким и мощным способом проверки конкретного XML-документа по схеме. Это обеспечивает большую безопасность типов в соответствии с определением, приведенным выше.
источник