Perché il tipo XML è sicuro?

30

Perché si dice che XML fornisce sicurezza di tipo e come è espresso nello stesso XML?

In che cosa differisce da JSON (ad esempio) che (come ho capito) non è sicuro?

    
posta user3339411 28.03.2015 - 11:36
fonte

3 risposte

36

A causa della definizione dello schema XML (XSD).

Con XML, puoi avere un file aggiuntivo che descrive lo schema. Ad esempio, indica che l'elemento /a/b è un array e contiene da 1 a 10 elementi o che l'elemento /a/c è un numero intero. Puoi trovare un esempio di XSD qui .

La convalida di un determinato file XML tramite XSD è supportata da molte lingue . Ad esempio, un'applicazione .NET può richiedere un file XML da una fonte non attendibile e controllare che corrisponda all'XSD ; quindi, può salvarlo in un database Microsoft SQL Server, che a sua volta contiene un XSD e fai di nuovo il controllo (per assicurarti che qualsiasi client che abbia accesso al database sia conforme).

XSD non è l'unica lingua.

  • Se hai fatto lo sviluppo web, hai sicuramente sentito parlare di Document Type Definition (DTD) -un linguaggio di markup che definisce la struttura di XML ed è usato soprattutto nella validazione di HTML- Contenuto relativo. Anche se non può fare tutto ciò che XSD può fare, come assicurarsi che un elemento o un attributo contenga un numero intero, può comunque eseguire una serie di controlli di struttura.

  • RELAX NG ha il vantaggio di essere relativamente semplice rispetto ad altri linguaggi e può essere scritto in una forma più compatta di XML.

  • Schematron è un altro "linguaggio di convalida basato su regole per fare asserzioni sulla presenza o assenza di pattern negli alberi XML" ( Wikipedia ) e presenta un approccio leggermente diverso, basato sulle asserzioni XPath.

Iniziative simili per JSON non sono così popolari (in particolare, credo, nel mondo aziendale Microsoft-centrico). Uno dei motivi è che JSON è destinato a situazioni in cui la struttura dei dati è piuttosto basilare (ad esempio può essere espressa come un albero, senza la necessità di attributi, ad esempio) e non deve necessariamente essere convalidata. Un esempio eccellente è un'API REST utilizzata da un linguaggio tipizzato dinamicamente:

  • il client è molto facile e veloce da implementare,
  • l'API è attendibile per non cambiare,
  • il client può facilmente gestire gli specifici leafs in cui è necessaria la convalida (ad esempio, verifica che /something/percentage sia un numero reale e sia compreso nell'intervallo 0..100).
risposta data 28.03.2015 - 11:44
fonte
20

XML può essere sicuro, poiché è possibile con gli schemi XSD dichiarare il tipo di dati degli elementi. Un documento validato rispetto a uno schema XSD è garantito conforme ai tipi previsti. Ma non è richiesto un formato XML per avere uno schema, quindi un documento non è automaticamente sicuro in quanto essere XML.

Esiste effettivamente un linguaggio di schema per JSON anche, quindi digitare JSON sicuro è possibile. Ma è usato raramente, quindi tipicamente JSON non è sicuro per tipo.

    
risposta data 28.03.2015 - 11:59
fonte
3

In computer science, type safety is the extent to which a programming language discourages or prevents type errors.

La sicurezza del tipo non è un attributo assoluto. Non è booleano. Le lingue (e le lingue XML e JSON sono ) consentono e impediscono diversi tipi di errori ed errori. Ad esempio è possibile definire erroneamente gli elementi. Ma non puoi saltare elementi sintattici richiesti come la chiusura di tag e parentesi graffe.

Plain XML e JSON sono praticamente ugualmente sicuri (o non sicuri). Una stringa XML / JSON valida ha una certa struttura sintattica e semantica, ma questo non è quasi mai sufficiente per un'applicazione che lavori con esso. Le applicazioni non hanno solo una struttura a ma specifica.

L'XML risplende con XML Schema Definition (XSD), un modo flessibile e potente per convalidare un determinato documento XML rispetto a uno schema. Questo fornisce un sacco di sicurezza del tipo sotto la definizione di cui sopra.

    
risposta data 29.03.2015 - 14:05
fonte

Leggi altre domande sui tag