XSD - Hướng dẫn nhanh
Định nghĩa lược đồ XML, thường được gọi là XSD, là một cách để mô tả chính xác ngôn ngữ XML. XSD kiểm tra tính hợp lệ của cấu trúc và từ vựng của một tài liệu XML dựa trên các quy tắc ngữ pháp của ngôn ngữ XML thích hợp.
Một tài liệu XML có thể được định nghĩa là -
Well-formed- Nếu tuân thủ tài liệu XML cho tất cả các XML chung cai trị như thẻ phải được lồng nhau đúng cách, mở và thẻ đóng phải được cân bằng, và các thẻ trống phải kết thúc với '/>', sau đó nó được gọi là tốt được hình thành .
OR
Valid- Một tài liệu XML được cho là hợp lệ khi nó không chỉ được định dạng tốt mà còn tuân theo XSD có sẵn để chỉ định những thẻ nào nó sử dụng, những thuộc tính nào mà những thẻ đó có thể chứa và những thẻ nào có thể xuất hiện bên trong các thẻ khác, trong số các thuộc tính khác .
Sơ đồ sau đây cho thấy cách XSD được sử dụng để cấu trúc các tài liệu XML:
Đây là một mã XSD đơn giản. Hãy nhìn vào nó.
<?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>
Đặc trưng
Dưới đây là danh sách một số tính năng phổ biến của XSD -
- XSD có thể được mở rộng để bổ sung trong tương lai.
- XSD phong phú hơn và mạnh hơn DTD.
- XSD được viết bằng XML.
- XSD hỗ trợ các kiểu dữ liệu.
- XSD hỗ trợ không gian tên.
- XSD là khuyến nghị của W3C.
Một XSD XML được giữ trong một tài liệu riêng biệt và sau đó tài liệu có thể được liên kết với một tài liệu XML để sử dụng nó.
Cú pháp
Cú pháp cơ bản của XSD như sau:
<?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>
Phần tử <Schema>
Lược đồ là phần tử gốc của XSD và nó luôn được yêu cầu.
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
Đoạn trên chỉ định rằng các phần tử và kiểu dữ liệu được sử dụng trong lược đồ được xác định trong http://www.w3.org/2001/XMLSchema không gian tên và các phần tử / kiểu dữ liệu này phải được bắt đầu bằng xs. Nó luôn luôn được yêu cầu.
targetNamespace = "http://www.tutorialspoint.com"
Đoạn trên chỉ định rằng các phần tử được sử dụng trong lược đồ này được xác định trong http://www.tutorialspoint.comkhông gian tên. Nó là tùy chọn.
xmlns = "http://www.tutorialspoint.com"
Đoạn trên chỉ định rằng không gian tên mặc định là http://www.tutorialspoint.com.
elementFormDefault = "qualified"
Đoạn trên chỉ ra rằng bất kỳ phần tử nào được khai báo trong lược đồ này phải đủ điều kiện không gian tên trước khi sử dụng chúng trong bất kỳ Tài liệu XML nào.
Lược đồ tham chiếu
Hãy xem Lược đồ tham chiếu sau:
<?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"
Đoạn trên chỉ định khai báo không gian tên mặc định. Không gian tên này được sử dụng bởi trình xác thực lược đồ để đảm bảo rằng tất cả các phần tử đều là một phần của không gian tên này. Nó là tùy chọn.
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">
Sau khi xác định xsi thể hiện XMLSchema, hãy sử dụng schemaLocationthuộc tính. Thuộc tính này có hai giá trị, không gian tên và vị trí của Lược đồ XML, được sử dụng cách nhau bởi một khoảng trắng. Nó là tùy chọn.
Chúng tôi sẽ sử dụng trình xác thực XSD dựa trên Java để xác thực students.xml chống lại students.xsd.
sinh viên.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>
sinh viên.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;
}
}
Các bước xác thực XML chống lại XSD
Sao chép XSDValidator.java gửi đến bất kỳ vị trí nào, nói E: > java
Sao chép students.xml đến cùng một địa điểm E: > java
Sao chép students.xsd đến cùng một địa điểm E: > java
Biên dịch XSDValidator.javasử dụng bảng điều khiển. Đảm bảo rằng bạn đã cài đặt JDK 1.5 trở đi trên máy của mình và các đường dẫn classpath đã được định cấu hình. Để biết chi tiết về cách sử dụng JAVA, hãy xem Hướng dẫn sử dụng JAVA
E:\java\javac XSDValidator.java
Hành hình XSDValidator với students.xsd và students.xml được truyền dưới dạng đối số.
E:\java\java XSDValidator students.xsd students.xml
Xác minh đầu ra
Bạn sẽ thấy kết quả sau:
students.xml is valid against students.xsd
Trong chương này, chúng ta sẽ xem các Loại Đơn giản mà XSD định nghĩa.
Không. | Loại & Mô tả Đơn giản |
---|---|
1 | Thành phần Phần tử Đơn giản chỉ có thể chứa văn bản. Nó không thể chứa bất kỳ phần tử nào khác. |
2 | Thuộc tính Bản thân thuộc tính là một kiểu và được sử dụng trong Phần tử phức tạp. |
3 | Sự hạn chế Hạn chế xác định các giá trị được chấp nhận của một phần tử XML. |
Phần tử phức hợp là một phần tử XML có thể chứa các phần tử và / hoặc thuộc tính khác. Chúng ta có thể tạo một phần tử phức tạp theo hai cách:
Xác định một kiểu phức tạp và sau đó tạo một phần tử bằng cách sử dụng type thuộc tính
Xác định một loại phức hợp trực tiếp bằng cách đặt tên
Xác định Kiểu phức hợp và sau đó tạo một phần tử bằng thuộc tính kiểu.
<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' />
Xác định một loại phức hợp trực tiếp bằng cách đặt tên.
<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>
Sau đây là danh sách các Loại phức tạp mà XSD hỗ trợ.
Không. | Loại & Mô tả Đơn giản |
---|---|
1 | Trống Phức hợp Phần tử kiểu phức hợp Rỗng chỉ có thể có thuộc tính nhưng không có nội dung. |
2 | Chỉ các phần tử Phần tử-Chỉ phần tử kiểu phức tạp chỉ có thể chứa phần tử |
3 | Chỉ văn bản Phần tử kiểu phức hợp Text-Only chỉ có thể chứa thuộc tính và văn bản. |
4 | Trộn Phần tử kiểu phức hợp hỗn hợp có thể chứa phần tử, thuộc tính và văn bản. |
5 | Các chỉ số Các chỉ báo kiểm soát cách các phần tử được tổ chức trong một tài liệu XML. |
6 | Phần tử <any> được sử dụng cho các phần tử không được lược đồ xác định |
7 | Thuộc tính <anyAttribute> được sử dụng cho thuộc tính không được lược đồ xác định. |
Kiểu dữ liệu chuỗi được sử dụng để biểu diễn các ký tự trong tài liệu XML.
kiểu dữ liệu <xs: string>
Kiểu dữ liệu <xs: string> có thể nhận các ký tự, nguồn cấp dòng, dấu xuống dòng và các ký tự tab. Bộ xử lý XML không thay thế các nguồn cấp dòng, ký tự xuống dòng và các ký tự tab trong nội dung bằng khoảng trắng và giữ chúng nguyên vẹn. Ví dụ: nhiều khoảng trắng hoặc tab được giữ nguyên trong quá trình hiển thị.
<xs: string> Ví dụ
Khai báo phần tử trong xsd -
<xs:element name = "name" type = "xs:string"/>
Sử dụng phần tử trong xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
kiểu dữ liệu <xs: token>
Kiểu dữ liệu <xs: token> có nguồn gốc từ kiểu dữ liệu <string> và có thể nhận các ký tự, nguồn cấp dòng, dấu xuống dòng và ký tự tab. Bộ xử lý XML sẽ loại bỏ nguồn cấp dữ liệu dòng, tab, dấu xuống dòng, khoảng trắng đầu và cuối và nhiều khoảng trắng.
<xs: token> Ví dụ
Khai báo phần tử trong xsd -
<xs:element name = "name" type = "xs:token"/>
Sử dụng phần tử trong xml -
<name>Dinkar</name>
<name>Dinkar Kad</name>
Các kiểu dữ liệu chuỗi
Sau đây là danh sách các kiểu dữ liệu thường được sử dụng có nguồn gốc từ kiểu dữ liệu <string>.
Không. | Tên & Mô tả |
---|---|
1 | ID Đại diện cho thuộc tính ID trong XML và được sử dụng trong các thuộc tính lược đồ. |
2 | IDREF Đại diện cho thuộc tính IDREF trong XML và được sử dụng trong các thuộc tính lược đồ. |
3 | language Trình bày một id ngôn ngữ hợp lệ |
4 | Name Đại diện cho một tên XML hợp lệ |
5 | NMTOKEN Đại diện cho một thuộc tính NMTOKEN trong XML và được sử dụng trong các thuộc tính lược đồ. |
6 | normalizedString Đại diện cho một chuỗi không chứa nguồn cấp dòng, dấu xuống dòng hoặc tab. |
7 | string Đại diện cho một chuỗi có thể chứa nguồn cấp dữ liệu dòng, ký tự xuống dòng hoặc tab. |
số 8 | token Đại diện cho một chuỗi không chứa nguồn cấp dòng, dấu xuống dòng, tab, dấu cách ở đầu hoặc cuối hoặc nhiều dấu cách |
Những hạn chế
Các loại hạn chế sau có thể được sử dụng với các kiểu dữ liệu Chuỗi:
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace
Các kiểu dữ liệu Ngày và Giờ được sử dụng để biểu thị ngày và giờ trong các tài liệu XML.
kiểu dữ liệu <xs: date>
Kiểu dữ liệu <xs: date> được sử dụng để biểu thị ngày ở định dạng YYYY-MM-DD.
YYYY - đại diện cho năm
MM - đại diện cho tháng
DD - đại diện cho ngày
<xs: date> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "birthdate" type = "xs:date"/>
Sử dụng phần tử trong XML -
<birthdate>1980-03-23</birthdate>
kiểu dữ liệu <xs: time>
Kiểu dữ liệu <xs: time> được sử dụng để biểu thị thời gian ở định dạng hh: mm: ss.
hh - đại diện cho giờ
mm - đại diện cho phút
ss - đại diện cho giây
<xs: time> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "startTime" type = "xs:time"/>
Sử dụng phần tử trong XML -
<startTime>10:20:15</startTime>
kiểu dữ liệu <xs: datetime>
Kiểu dữ liệu <xs: datetime> được sử dụng để biểu thị ngày và giờ ở định dạng YYYY-MM-DDThh: mm: ss.
YYYY - đại diện cho năm
MM - đại diện cho tháng
DD - đại diện cho ngày
T - đại diện cho phần bắt đầu của thời gian
hh - đại diện cho giờ
mm - đại diện cho phút
ss - đại diện cho giây
<xs: datetime> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "startTime" type = "xs:datetime"/>
Sử dụng phần tử trong XML -
<startTime>1980-03-23T10:20:15</startTime>
kiểu dữ liệu <xs: time>
Kiểu dữ liệu <xs: time> được sử dụng để biểu thị khoảng thời gian ở định dạng PnYnMnDTnHnMnS. Mỗi thành phần là tùy chọn ngoại trừ P.
P - đại diện cho phần bắt đầu của ngày
nY - đại diện cho năm
nM - đại diện cho tháng
nD - đại diện cho ngày
T - đại diện cho phần bắt đầu của thời gian
nH - đại diện cho giờ
nM - đại diện cho phút
nS - đại diện cho giây
<xs: time> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "period" type = "xs:duration"/>
Sử dụng phần tử trong xml để thể hiện khoảng thời gian 6 năm, 3 tháng, 10 ngày và 15 giờ.
<period>P6Y3M10DT15H</period>
Loại dữ liệu ngày
Sau đây là danh sách các kiểu dữ liệu ngày thường được sử dụng.
Không. | Tên & Mô tả |
---|---|
1. | date Đại diện cho một giá trị ngày |
2. | dateTime Đại diện cho một giá trị ngày và giờ |
3. | duration Đại diện cho một khoảng thời gian |
4. | gDay Thể hiện một phần của ngày là ngày (DD) |
5. | gMonth Biểu thị một phần của ngày dưới dạng tháng (MM) |
6. | gMonthDay Biểu thị một phần của ngày dưới dạng tháng và ngày (MM-DD) |
7. | gYear Đại diện cho một phần của ngày dưới dạng năm (YYYY) |
số 8. | gYearMonth Biểu thị một phần của ngày dưới dạng năm và tháng (YYYY-MM) |
9. | time Đại diện cho một giá trị thời gian |
Những hạn chế
Các loại hạn chế sau có thể được sử dụng với các kiểu dữ liệu Ngày -
- enumeration
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- whiteSpace
Kiểu dữ liệu số được sử dụng để biểu diễn các số trong tài liệu XML.
kiểu dữ liệu <xs: decimal>
Kiểu dữ liệu <xs: decimal> được sử dụng để biểu diễn các giá trị số. Nó hỗ trợ số thập phân lên đến 18 chữ số.
<xs: decimal> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "score" type = "xs:decimal"/>
Sử dụng phần tử trong XML -
<score>9.12</score>
kiểu dữ liệu <xs: integer>
Kiểu dữ liệu <xs: integer> được sử dụng để biểu diễn các giá trị số nguyên.
<xs: integer> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "score" type = "xs:integer"/>
Sử dụng phần tử trong XML -
<score>9</score>
Các kiểu dữ liệu số
Sau đây là danh sách các kiểu dữ liệu số thường được sử dụng.
Không. | Tên & Mô tả |
---|---|
1. | byte Một số nguyên 8 bit có dấu |
2. | decimal Một giá trị thập phân |
3. | int Một số nguyên 32 bit có dấu |
4. | integer Một giá trị số nguyên |
5. | long Một số nguyên 64 bit có dấu |
6. | negativeInteger Một số nguyên chỉ có giá trị âm (.., - 2, -1) |
7. | nonNegativeInteger Một số nguyên chỉ có các giá trị không âm (0,1,2, ..) |
số 8. | nonPositiveInteger Một số nguyên chỉ có các giá trị không dương (.., - 2, -1,0) |
9. | positiveInteger Một số nguyên chỉ có giá trị dương (1,2, ..) |
10. | short Một số nguyên 16 bit có dấu |
11. | unsignedLong Một số nguyên 64 bit không dấu |
12. | unsignedInt Một số nguyên 32 bit không dấu |
13. | unsignedShort Một số nguyên 16 bit không dấu |
14. | unsignedByte Một số nguyên 8 bit không dấu |
Những hạn chế
Các loại hạn chế sau có thể được sử dụng với các kiểu dữ liệu Ngày -
- enumeration
- fractionDigits
- maxExclusive
- maxInclusive
- minExclusive
- minInclusive
- pattern
- totalDigits
- whiteSpace
XSD có một số kiểu dữ liệu quan trọng khác, chẳng hạn như Boolean, binary, và anyURI.
kiểu dữ liệu <xs: boolean>
Kiểu dữ liệu <xs: boolean> được sử dụng để biểu thị giá trị true, false, 1 (đối với true) hoặc 0 (đối với false).
<xs: boolean> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "pass" type = "xs:boolean"/>
Sử dụng phần tử trong XML -
<pass>false</pass>
Kiểu dữ liệu nhị phân
Các kiểu dữ liệu nhị phân được sử dụng để biểu diễn các giá trị nhị phân. Hai kiểu nhị phân thường được sử dụng.
base64Binary - đại diện cho dữ liệu nhị phân được mã hóa base64
hexBinary - đại diện cho dữ liệu nhị phân được mã hóa theo hệ thập lục phân
<xs: hexbinary> Ví dụ
Khai báo phần tử trong XSD -
<xs:element name = "blob" type = "xs:hexBinary"/>
Sử dụng phần tử trong XML -
<blob>9FEEF</blob>
kiểu dữ liệu <xs: anyURI>
Kiểu dữ liệu <xs: anyURI> được sử dụng để đại diện cho URI.
<xs: anyURI> Ví dụ
Khai báo phần tử trong XSD -
<xs:attribute name = "resource" type = "xs:anyURI"/>
Sử dụng phần tử trong XML -
<image resource = "http://www.tutorialspoint.com/images/smiley.jpg" />
Các kiểu dữ liệu số
Sau đây là danh sách các kiểu dữ liệu số thường được sử dụng.
Không. | Tên & Mô tả |
---|---|
1. | byte Một số nguyên 8 bit có dấu |
2. | decimal Một giá trị thập phân |
3. | int Một số nguyên 32 bit có dấu |
4. | integer Một giá trị số nguyên |
5. | long Một số nguyên 64 bit có dấu |
6. | negativeInteger Một số nguyên chỉ có giá trị âm (.., - 2, -1) |
7. | nonNegativeInteger Một số nguyên chỉ có các giá trị không âm (0,1,2, ..) |
số 8. | nonPositiveInteger Một số nguyên chỉ có các giá trị không dương (.., - 2, -1,0) |
9. | positiveInteger Một số nguyên chỉ có giá trị dương (1,2, ..) |
10. | short Một số nguyên 16 bit có dấu |
11. | unsignedLong Một số nguyên 64 bit không dấu |
12. | unsignedInt Một số nguyên 32 bit không dấu |
13. | unsignedShort Một số nguyên 16 bit không dấu |
14. | unsignedByte Một số nguyên 8 bit không dấu |
Những hạn chế
Các loại hạn chế sau có thể được sử dụng với Các kiểu dữ liệu khác ngoại trừ kiểu dữ liệu boolean -
- enumeration
- length
- maxLength
- minLength
- pattern
- whiteSpace