XSD - Kurzanleitung
Die XML-Schemadefinition, allgemein bekannt als XSD, ist eine Möglichkeit, die XML-Sprache genau zu beschreiben. XSD überprüft die Gültigkeit der Struktur und des Vokabulars eines XML-Dokuments anhand der grammatikalischen Regeln der entsprechenden XML-Sprache.
Ein XML-Dokument kann definiert werden als -
Well-formed- Wenn das XML-Dokument allen allgemeinen XML-Regeln entspricht, z. B. Tags müssen ordnungsgemäß verschachtelt sein, öffnende und schließende Tags müssen ausgeglichen sein und leere Tags müssen mit '/>' enden, wird es als wohlgeformt bezeichnet .
OR
Valid- Ein XML-Dokument gilt als gültig, wenn es nicht nur wohlgeformt ist , sondern auch der verfügbaren XSD entspricht, die unter anderem angibt, welche Tags verwendet werden, welche Attribute diese Tags enthalten können und welche Tags in anderen Tags vorkommen können .
Das folgende Diagramm zeigt, wie XSD zum Strukturieren von XML-Dokumenten verwendet wird.
Hier ist ein einfacher XSD-Code. Schau es dir an.
<?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>
Eigenschaften
Hier ist eine Liste einiger der beliebtesten Funktionen von XSD -
- XSDs können für zukünftige Ergänzungen erweiterbar sein.
- XSD ist umfangreicher und leistungsfähiger als DTD.
- XSD ist in XML geschrieben.
- XSD unterstützt Datentypen.
- XSD unterstützt Namespaces.
- XSD ist eine W3C-Empfehlung.
Eine XML-XSD wird in einem separaten Dokument gespeichert. Anschließend kann das Dokument mit einem XML-Dokument verknüpft werden, um es zu verwenden.
Syntax
Die grundlegende Syntax einer XSD lautet wie folgt:
<?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>
<Schema> -Element
Schema ist das Stammelement von XSD und wird immer benötigt.
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
Das obige Fragment gibt an, dass Elemente und Datentypen, die im Schema verwendet werden, in definiert sind http://www.w3.org/2001/XMLSchema Namespace und diesen Elementen / Datentypen sollte ein Präfix vorangestellt werden xs. Es ist immer erforderlich.
targetNamespace = "http://www.tutorialspoint.com"
Das obige Fragment gibt an, dass die in diesem Schema verwendeten Elemente in definiert sind http://www.tutorialspoint.comNamespace. Es ist optional.
xmlns = "http://www.tutorialspoint.com"
Das obige Fragment gibt den Standard-Namespace an http://www.tutorialspoint.com.
elementFormDefault = "qualified"
Das obige Fragment gibt an, dass alle in diesem Schema deklarierten Elemente Namespace-qualifiziert sein müssen, bevor sie in einem XML-Dokument verwendet werden können. Es ist optional.
Referenzschema
Schauen Sie sich das folgende Referenzierungsschema an -
<?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"
Das obige Fragment gibt die Standard-Namespace-Deklaration an. Dieser Namespace wird vom Schema-Validator verwendet, um zu überprüfen, ob alle Elemente Teil dieses Namespace sind. Es ist optional.
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">
Verwenden Sie nach dem Definieren der XMLSchema-Instanz xsi schemaLocationAttribut. Dieses Attribut hat zwei Werte, den Namespace und den Speicherort des XML-Schemas, die durch ein Leerzeichen getrennt verwendet werden sollen. Es ist optional.
Wir werden den Java-basierten XSD-Validator zur Validierung verwenden students.xml gegen die students.xsd.
Studenten.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>
Studenten.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;
}
}
Schritte zum Validieren von XML gegen XSD
Kopiere das XSDValidator.java Datei an einen beliebigen Ort, sagen wir E: > Java
Kopiere das students.xml zum gleichen Ort E: > java
Kopiere das students.xsd zum gleichen Ort E: > java
Kompilieren XSDValidator.javamit Konsole. Stellen Sie sicher, dass JDK 1.5 ab Ihrem Computer installiert ist und Klassenpfade konfiguriert sind. Einzelheiten zur Verwendung von JAVA finden Sie im JAVA-Lernprogramm
E:\java\javac XSDValidator.java
Ausführen XSDValidator mit students.xsd und students.xml als Argument übergeben.
E:\java\java XSDValidator students.xsd students.xml
Überprüfen Sie die Ausgabe
Sie sehen das folgende Ergebnis -
students.xml is valid against students.xsd
In diesem Kapitel sehen wir einfache Typen, die XSD definiert.
S.No. | Einfacher Typ & Beschreibung |
---|---|
1 | Element Einfaches Element kann nur Text enthalten. Es darf kein anderes Element enthalten. |
2 | Attribut Das Attribut ist selbst ein Typ und wird in Complex Element verwendet. |
3 | Beschränkung Einschränkung definiert die akzeptablen Werte eines XML-Elements. |
Komplexes Element ist ein XML-Element, das andere Elemente und / oder Attribute enthalten kann. Wir können ein komplexes Element auf zwei Arten erstellen -
Definieren Sie einen komplexen Typ und erstellen Sie dann ein Element mit type Attribut
Definieren Sie einen komplexen Typ direkt durch Benennen
Definieren Sie einen komplexen Typ und erstellen Sie dann ein Element mit dem Typattribut.
<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' />
Definieren Sie einen komplexen Typ direkt durch Benennen.
<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>
Im Folgenden finden Sie eine Liste der von XSD unterstützten komplexen Typen.
S.No. | Einfacher Typ & Beschreibung |
---|---|
1 | Leer Komplex Leeres komplexes Element kann nur Attribute, aber keinen Inhalt haben. |
2 | Nur Elemente Komplexe Elemente vom Typ "Nur Elemente" können nur Elemente enthalten |
3 | Nur Text Komplexes Nur-Text-Element kann nur Attribute und Text enthalten. |
4 | Gemischt Gemischte komplexe Elemente können Elemente, Attribute und Text enthalten. |
5 | Indikatoren Indikatoren steuern, wie Elemente in einem XML-Dokument organisiert werden sollen. |
6 | Das <any> -Element wird für Elemente verwendet, die nicht durch ein Schema definiert sind |
7 | Das Attribut <anyAttribute> wird für Attribute verwendet, die nicht durch ein Schema definiert sind. |
String-Datentypen werden verwendet, um Zeichen in den XML-Dokumenten darzustellen.
Datentyp <xs: string>
Der Datentyp <xs: string> kann Zeichen, Zeilenvorschübe, Zeilenumbrüche und Tabulatorzeichen enthalten. Der XML-Prozessor ersetzt keine Zeilenvorschübe, Zeilenumbrüche und Tabulatorzeichen im Inhalt durch Leerzeichen und behält sie bei. Beispielsweise bleiben während der Anzeige mehrere Leerzeichen oder Tabulatoren erhalten.
<xs: string> Beispiel
Elementdeklaration in xsd -
<xs:element name = "name" type = "xs:string"/>
Elementverwendung in xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
Datentyp <xs: token>
Der Datentyp <xs: token> wird vom Datentyp <string> abgeleitet und kann Zeichen, Zeilenvorschübe, Zeilenumbrüche und Tabulatorzeichen enthalten. Der XML-Prozessor entfernt Zeilenvorschübe, Tabulatoren, Zeilenumbrüche, führende und nachfolgende Leerzeichen sowie mehrere Leerzeichen.
<xs: token> Beispiel
Elementdeklaration in xsd -
<xs:element name = "name" type = "xs:token"/>
Elementverwendung in xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
String-Datentypen
Im Folgenden finden Sie eine Liste häufig verwendeter Datentypen, die vom Datentyp <string> abgeleitet sind.
S.No. | Name & Beschreibung |
---|---|
1 | ID Stellt das ID-Attribut in XML dar und wird in Schemaattributen verwendet. |
2 | IDREF Repräsentiert das IDREF-Attribut in XML und wird in Schemaattributen verwendet. |
3 | language Stellt eine gültige Sprach-ID dar |
4 | Name Stellt einen gültigen XML-Namen dar |
5 | NMTOKEN Stellt ein NMTOKEN-Attribut in XML dar und wird in Schemaattributen verwendet. |
6 | normalizedString Stellt eine Zeichenfolge dar, die keine Zeilenvorschübe, Zeilenumbrüche oder Tabulatoren enthält. |
7 | string Stellt eine Zeichenfolge dar, die Zeilenvorschübe, Zeilenumbrüche oder Registerkarten enthalten kann. |
8 | token Stellt eine Zeichenfolge dar, die keine Zeilenvorschübe, Zeilenumbrüche, Tabulatoren, führenden oder nachfolgenden Leerzeichen oder mehrere Leerzeichen enthält |
Beschränkungen
Die folgenden Arten von Einschränkungen können mit String-Datentypen verwendet werden:
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace
Datums- und Uhrzeitdatentypen werden verwendet, um Datum und Uhrzeit in den XML-Dokumenten darzustellen.
Datentyp <xs: date>
Der Datentyp <xs: date> wird verwendet, um das Datum im Format JJJJ-MM-TT darzustellen.
YYYY - repräsentiert das Jahr
MM - steht für Monat
DD - repräsentiert den Tag
<xs: date> Beispiel
Elementdeklaration in XSD -
<xs:element name = "birthdate" type = "xs:date"/>
Elementverwendung in XML -
<birthdate>1980-03-23</birthdate>
Datentyp <xs: time>
Der Datentyp <xs: time> wird verwendet, um die Zeit im Format hh: mm: ss darzustellen.
hh - steht für Stunden
mm - steht für Minuten
ss - steht für Sekunden
<xs: time> Beispiel
Elementdeklaration in XSD -
<xs:element name = "startTime" type = "xs:time"/>
Elementverwendung in XML -
<startTime>10:20:15</startTime>
Datentyp <xs: datetime>
Der Datentyp <xs: datetime> wird verwendet, um Datum und Uhrzeit im Format JJJJ-MM-TTThh: mm: ss darzustellen.
YYYY - repräsentiert das Jahr
MM - steht für Monat
DD - repräsentiert den Tag
T - repräsentiert den Beginn des Zeitabschnitts
hh - steht für Stunden
mm - steht für Minuten
ss - steht für Sekunden
<xs: datetime> Beispiel
Elementdeklaration in XSD -
<xs:element name = "startTime" type = "xs:datetime"/>
Elementverwendung in XML -
<startTime>1980-03-23T10:20:15</startTime>
Datentyp <xs: duration>
Der Datentyp <xs: duration> wird verwendet, um das Zeitintervall im PnYnMnDTnHnMnS-Format darzustellen. Jede Komponente außer P. ist optional.
P - repräsentiert den Abschnitt zum Beginn des Datums
nY - repräsentiert das Jahr
nM - steht für Monat
nD - repräsentiert den Tag
T - repräsentiert den Beginn des Zeitabschnitts
nH - steht für Stunden
nM - steht für Minuten
nS - steht für Sekunden
<xs: duration> Beispiel
Elementdeklaration in XSD -
<xs:element name = "period" type = "xs:duration"/>
Elementverwendung in XML für einen Zeitraum von 6 Jahren, 3 Monaten, 10 Tagen und 15 Stunden.
<period>P6Y3M10DT15H</period>
Datumsdatentypen
Im Folgenden finden Sie eine Liste der häufig verwendeten Datumsdatentypen.
S.No. | Name & Beschreibung |
---|---|
1. | date Stellt einen Datumswert dar |
2. | dateTime Stellt einen Datums- und Zeitwert dar |
3. | duration Stellt ein Zeitintervall dar |
4. | gDay Stellt einen Teil eines Datums als Tag dar (DD) |
5. | gMonth Stellt einen Teil eines Datums als Monat (MM) dar |
6. | gMonthDay Stellt einen Teil eines Datums als Monat und Tag dar (MM-DD) |
7. | gYear Stellt einen Teil eines Datums als Jahr dar (JJJJ) |
8. | gYearMonth Stellt einen Teil eines Datums als Jahr und Monat dar (JJJJ-MM) |
9. | time Stellt einen Zeitwert dar |
Beschränkungen
Die folgenden Arten von Einschränkungen können mit Datumsdatentypen verwendet werden:
- enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
Numerische Datentypen werden verwendet, um Zahlen in XML-Dokumenten darzustellen.
Datentyp <xs: decimal>
Der Datentyp <xs: decimal> wird zur Darstellung numerischer Werte verwendet. Es unterstützt Dezimalzahlen mit bis zu 18 Stellen.
<xs: decimal> Beispiel
Elementdeklaration in XSD -
<xs:element name = "score" type = "xs:decimal"/>
Elementverwendung in XML -
<score>9.12</score>
Datentyp <xs: integer>
Der Datentyp <xs: integer> wird zur Darstellung ganzzahliger Werte verwendet.
<xs: integer> Beispiel
Elementdeklaration in XSD -
<xs:element name = "score" type = "xs:integer"/>
Elementverwendung in XML -
<score>9</score>
Numerische Datentypen
Im Folgenden finden Sie eine Liste häufig verwendeter numerischer Datentypen.
S.No. | Name & Beschreibung |
---|---|
1. | byte Eine vorzeichenbehaftete 8-Bit-Ganzzahl |
2. | decimal Ein Dezimalwert |
3. | int Eine vorzeichenbehaftete 32-Bit-Ganzzahl |
4. | integer Ein ganzzahliger Wert |
5. | long Eine vorzeichenbehaftete 64-Bit-Ganzzahl |
6. | negativeInteger Eine ganze Zahl mit nur negativen Werten (.., - 2, -1) |
7. | nonNegativeInteger Eine ganze Zahl mit nur nicht negativen Werten (0,1,2, ..) |
8. | nonPositiveInteger Eine ganze Zahl mit nur nicht positiven Werten (.., - 2, -1,0) |
9. | positiveInteger Eine ganze Zahl mit nur positiven Werten (1,2, ..) |
10. | short Eine vorzeichenbehaftete 16-Bit-Ganzzahl |
11. | unsignedLong Eine vorzeichenlose 64-Bit-Ganzzahl |
12. | unsignedInt Eine vorzeichenlose 32-Bit-Ganzzahl |
13. | unsignedShort Eine vorzeichenlose 16-Bit-Ganzzahl |
14. | unsignedByte Eine vorzeichenlose 8-Bit-Ganzzahl |
Beschränkungen
Die folgenden Arten von Einschränkungen können mit Datumsdatentypen verwendet werden:
- enumeration
- fractionDigits
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- totalDigits
- whiteSpace
XSD verfügt über einige andere wichtige Datentypen, z Boolean, binary, und anyURI.
Datentyp <xs: boolean>
Der Datentyp <xs: boolean> wird verwendet, um den Wert true, false, 1 (für true) oder 0 (für false) darzustellen.
<xs: boolean> Beispiel
Elementdeklaration in XSD -
<xs:element name = "pass" type = "xs:boolean"/>
Elementverwendung in XML -
<pass>false</pass>
Binäre Datentypen
Die Binärdatentypen werden zur Darstellung von Binärwerten verwendet. Zwei Binärtypen werden häufig verwendet.
base64Binary - repräsentiert base64-codierte Binärdaten
hexBinary - repräsentiert hexadezimal codierte Binärdaten
<xs: hexbinary> Beispiel
Elementdeklaration in XSD -
<xs:element name = "blob" type = "xs:hexBinary"/>
Elementverwendung in XML -
<blob>9FEEF</blob>
Datentyp <xs: anyURI>
Der Datentyp <xs: anyURI> wird zur Darstellung des URI verwendet.
<xs: anyURI> Beispiel
Elementdeklaration in XSD -
<xs:attribute name = "resource" type = "xs:anyURI"/>
Elementverwendung in XML -
<image resource = "http://www.tutorialspoint.com/images/smiley.jpg" />
Numerische Datentypen
Im Folgenden finden Sie eine Liste häufig verwendeter numerischer Datentypen.
S.No. | Name & Beschreibung |
---|---|
1. | byte Eine vorzeichenbehaftete 8-Bit-Ganzzahl |
2. | decimal Ein Dezimalwert |
3. | int Eine vorzeichenbehaftete 32-Bit-Ganzzahl |
4. | integer Ein ganzzahliger Wert |
5. | long Eine vorzeichenbehaftete 64-Bit-Ganzzahl |
6. | negativeInteger Eine ganze Zahl mit nur negativen Werten (.., - 2, -1) |
7. | nonNegativeInteger Eine ganze Zahl mit nur nicht negativen Werten (0,1,2, ..) |
8. | nonPositiveInteger Eine ganze Zahl mit nur nicht positiven Werten (.., - 2, -1,0) |
9. | positiveInteger Eine ganze Zahl mit nur positiven Werten (1,2, ..) |
10. | short Eine vorzeichenbehaftete 16-Bit-Ganzzahl |
11. | unsignedLong Eine vorzeichenlose 64-Bit-Ganzzahl |
12. | unsignedInt Eine vorzeichenlose 32-Bit-Ganzzahl |
13. | unsignedShort Eine vorzeichenlose 16-Bit-Ganzzahl |
14. | unsignedByte Eine vorzeichenlose 8-Bit-Ganzzahl |
Beschränkungen
Die folgenden Arten von Einschränkungen können für verschiedene Datentypen verwendet werden, außer für den booleschen Datentyp:
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace