Чому вони кажуть, що 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-деревах» ( Wikipedia ) і представляє дещо інший підхід, заснований на твердженнях XPath.
Подібні ініціативи для JSON не настільки популярні (особливо, я вважаю, у корпоративному світі, орієнтованому на Microsoft). Однією з причин є те, що JSON призначений для ситуацій, коли структура даних є досить базовою (тобто може бути виражена як дерево, наприклад, без необхідності атрибутів) і не обов'язково потрібно перевіряти. Прекрасний приклад - API REST, що використовується мовою, що динамічно набирається:
/something/percentage
це дійсна кількість і знаходиться в діапазоні 0..100).XML може бути безпечним для типу, оскільки за допомогою XSD-схем можна оголошувати тип даних елементів. Документ, затверджений на схемі XSD, гарантовано відповідає очікуваним типам. Але формат XML не повинен мати схему, тому документ не вводиться автоматично безпечно, лише будучи XML.
Насправді існує мова схеми для JSON , тому введіть безпечний JSON. Але він використовується рідко, тому зазвичай JSON не є безпечним.
В інформатиці безпека типу - це те, наскільки мова програмування відлякує або запобігає помилкам типу.
Безпека типу не є абсолютним атрибутом. Це не буле. Мови (а XML і JSON - це мови) дозволяють і запобігають різного роду помилок і помилок. Наприклад, ви можете неправильно називати елементи. Але ви не можете пропустити необхідні синтаксичні елементи, такі як закривання тегів і дужок.
Прості XML та JSON майже однаково безпечні для типу (або небезпечні для типу). Дійсний рядок XML / JSON має певну синтаксичну та семантичну структуру, але цього майже ніколи не вистачає, щоб програма працювала з ним. Додатки не тільки який - або на структуру , але конкретний один.
XML сяє з визначенням схеми XML (XSD), що є гнучким та потужним способом перевірки даного документа XML щодо схеми. Це забезпечує велику безпеку типу відповідно до наведеного вище визначення.