XSD - Guida rapida
XML Schema Definition, comunemente noto come XSD, è un modo per descrivere con precisione il linguaggio XML. XSD controlla la validità della struttura e del vocabolario di un documento XML rispetto alle regole grammaticali del linguaggio XML appropriato.
Un documento XML può essere definito come:
Well-formed- Se il documento XML aderisce a tutte le regole XML generali, come i tag, devono essere nidificati correttamente, i tag di apertura e di chiusura devono essere bilanciati e i tag vuoti devono terminare con "/>", allora viene chiamato ben formato .
OR
Valid- Un documento XML che si dice valido quando non solo è ben formato , ma è anche conforme all'XSD disponibile che specifica quali tag utilizza, quali attributi questi tag possono contenere e quali tag possono essere presenti all'interno di altri tag, tra le altre proprietà .
Il diagramma seguente mostra come XSD viene utilizzato per strutturare i documenti XML:
Ecco un semplice codice XSD. Dai un'occhiata.
<?xml version = "1.0"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
targetNamespace = "http://www.tutorialspoint.com"
xmlns = "http://www.tutorialspoint.com"
elementFormDefault = "qualified">
<xs:element name = 'class'>
<xs:complexType>
<xs:sequence>
<xs:element name = 'student' type = 'StudentType' minOccurs = '0'
maxOccurs = 'unbounded' />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name = "StudentType">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
</xs:schema>
Caratteristiche
Ecco un elenco di alcune delle caratteristiche popolari di XSD:
- Gli XSD possono essere estensibili per aggiunte future.
- XSD è più ricco e potente del DTD.
- XSD è scritto in XML.
- XSD supporta i tipi di dati.
- XSD supporta gli spazi dei nomi.
- XSD è la raccomandazione del W3C.
Un XSD XML viene conservato in un documento separato e quindi il documento può essere collegato a un documento XML per utilizzarlo.
Sintassi
La sintassi di base di un XSD è la seguente:
<?xml version = "1.0"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
targetNamespace = "http://www.tutorialspoint.com"
xmlns = "http://www.tutorialspoint.com" elementFormDefault = "qualified">
<xs:element name = 'class'>
<xs:complexType>
<xs:sequence>
<xs:element name = 'student' type = 'StudentType' minOccurs = '0'
maxOccurs = 'unbounded' />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name = "StudentType">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
</xs:schema>
Elemento <Schema>
Lo schema è l'elemento radice di XSD ed è sempre obbligatorio.
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
Il frammento precedente specifica che gli elementi ei tipi di dati utilizzati nello schema sono definiti in http://www.w3.org/2001/XMLSchema spazio dei nomi e questi elementi / tipi di dati dovrebbero essere preceduti da xs. È sempre necessario.
targetNamespace = "http://www.tutorialspoint.com"
Il frammento precedente specifica che gli elementi utilizzati in questo schema sono definiti in http://www.tutorialspoint.comspazio dei nomi. È facoltativo.
xmlns = "http://www.tutorialspoint.com"
Il frammento precedente specifica che lo spazio dei nomi predefinito è http://www.tutorialspoint.com.
elementFormDefault = "qualified"
Il frammento precedente indica che qualsiasi elemento dichiarato in questo schema deve essere qualificato come spazio dei nomi prima di utilizzarlo in qualsiasi documento XML. È facoltativo.
Schema di riferimento
Dai un'occhiata al seguente schema di riferimento:
<?xml version = "1.0"?>
<class xmlns = "http://www.tutorialspoint.com"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
xmlns = "http://www.tutorialspoint.com"
Il frammento precedente specifica la dichiarazione dello spazio dei nomi predefinito. Questo spazio dei nomi viene utilizzato dal validatore dello schema, controlla che tutti gli elementi facciano parte di questo spazio dei nomi. È facoltativo.
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">
Dopo aver definito l'xsi dell'istanza XMLSchema, utilizzare schemaLocationattributo. Questo attributo ha due valori, spazio dei nomi e posizione dello schema XML, da utilizzare separati da uno spazio. È facoltativo.
Useremo il validatore XSD basato su Java per convalidare students.xml contro il students.xsd.
students.xml
<?xml version = "1.0"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
studenti.xsd
<?xml version = "1.0"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
<xs:element name = 'class'>
<xs:complexType>
<xs:sequence>
<xs:element name = 'student' type = 'StudentType' minOccurs = '0'
maxOccurs = 'unbounded' />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name = "StudentType">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
</xs:schema>
XSDValidator.java
import java.io.File;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.SAXException;
public class XSDValidator {
public static void main(String[] args) {
if(args.length !=2){
System.out.println("Usage : XSDValidator <file-name.xsd> <file-name.xml>" );
} else {
boolean isValid = validateXMLSchema(args[0],args[1]);
if(isValid){
System.out.println(args[1] + " is valid against " + args[0]);
} else {
System.out.println(args[1] + " is not valid against " + args[0]);
}
}
}
public static boolean validateXMLSchema(String xsdPath, String xmlPath){
try {
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new File(xsdPath));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(xmlPath)));
} catch (IOException e){
System.out.println("Exception: "+e.getMessage());
return false;
} catch(SAXException e1){
System.out.println("SAX Exception: "+e1.getMessage());
return false;
}
return true;
}
}
Passaggi per convalidare XML rispetto a XSD
Copia il file XSDValidator.java file in qualsiasi posizione, ad esempio E: > java
Copia il file students.xml nella stessa posizione E: > java
Copia il file students.xsd nella stessa posizione E: > java
Compilare XSDValidator.javautilizzando la console. Assicurati di avere JDK 1.5 in poi installato sulla tua macchina e che i classpath siano configurati. Per i dettagli su come usare JAVA, vedere il Tutorial JAVA
E:\java\javac XSDValidator.java
Eseguire XSDValidator con students.xsd e students.xml passato come argomento.
E:\java\java XSDValidator students.xsd students.xml
Verifica l'output
Vedrai il seguente risultato:
students.xml is valid against students.xsd
In questo capitolo vedremo i tipi semplici definiti da XSD.
S.No. | Tipo e descrizione semplici |
---|---|
1 | L'elemento semplice può contenere solo testo. Non può contenere nessun altro elemento. |
2 | L'attributo è esso stesso un tipo e viene utilizzato in Complex Element. |
3 | La restrizione definisce i valori accettabili di un elemento XML. |
L'elemento complesso è un elemento XML che può contenere altri elementi e / o attributi. Possiamo creare un elemento complesso in due modi:
Definisci un tipo complesso e quindi crea un elemento utilizzando il type attributo
Definisci un tipo complesso direttamente nominando
Definire un tipo complesso e quindi creare un elemento utilizzando l'attributo type.
<xs:complexType name = "StudentType">
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element name = 'student' type = 'StudentType' />
Definisci un tipo complesso direttamente nominando.
<xs:element name = "student">
<xs:complexType>
<xs:sequence>
<xs:element name = "firstname" type = "xs:string"/>
<xs:element name = "lastname" type = "xs:string"/>
<xs:element name = "nickname" type = "xs:string"/>
<xs:element name = "marks" type = "xs:positiveInteger"/>
</xs:sequence>
<xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>
<xs:element>
Di seguito è riportato l'elenco dei tipi complessi supportati da XSD.
S.No. | Tipo e descrizione semplici |
---|---|
1 | Complesso L'elemento di tipo complesso vuoto può avere solo attributi ma nessun contenuto. |
2 | L'elemento di tipo complesso Solo elementi può contenere solo elementi |
3 | L'elemento di tipo complesso Solo testo può contenere solo attributi e testo. |
4 | L'elemento di tipo complesso misto può contenere elemento, attributo e testo. |
5 | Gli indicatori controllano il modo in cui gli elementi devono essere organizzati in un documento XML. |
6 | L'elemento <any> viene utilizzato per gli elementi che non sono definiti dallo schema |
7 | L'attributo <anyAttribute> viene utilizzato per attributi non definiti dallo schema. |
I tipi di dati stringa vengono utilizzati per rappresentare i caratteri nei documenti XML.
<xs: string> tipo di dati
Il tipo di dati <xs: string> può accettare caratteri, avanzamenti riga, ritorni a capo e caratteri di tabulazione. Il processore XML non sostituisce gli avanzamenti riga, i ritorni a capo e i caratteri di tabulazione nel contenuto con spazio e li mantiene intatti. Ad esempio, più spazi o tabulazioni vengono conservati durante la visualizzazione.
<xs: string> Esempio
Dichiarazione dell'elemento in xsd -
<xs:element name = "name" type = "xs:string"/>
Utilizzo degli elementi in xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
Tipo di dati <xs: token>
Il tipo di dati <xs: token> deriva dal tipo di dati <string> e può accettare caratteri, avanzamenti riga, ritorni a capo e caratteri di tabulazione. Il processore XML rimuoverà gli avanzamenti riga, le tabulazioni, i ritorni a capo, gli spazi iniziali e finali e più spazi.
<xs: token> Esempio
Dichiarazione dell'elemento in xsd -
<xs:element name = "name" type = "xs:token"/>
Utilizzo degli elementi in xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
Tipi di dati stringa
Di seguito è riportato l'elenco dei tipi di dati comunemente usati che derivano dal tipo di dati <string>.
S.No. | Nome e descrizione |
---|---|
1 | ID Rappresenta l'attributo ID in XML e viene utilizzato negli attributi dello schema. |
2 | IDREF Rappresenta l'attributo IDREF in XML e viene utilizzato negli attributi dello schema. |
3 | language Rappresenta un ID lingua valido |
4 | Name Rappresenta un nome XML valido |
5 | NMTOKEN Rappresenta un attributo NMTOKEN in XML e viene utilizzato negli attributi dello schema. |
6 | normalizedString Rappresenta una stringa che non contiene avanzamenti riga, ritorni a capo o tabulazioni. |
7 | string Rappresenta una stringa che può contenere avanzamenti riga, ritorni a capo o tabulazioni. |
8 | token Rappresenta una stringa che non contiene avanzamenti riga, ritorni a capo, tabulazioni, spazi iniziali o finali o più spazi |
Restrizioni
I seguenti tipi di restrizioni possono essere utilizzati con i tipi di dati String:
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace
I tipi di dati Data e Ora vengono utilizzati per rappresentare la data e l'ora nei documenti XML.
<xs: date> tipo di dati
Il tipo di dati <xs: date> viene utilizzato per rappresentare la data nel formato AAAA-MM-GG.
YYYY - rappresenta l'anno
MM - rappresenta il mese
DD - rappresenta il giorno
<xs: date> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "birthdate" type = "xs:date"/>
Utilizzo degli elementi in XML -
<birthdate>1980-03-23</birthdate>
Tipo di dati <xs: time>
Il tipo di dati <xs: time> viene utilizzato per rappresentare l'ora nel formato hh: mm: ss.
hh - rappresenta le ore
mm - rappresenta i minuti
ss - rappresenta i secondi
<xs: time> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "startTime" type = "xs:time"/>
Utilizzo degli elementi in XML -
<startTime>10:20:15</startTime>
Tipo di dati <xs: datetime>
Il tipo di dati <xs: datetime> viene utilizzato per rappresentare la data e l'ora nel formato AAAA-MM-GGThh: mm: ss.
YYYY - rappresenta l'anno
MM - rappresenta il mese
DD - rappresenta il giorno
T - rappresenta l'inizio della sezione temporale
hh - rappresenta le ore
mm - rappresenta i minuti
ss - rappresenta i secondi
<xs: datetime> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "startTime" type = "xs:datetime"/>
Utilizzo degli elementi in XML -
<startTime>1980-03-23T10:20:15</startTime>
Tipo di dati <xs: duration>
Il tipo di dati <xs: duration> viene utilizzato per rappresentare l'intervallo di tempo nel formato PnYnMnDTnHnMnS. Ogni componente è opzionale tranne P.
P - rappresenta l'inizio della sezione data
nY - rappresenta l'anno
nM - rappresenta il mese
nD - rappresenta il giorno
T - rappresenta l'inizio della sezione temporale
nH - rappresenta le ore
nM - rappresenta i minuti
nS - rappresenta i secondi
<xs: duration> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "period" type = "xs:duration"/>
Utilizzo dell'elemento in xml per rappresentare un periodo di 6 anni, 3 mesi, 10 giorni e 15 ore.
<period>P6Y3M10DT15H</period>
Tipi di dati data
Di seguito è riportato l'elenco dei tipi di dati di data comunemente utilizzati.
S.No. | Nome e descrizione |
---|---|
1. | date Rappresenta un valore di data |
2. | dateTime Rappresenta un valore di data e ora |
3. | duration Rappresenta un intervallo di tempo |
4. | gDay Rappresenta una parte di una data come il giorno (GG) |
5. | gMonth Rappresenta una parte di una data come il mese (MM) |
6. | gMonthDay Rappresenta una parte di una data come mese e giorno (MM-DD) |
7. | gYear Rappresenta una parte di una data come anno (AAAA) |
8. | gYearMonth Rappresenta una parte di una data come anno e mese (AAAA-MM) |
9. | time Rappresenta un valore temporale |
Restrizioni
I seguenti tipi di restrizioni possono essere utilizzati con i tipi di dati Data:
- enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
I tipi di dati numerici vengono utilizzati per rappresentare i numeri nei documenti XML.
Tipo di dati <xs: decimal>
Il tipo di dati <xs: decimal> viene utilizzato per rappresentare valori numerici. Supporta numeri decimali fino a 18 cifre.
<xs: decimal> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "score" type = "xs:decimal"/>
Utilizzo degli elementi in XML -
<score>9.12</score>
Tipo di dati <xs: integer>
Il tipo di dati <xs: integer> viene utilizzato per rappresentare valori interi.
<xs: integer> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "score" type = "xs:integer"/>
Utilizzo degli elementi in XML -
<score>9</score>
Tipi di dati numerici
Di seguito è riportato l'elenco dei tipi di dati numerici comunemente utilizzati.
S.No. | Nome e descrizione |
---|---|
1. | byte Un numero intero a 8 bit con segno |
2. | decimal Un valore decimale |
3. | int Un numero intero a 32 bit con segno |
4. | integer Un valore intero |
5. | long Un numero intero a 64 bit con segno |
6. | negativeInteger Un numero intero con solo valori negativi (.., - 2, -1) |
7. | nonNegativeInteger Un numero intero con solo valori non negativi (0,1,2, ..) |
8. | nonPositiveInteger Un numero intero con solo valori non positivi (.., - 2, -1,0) |
9. | positiveInteger Un numero intero con solo valori positivi (1,2, ..) |
10. | short Un numero intero a 16 bit con segno |
11. | unsignedLong Un numero intero a 64 bit senza segno |
12. | unsignedInt Un numero intero a 32 bit senza segno |
13. | unsignedShort Un numero intero a 16 bit senza segno |
14. | unsignedByte Un numero intero a 8 bit senza segno |
Restrizioni
I seguenti tipi di restrizioni possono essere utilizzati con i tipi di dati Data:
- enumeration
- fractionDigits
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- totalDigits
- whiteSpace
XSD ha alcuni altri importanti tipi di dati, come Boolean, binary, e anyURI.
Tipo di dati <xs: boolean>
Il tipo di dati <xs: boolean> viene utilizzato per rappresentare il valore vero, falso, 1 (per vero) o 0 (per falso).
<xs: boolean> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "pass" type = "xs:boolean"/>
Utilizzo degli elementi in XML -
<pass>false</pass>
Tipi di dati binari
I tipi di dati binari vengono utilizzati per rappresentare valori binari. Due tipi binari sono comuni in uso.
base64Binary - rappresenta i dati binari con codifica base64
hexBinary - rappresenta i dati binari codificati esadecimali
<xs: hexbinary> Esempio
Dichiarazione dell'elemento in XSD -
<xs:element name = "blob" type = "xs:hexBinary"/>
Utilizzo degli elementi in XML -
<blob>9FEEF</blob>
Tipo di dati <xs: anyURI>
Il tipo di dati <xs: anyURI> viene utilizzato per rappresentare l'URI.
<xs: anyURI> Esempio
Dichiarazione dell'elemento in XSD -
<xs:attribute name = "resource" type = "xs:anyURI"/>
Utilizzo degli elementi in XML -
<image resource = "http://www.tutorialspoint.com/images/smiley.jpg" />
Tipi di dati numerici
Di seguito è riportato l'elenco dei tipi di dati numerici comunemente utilizzati.
S.No. | Nome e descrizione |
---|---|
1. | byte Un numero intero a 8 bit con segno |
2. | decimal Un valore decimale |
3. | int Un numero intero a 32 bit con segno |
4. | integer Un valore intero |
5. | long Un numero intero a 64 bit con segno |
6. | negativeInteger Un numero intero con solo valori negativi (.., - 2, -1) |
7. | nonNegativeInteger Un numero intero con solo valori non negativi (0,1,2, ..) |
8. | nonPositiveInteger Un numero intero con solo valori non positivi (.., - 2, -1,0) |
9. | positiveInteger Un numero intero con solo valori positivi (1,2, ..) |
10. | short Un numero intero a 16 bit con segno |
11. | unsignedLong Un numero intero a 64 bit senza segno |
12. | unsignedInt Un numero intero a 32 bit senza segno |
13. | unsignedShort Un numero intero a 16 bit senza segno |
14. | unsignedByte Un numero intero a 8 bit senza segno |
Restrizioni
I seguenti tipi di restrizioni possono essere utilizzati con i tipi di dati Varie tranne sul tipo di dati booleano:
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace