Почему тип XML безопасен?

30

Почему они говорят, что XML обеспечивает безопасность типов и как это выражается в самом XML?

Чем он отличается от JSON (например), который (как я понимаю) не является безопасным типом?

user3339411
источник

Ответы:

36

Из-за определения схемы 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, используемый динамически типизированным языком:

  • клиент очень легко и быстро внедряется,
  • API доверяют не менять,
  • клиент может легко иметь дело с конкретными листами, где необходима проверка (например, проверка, которая /something/percentageявляется фактическим числом и находится в диапазоне 0..100).
Арсений Мурзенко
источник
20

XML может быть безопасным по типу, поскольку с помощью схем XSD можно объявлять тип данных элементов. Документ, проверенный по схеме XSD, гарантированно соответствует ожидаемым типам. Но формат XML не обязательно должен иметь схему, поэтому документ не является автоматически безопасным по типу, просто будучи XML.

На самом деле также существует язык схемы для JSON , так что возможен безопасный тип JSON. Но он используется редко, поэтому, как правило, JSON небезопасен.

JacquesB
источник
2
Ваш ответ будет лучше с именем или ссылкой для JSON, эквивалентным XSD.
DougM
1
Кстати, XML-схема - далеко не единственный язык определения схемы для XML. Также есть Schematron, RelaxNG и, конечно же, добрый SGML DTD.
Йорг Миттаг
Также имейте в виду, что даже при наличии схемы XML может быть небезопасным. Можно указать элемент, чтобы иметь «любой» тип содержимого. Хотя можно утверждать, что это форма безопасности типов (мне все равно, что-нибудь допустимо), в то же время никакая проверка не может быть выполнена: это по сути «вариантный» тип.
3

В информатике безопасность типов - это степень, в которой язык программирования препятствует или предотвращает ошибки типов.

Тип безопасности не является абсолютным атрибутом. Это не булево. Языки (а XML и JSON являются языками) допускают и предотвращают различные виды ошибок и ошибок. Например, вы можете неправильно именовать элементы. Но вы не можете пропустить необходимые синтаксические элементы, такие как закрывающие теги и фигурные скобки.

Простой XML и JSON в значительной степени одинаково безопасны (или небезопасны). Допустимая строка XML / JSON имеет определенную синтаксическую и семантическую структуру, но этого почти никогда не достаточно для работы приложения с ней. Приложения не только какой - либо на структуру , но конкретный один.

XML прекрасно сочетается с определением схемы XML (XSD), которое является гибким и мощным способом проверки конкретного XML-документа по схеме. Это обеспечивает большую безопасность типов в соответствии с определением, приведенным выше.

USR
источник