XSD - szybki przewodnik
Definicja schematu XML, powszechnie znana jako XSD, to sposób na precyzyjne opisanie języka XML. XSD sprawdza poprawność struktury i słownictwa dokumentu XML z regułami gramatycznymi odpowiedniego języka XML.
Dokument XML można zdefiniować jako -
Well-formed- Jeśli dokument XML jest zgodny ze wszystkimi ogólnymi regułami XML, takimi jak tagi, muszą być prawidłowo zagnieżdżone, tagi otwierające i zamykające muszą być zrównoważone, a puste tagi muszą kończyć się znakiem „/>”, wówczas jest on nazywany dobrze sformułowanym .
OR
Valid- Dokument XML, o którym mówi się, że jest prawidłowy, gdy jest nie tylko dobrze sformułowany , ale jest również zgodny z dostępnym XSD, który określa, które tagi używa, jakie atrybuty mogą zawierać te tagi i które tagi mogą występować w innych tagach, między innymi .
Poniższy diagram pokazuje, jak XSD jest używany do tworzenia struktury dokumentów XML -
Oto prosty kod XSD. Spójrz na to.
<?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>
funkcje
Oto lista niektórych popularnych funkcji XSD -
- XSD można rozszerzyć w celu przyszłego rozszerzenia.
- XSD jest bogatszy i potężniejszy niż DTD.
- XSD jest napisane w XML.
- XSD obsługuje typy danych.
- XSD obsługuje przestrzenie nazw.
- XSD to zalecenie W3C.
XML XSD jest przechowywany w oddzielnym dokumencie, a następnie dokument można połączyć z dokumentem XML, aby go użyć.
Składnia
Podstawowa składnia XSD jest następująca -
<?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>
Element <Schema>
Schemat jest głównym elementem XSD i jest zawsze wymagany.
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
Powyższy fragment określa, że elementy i typy danych użyte w schemacie są zdefiniowane w http://www.w3.org/2001/XMLSchema przestrzeń nazw i te elementy / typy danych powinny być poprzedzone przedrostkiem xs. Jest to zawsze wymagane.
targetNamespace = "http://www.tutorialspoint.com"
Powyższy fragment określa, że elementy użyte w tym schemacie są zdefiniowane w http://www.tutorialspoint.comprzestrzeń nazw. Jest to opcjonalne.
xmlns = "http://www.tutorialspoint.com"
Powyższy fragment określa, że domyślna przestrzeń nazw to http://www.tutorialspoint.com.
elementFormDefault = "qualified"
Powyższy fragment wskazuje, że wszystkie elementy zadeklarowane w tym schemacie muszą mieć kwalifikację przestrzeni nazw przed użyciem ich w jakimkolwiek dokumencie XML.Jest to opcjonalne.
Schemat odniesienia
Spójrz na następujący schemat odniesienia -
<?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"
Powyższy fragment określa domyślną deklarację przestrzeni nazw. Ta przestrzeń nazw jest używana przez walidator schematu, który sprawdza, czy wszystkie elementy są częścią tej przestrzeni nazw. Jest to opcjonalne.
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">
Po zdefiniowaniu instancji XMLSchema xsi użyj schemaLocationatrybut. Ten atrybut ma dwie wartości, przestrzeń nazw i lokalizację schematu XML, które mają być używane oddzielone spacją. Jest to opcjonalne.
Do walidacji użyjemy walidatora XSD opartego na Javie students.xml niezgodne z 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>
Students.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;
}
}
Kroki, aby sprawdzić poprawność XML względem XSD
Skopiuj plik XSDValidator.java na przykład w dowolne miejsce E: > java
Skopiuj plik students.xml do tej samej lokalizacji E: > java
Skopiuj plik students.xsd do tej samej lokalizacji E: > java
Skompilować XSDValidator.javaza pomocą konsoli. Upewnij się, że na komputerze jest zainstalowane oprogramowanie JDK 1.5 i nowsze, a ścieżki klas są skonfigurowane. Aby uzyskać szczegółowe informacje na temat korzystania z JAVA, zobacz Samouczek JAVA
E:\java\javac XSDValidator.java
Wykonać XSDValidator z students.xsd i students.xml przekazane jako argument.
E:\java\java XSDValidator students.xsd students.xml
Sprawdź dane wyjściowe
Zobaczysz następujący wynik -
students.xml is valid against students.xsd
W tym rozdziale zobaczymy proste typy, które definiuje XSD.
S.No. | Prosty typ i opis |
---|---|
1 | Element Prosty element może zawierać tylko tekst. Nie może zawierać żadnego innego elementu. |
2 | Atrybut Atrybut sam w sobie jest typem i jest używany w elemencie złożonym. |
3 | Ograniczenie Ograniczenie definiuje dopuszczalne wartości elementu XML. |
Element złożony to element XML, który może zawierać inne elementy i / lub atrybuty. Złożony element możemy stworzyć na dwa sposoby -
Zdefiniuj typ złożony, a następnie utwórz element przy użyciu type atrybut
Zdefiniuj typ złożony bezpośrednio przez nazewnictwo
Zdefiniuj typ złożony, a następnie utwórz element przy użyciu atrybutu typu.
<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' />
Zdefiniuj typ złożony bezpośrednio przez nazewnictwo.
<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>
Poniżej znajduje się lista typów złożonych obsługiwanych przez XSD.
S.No. | Prosty typ i opis |
---|---|
1 | Pusty Złożony Pusty element typu złożonego może mieć tylko atrybuty, ale bez zawartości. |
2 | Tylko elementy Element typu złożonego Tylko elementy może zawierać tylko elementy |
3 | Tylko tekst Element typu złożonego Tylko tekst może zawierać tylko atrybut i tekst. |
4 | Mieszany Mieszany element typu złożonego może zawierać element, atrybut i tekst. |
5 | Wskaźniki Wskaźniki kontrolują sposób organizacji elementów w dokumencie XML. |
6 | Element <any> jest używany w przypadku elementów, które nie są zdefiniowane przez schemat |
7 | Atrybut <anyAttribute> jest używany dla atrybutu, który nie jest zdefiniowany przez schemat. |
Typy danych String są używane do reprezentowania znaków w dokumentach XML.
Typ danych <xs: string>
Typ danych <xs: string> może przyjmować znaki, nowe wiersze, powroty karetki i znaki tabulacji. Procesor XML nie zastępuje znaków nowego wiersza, powrotu karetki i znaków tabulacji w treści spacjami i zachowuje je nienaruszone. Na przykład podczas wyświetlania zachowanych jest wiele spacji lub tabulatorów.
<xs: string> Przykład
Deklaracja elementu w xsd -
<xs:element name = "name" type = "xs:string"/>
Wykorzystanie elementu w xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
Typ danych <xs: token>
Typ danych <xs: token> pochodzi z typu danych <string> i może przyjmować znaki, nowe wiersze, powroty karetki i znaki tabulacji. Procesor XML usunie nowe wiersze, tabulatory, powroty karetki, spacje początkowe i końcowe oraz wiele spacji.
<xs: token> Przykład
Deklaracja elementu w xsd -
<xs:element name = "name" type = "xs:token"/>
Wykorzystanie elementu w xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
Typy danych ciągów
Poniżej znajduje się lista najczęściej używanych typów danych, które pochodzą z typu danych <string>.
S.No. | Nazwa i opis |
---|---|
1 | ID Reprezentuje atrybut ID w XML i jest używany w atrybutach schematu. |
2 | IDREF Reprezentuje atrybut IDREF w XML i jest używany w atrybutach schematu. |
3 | language Reprezentuje prawidłowy identyfikator języka |
4 | Name Reprezentuje prawidłową nazwę XML |
5 | NMTOKEN Reprezentuje atrybut NMTOKEN w XML i jest używany w atrybutach schematu. |
6 | normalizedString Reprezentuje ciąg, który nie zawiera znaków nowej linii, znaków powrotu karetki ani tabulatorów. |
7 | string Reprezentuje ciąg, który może zawierać nowe wiersze, powroty karetki lub tabulatory. |
8 | token Reprezentuje ciąg, który nie zawiera znaków nowego wiersza, powrotu karetki, tabulatorów, spacji wiodących lub końcowych ani wielu spacji |
Ograniczenia
Następujące typy ograniczeń mogą być używane z typami danych typu String -
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace
Typy danych Data i godzina są używane do reprezentowania daty i godziny w dokumentach XML.
Typ danych <xs: date>
Typ danych <xs: date> służy do przedstawiania daty w formacie RRRR-MM-DD.
YYYY - oznacza rok
MM - reprezentuje miesiąc
DD - reprezentuje dzień
<xs: date> Przykład
Deklaracja elementu w XSD -
<xs:element name = "birthdate" type = "xs:date"/>
Wykorzystanie elementu w XML -
<birthdate>1980-03-23</birthdate>
Typ danych <xs: time>
Typ danych <xs: time> służy do przedstawiania czasu w formacie gg: mm: ss.
hh - reprezentuje godziny
mm - oznacza minuty
ss - oznacza sekundy
<xs: time> Przykład
Deklaracja elementu w XSD -
<xs:element name = "startTime" type = "xs:time"/>
Wykorzystanie elementu w XML -
<startTime>10:20:15</startTime>
Typ danych <xs: datetime>
Typ danych <xs: datetime> służy do przedstawiania daty i godziny w formacie RRRR-MM-DDThh: mm: ss.
YYYY - oznacza rok
MM - reprezentuje miesiąc
DD - reprezentuje dzień
T - reprezentuje początek odcinka czasu
hh - reprezentuje godziny
mm - oznacza minuty
ss - oznacza sekundy
<xs: datetime> Przykład
Deklaracja elementu w XSD -
<xs:element name = "startTime" type = "xs:datetime"/>
Wykorzystanie elementu w XML -
<startTime>1980-03-23T10:20:15</startTime>
<xs: duration> typ danych
Typ danych <xs: duration> służy do reprezentowania przedziału czasu w formacie PnYnMnDTnHnMnS. Każdy składnik jest opcjonalny, z wyjątkiem P.
P - oznacza początek sekcji daty
nY - oznacza rok
nM - reprezentuje miesiąc
nD - reprezentuje dzień
T - reprezentuje początek odcinka czasu
nH - reprezentuje godziny
nM - oznacza minuty
nS - oznacza sekundy
<xs: duration> Przykład
Deklaracja elementu w XSD -
<xs:element name = "period" type = "xs:duration"/>
Użycie elementu w xml reprezentuje okres 6 lat, 3 miesięcy, 10 dni i 15 godzin.
<period>P6Y3M10DT15H</period>
Data Typy danych
Poniżej znajduje się lista powszechnie używanych typów danych dat.
S.No. | Nazwa i opis |
---|---|
1. | date Reprezentuje wartość daty |
2. | dateTime Reprezentuje wartość daty i godziny |
3. | duration Reprezentuje przedział czasu |
4. | gDay Reprezentuje część daty jako dzień (DD) |
5. | gMonth Reprezentuje część daty jako miesiąc (MM) |
6. | gMonthDay Reprezentuje część daty jako miesiąc i dzień (MM-DD) |
7. | gYear Reprezentuje część daty jako rok (RRRR) |
8. | gYearMonth Reprezentuje część daty jako rok i miesiąc (RRRR-MM) |
9. | time Reprezentuje wartość czasu |
Ograniczenia
Następujące typy ograniczeń mogą być używane z typami danych Data -
- enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
Liczbowe typy danych są używane do reprezentowania liczb w dokumentach XML.
Typ danych <xs: decimal>
Typ danych <xs: decimal> służy do przedstawiania wartości liczbowych. Obsługuje liczby dziesiętne do 18 cyfr.
<xs: decimal> Przykład
Deklaracja elementu w XSD -
<xs:element name = "score" type = "xs:decimal"/>
Wykorzystanie elementu w XML -
<score>9.12</score>
Typ danych <xs: integer>
Typ danych <xs: integer> służy do reprezentowania wartości całkowitych.
<xs: integer> Przykład
Deklaracja elementu w XSD -
<xs:element name = "score" type = "xs:integer"/>
Wykorzystanie elementu w XML -
<score>9</score>
Numeryczne typy danych
Poniżej znajduje się lista najczęściej używanych liczbowych typów danych.
S.No. | Nazwa i opis |
---|---|
1. | byte 8-bitowa liczba całkowita ze znakiem |
2. | decimal Wartość dziesiętna |
3. | int 32-bitowa liczba całkowita ze znakiem |
4. | integer Wartość całkowita |
5. | long 64-bitowa liczba całkowita ze znakiem |
6. | negativeInteger Liczba całkowita mająca tylko wartości ujemne (.., - 2, -1) |
7. | nonNegativeInteger Liczba całkowita mająca tylko wartości nieujemne (0, 1, 2, ..) |
8. | nonPositiveInteger Liczba całkowita mająca tylko wartości niedodatnie (.., - 2, -1,0) |
9. | positiveInteger Liczba całkowita mająca tylko wartości dodatnie (1, 2, ...) |
10. | short 16-bitowa liczba całkowita ze znakiem |
11. | unsignedLong 64-bitowa liczba całkowita bez znaku |
12. | unsignedInt 32-bitowa liczba całkowita bez znaku |
13. | unsignedShort 16-bitowa liczba całkowita bez znaku |
14. | unsignedByte 8-bitowa liczba całkowita bez znaku |
Ograniczenia
Następujące typy ograniczeń mogą być używane z typami danych Data -
- enumeration
- fractionDigits
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- totalDigits
- whiteSpace
XSD ma kilka innych ważnych typów danych, takich jak Boolean, binary, i anyURI.
Typ danych <xs: boolean>
Typ danych <xs: boolean> jest używany do reprezentowania wartości prawda, fałsz, 1 (prawda) lub 0 (fałsz).
<xs: boolean> Przykład
Deklaracja elementu w XSD -
<xs:element name = "pass" type = "xs:boolean"/>
Wykorzystanie elementu w XML -
<pass>false</pass>
Binarne typy danych
Binarne typy danych służą do reprezentowania wartości binarnych. W użyciu są dwa typy binarne.
base64Binary - reprezentuje dane binarne zakodowane w formacie base64
hexBinary - reprezentuje dane binarne zakodowane szesnastkowo
<xs: hexbinary> Przykład
Deklaracja elementu w XSD -
<xs:element name = "blob" type = "xs:hexBinary"/>
Wykorzystanie elementu w XML -
<blob>9FEEF</blob>
Typ danych <xs: anyURI>
Typ danych <xs: anyURI> jest używany do reprezentowania identyfikatora URI.
<xs: anyURI> Przykład
Deklaracja elementu w XSD -
<xs:attribute name = "resource" type = "xs:anyURI"/>
Wykorzystanie elementu w XML -
<image resource = "http://www.tutorialspoint.com/images/smiley.jpg" />
Numeryczne typy danych
Poniżej znajduje się lista najczęściej używanych liczbowych typów danych.
S.No. | Nazwa i opis |
---|---|
1. | byte 8-bitowa liczba całkowita ze znakiem |
2. | decimal Wartość dziesiętna |
3. | int 32-bitowa liczba całkowita ze znakiem |
4. | integer Wartość całkowita |
5. | long 64-bitowa liczba całkowita ze znakiem |
6. | negativeInteger Liczba całkowita mająca tylko wartości ujemne (.., - 2, -1) |
7. | nonNegativeInteger Liczba całkowita mająca tylko wartości nieujemne (0, 1, 2, ..) |
8. | nonPositiveInteger Liczba całkowita mająca tylko wartości niedodatnie (.., - 2, -1,0) |
9. | positiveInteger Liczba całkowita mająca tylko wartości dodatnie (1, 2, ...) |
10. | short 16-bitowa liczba całkowita ze znakiem |
11. | unsignedLong 64-bitowa liczba całkowita bez znaku |
12. | unsignedInt 32-bitowa liczba całkowita bez znaku |
13. | unsignedShort 16-bitowa liczba całkowita bez znaku |
14. | unsignedByte 8-bitowa liczba całkowita bez znaku |
Ograniczenia
Następujące typy ograniczeń mogą być używane z różnymi typami danych z wyjątkiem logicznego typu danych -
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace