Qual è la differenza tra XML e XSD?


111

Qual è la differenza tra Extensible Markup Language (XML) e XML Schema (XSD)?

Risposte:


145

In realtà l'XSD è lo stesso XML. Il suo scopo è convalidare la struttura di un altro documento XML. L'XSD non è obbligatorio per alcun XML, ma assicura che l'XML possa essere utilizzato per alcuni scopi particolari. L'XML contiene solo dati in formato e struttura adeguati.


Solo così sono chiaro: se una terza parte mi ha inviato un documento .XSD con elementi del tipo: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> incluso - questo è solo una descrizione dei campi non è vero. È una cosa ragionevole chiedere loro una richiesta di esempio effettiva che sarebbe XML grezzo con <QuoteResultID> ecc. Ecc.
James Wilson,

3
Sicuramente puoi chiederglielo. Puoi anche utilizzare alcuni degli strumenti online che possono farlo per te, come questo per esempio - xsd2xml . Basta incollare xsd e genererà un documento xml di esempio basato su di esso.
anthares

@anthares, ho provato il collegamento con: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> ma ho finito per ricevere l'errore: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity,

Perché sarebbe un problema?
heretoinfinity

111


Facciamo un esempio

<root>
  <parent>
     <child_one>Y</child_one>
     <child_two>12</child_two>
  </parent>
</root>

e progetta un xsd per questo:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="child_one" type="xs:string" />
              <xs:element name="child_two" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


Cosa non è possibile con XSD: vorrei scriverlo prima in quanto l'elenco è molto piccolo
1) Non puoi convalidare un nodo / attributo utilizzando il valore di un altro nodo / attributo.
2) Questa è una restrizione: un elemento definito nel file XSD deve essere definito con un solo tipo di dati. [nell'esempio sopra, per <child_two>apparire in un altro <parent>nodo, il tipo di dati non può essere definito diverso da int.
3) Non è possibile ignorare la convalida di elementi e attributi, cioè, se un elemento / attributo appare in XML, deve essere ben definito nel corrispondente XSD. Sebbene l'uso di lo <xsd:any>consenta, ma ha le sue regole. Rispetto che porta all'errore di convalida. Avevo provato un approccio simile e di certo non aveva avuto successo, ecco la domanda e risposta


cosa è possibile fare con XSD:
1) È possibile testare la corretta gerarchia dei nodi XML. [xsd definisce quale figlio dovrebbe rientrare in quale genitore, ecc., rispettando ciò che sarà conteggiato come errore, nell'esempio precedente, child_two non può essere il figlio immediato di root, ma è il figlio del tag "genitore" che a sua volta è un figlio del nodo "root", c'è una gerarchia ..]
2) È possibile definire il tipo di dati dei valori dei nodi. [nell'esempio sopra child_two non può avere altri dati oltre a number]
3) Puoi anche definire tipi_dati personalizzati, [esempio, per nodo <month>, i possibili dati possono essere uno dei 12 mesi .. quindi devi definire tutti i 12 mesi in un nuovo tipo di dati scrivendo tutti i nomi di 12 mesi come valori di enumerazione.
4) Puoi mettere la restrizione sulla ricorrenza degli elementi, usando minOccurs e maxOccurs, i valori di default sono 1 e 1.

.. e molti altri ...


1
@ InfantPro'Aravind 'Cosa intendevi con "Non puoi convalidare un nodo / attributo utilizzando il valore di un altro nodo / attributo.". Perché qualcuno dovrebbe volerlo fare?
Geek


"Non è possibile convalidare un nodo / attributo utilizzando il valore di un altro nodo / attributo". Cosa significa
GrowinMan

@ GrowinMan, convalida condizionale (relazione non genitore-figlio) Es: Se questo è il tuo xml: <root> <A>A</A> <B/> <C/> </root>e se Node lo <A>è <A>B</A>, rendilo <B>obbligatorio, se <A>C</A>poi rendilo <C>obbligatorio.
InfantPro'Aravind '

Il requisito di cui sopra è impossibile da raggiungere con XSD da solo
InfantPro'Aravind '

15

XSD:
XSD (XML Schema Definition) specifica come descrivere formalmente gli elementi in un documento XML (Extensible Markup Language).
Xml:
XML è stato progettato per descrivere i dati . È indipendente dal software oltre che dall'hardware.
Migliora le seguenti cose.
-Condivisione dei dati.
-Piattaforma indipendente.
-Aumentare la disponibilità dei dati.

differenze:

  1. XSD è basato e scritto su XML.

  2. XSD definisce elementi e strutture che possono apparire nel documento, mentre XML no.

  3. XSD garantisce che i dati vengano interpretati correttamente, mentre XML no.

  4. Un documento XSD viene convalidato come XML, ma potrebbe non essere sempre vero il contrario.

  5. XSD è migliore nel rilevare gli errori rispetto a XML.

Un XSD definisce gli elementi che possono essere utilizzati nei documenti, relativi ai dati effettivi con cui deve essere codificato.
ad esempio:
una data espressa come 1/12/2010 può significare il 12 gennaio o il 1 ° dicembre. La dichiarazione di un tipo di dati data in un documento XSD garantisce che segua il formato dettato da XSD.


La prima affermazione descriveva tutto.
Ojonugwa Jude Ochalifu


6

ESEMPIO XML SEMPLICE:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD OF ABOVE XML (spiegato):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Qui:

xs: element : definisce un elemento.

xs: sequence : denota che gli elementi figlio compaiono solo nell'ordine menzionato.

xs: complexType : denota che contiene altri elementi.

xs: simpleType : denota che non contengono altri elementi.

tipo: stringa, decimale, intero, booleano, data, ora,

  • In parole semplici , xsd è un altro modo per rappresentare e convalidare i dati XML con il tipo specifico.
  • Con l'aiuto di attributi extra, possiamo eseguire più operazioni.

  • L'esecuzione di qualsiasi attività su xsd è più semplice di xml.


Ciao! Quale programma utilizzo per creare un file XSD?
Judith

@ Programma Judith? puoi spiegare la tua domanda. come editor, linguaggio o strumento?
shubham1js

1

Fondamentalmente un file XSD definisce come sarà il file XML. È un file Schema che definisce la struttura del file XML. Quindi specifica quali sono i campi possibili e quale dimensione avranno.

Un file XML è un'istanza di XSD poiché utilizza le regole definite nell'XSD.


0

XML ha un'applicazione molto più ampia di f.ex. HTML. Non ha una "applicazione" intrinseca o predefinita. Quindi, anche se potresti non preoccuparti del fatto che le pagine web siano governate anche da ciò che è permesso, dal lato dell'autore, probabilmente vorrai definire con precisione cosa può e non può contenere un documento XML.

È come progettare un database.

Il problema delle tecnologie XML è che sono di natura testuale. Con XSD, significa che hai un framework di definizione della struttura dei dati che può essere "collegato" a strumenti di elaborazione del testo come PHP. Quindi non solo puoi manipolare i dati stessi, ma anche cambiare e documentare molto facilmente la struttura e persino generare automaticamente i front-end.

Visto in questo modo, XSD è il "collante" o "middleware" tra i dati (XML) e gli strumenti di elaborazione dei dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.