hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • XML
XML Schema – Lược đồ XML

XML Schema – Lược đồ XML

  • 18-06-2023
  • Toanngo92
  • 0 Comments

Mục lục

  • Khái niệm và vai trò XML Schema
    • So sánh và phân biệt các tính năng của DTD và Schema
    • Định nghĩa XML Schema
    • Viết XML Schema
      • XML File
      • XSD File
    • Các tính năng của schema
      • Schema hỗ trợ các loại dữ liệu
      • Các Schema có thể linh hoạt và hiệu quả
      • Schema đảm bảo giao tiếp dữ liệu an toàn
      • Các schema có thể mở rộng
      • Schema bắt lỗi cấp cao hơn
      • Schema hỗ trợ namespace
      • Các kiểu dữ liệu phong phú hơn
      • Nguyên mẫu (Archetypes)
      • Nhóm thuộc tính (Attribute grouping)
      • Nguyên mẫu có thể tinh chỉnh (Refinable Archetypes)
    • So sánh DTD với các schema
      • DTD được viết bằng cú pháp không phải XML
      • DTD không thể mở rộng
      • DTD không hỗ trợ namespace
      • DTD cung cấp kiểu dữ liệu hạn chế
        • DTD cho “book.xml”
        • XML Schema cho “Book.xml”
    • Ưu điểm của XML Schema so với DTD
      • Các kiểu dữ liệu phong phú hơn
      • Archtypes (nguyên mẫu)
      • Nhóm thuộc tính (Attribute grouping)
      • Các nguyên mẫu có thể tinh chỉnh
  • Khám phá Schema
    • Các kiểu dữ liệu được Schema hỗ trợ
      • string
      • boolean
      • numeric
      • dateTime
      • binary
      • anyURI
    • Các kiểu dữ liệu bổ sung
      • integer
      • decimal
      • time
    • Schema Vocabulary (từ vựng lược đồ)
  • Làm việc với kiểu dữ liệu phức tạp
      • Phần tử rỗng
      • Chỉ chứa phần tử
      • Chỉ chứa văn bản
      • Trộn lẫn (mixed)
    • Định nghĩa kiểu phức tạp
      • Đặt tên trực tiếp cho phần tử
      • Bằng cách sử dụng thuộc tính tên và kiểu của loại phức tạp
    • Thuộc tính minOccurs và maxOccurs
      • minOccurs
      • maxOccurs
    • Phần tử nội dung
    • Nội dung kết hợp/trộn lẫn (Mixed content)
    • Cấu trúc nhóm (Grouping Construct)
      • xs:all
      • xs:choice
      • xs:sequence
  • Làm việc với các kiểu đơn giản
    • Định nghĩa một phần tử kiểu đơn giản
    • Các kiểu dữ liệu được sử dụng với các kiểu đơn giản
    • Kiểu đơn giản dựng sẵn
    • Các kiểu đơn giản do người dùng định nghĩa
    • Sự hạn chế/chặt chẽ (Restriction)
    • Khía cạnh (facets)
  • Attributes – thuộc tính
    • Default
    • Fixed
    • Optional
    • Prohibited
    • Required

Khái niệm và vai trò XML Schema

So sánh và phân biệt các tính năng của DTD và Schema

DTD xác định cấu trúc tài liệu và xác thực tài liệu XML, nhưng có một số hạn chế. Do đó, một khái niệm thay thế dựa trên XML cho các DTD, được gọi là XML Schema đã được giới thiệu, với mục tiêu khắc phục các nhược điểm của DTD.

Từ khóa lược đồ (schema) là một từ có nguồn gốc từ một từ Hy Lạp tượng trưng cho hình thức hoặc hình dạng. Ý nghĩa từ điển của lược đồ là: “Một biểu diễn sơ đồ; một phác thảo hoặc một mô hình”. Ban đầu, từ lược đồ chỉ nằm khái niệm của các các nhà triết học cho đến khi nó đi vào lĩnh vực khoa học máy tính. Trong ngữ cảnh của phần mềm, một lược đồ thường được hiểu là một mô hình được sử dụng để mô tả cấu trúc của cơ sở dữ liệu. Nó định nghĩa các cấu trúc bên trong như bảng, trường và mối quan hệ giữa chúng.

Tuy nhiên, trong ngữ cảnh của XML, như định nghĩa của WSC, một lược đồ là “một tập hợp các quy tắc để ràng buộc cấu trúc và trình bày rõ tập thông tin của các tài liệu XML”. Một lược đồ mô tả một mô hình cho toàn bộ một lớp tài liệu. Mô hình mô tả cách thức dữ liệu được đánh dấu và cũng chỉ định cách sắp xếp có thể có của các thẻ và văn bản trong một tài liệu hợp lệ. Một lược đồ(schema) có thể được coi là một từ vựng chung cần thiết để trao đổi tài liệu giữa các tổ chức khác nhau.

XML schema xác định các khối xây dựng hợp lệ của tài liệu XML. Có thể coi đây là kho từ vựng chung mà các tổ chức khác nhau có thể chia sẻ để trao đổi tài liệu. Ngôn ngữ XML schema được gọi là Định nghĩa Lược đồ XML (XML Schema Definition XSD).

Ví dụ chúng ta cần xác thực cấu trúc XML sau:

<Book>
<Title>Path To Paradise</Title>
<Author>David Uhite</Author>
<Theme>Philosophy</Theme>
<Publisher>ABC Publication</Publisher>
<ISBN>11</ISBN>
<Price>$12481</Price>
<Edition>dune 2000</Edition>
</Book>

Khai báo một phần tử Book, yêu cầu thành phần của nó là Title, Author, Theme, Publisher, ISBN, Price và Edition. Title, Author, Theme, Publisher sẽ lấy các giá trị chữ và số trong khi Price và ISBN sẽ lấy các giá trị số

Lập luận logic sẽ so sánh các thuộc tính của đối tượng ‘SÁCH’ này, với các thuộc tính của một cuốn sách nói chung. Nói cách khác, kiến thức trước đây của một người về cuốn sách là gì và các thuộc tính của nó, có thể là một loại lược đồ, dựa vào đó đối tượng ‘SÁCH’ được so sánh. Điều này sẽ giúp xác thực các thuộc tính của cuốn sách.

Định nghĩa XML Schema

Mục tiêu của XML Schema là xác định cấu trúc hợp lệ của tài liệu XML, tương tự như DTD.

XML Schema định nghĩa:

  • Các thành phần và thuộc tính có thể xuất hiện trong tài liệu
  • Phần tử nào là phần tử con
  • Thứ tự và số phần tử con
  • Liệu một phần tử trống hay có thể bao gồm văn bản
  • Kiểu dữ liệu cho các phần tử và thuộc tính
  • Giá trị mặc định và cố định cho các thành phần và thuộc tính

Các Schema khắc phục những hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn mà không cần dựa vào các công cụ xác thực đặc biệt.

Một số tính năng cơ bản mà XML Schema cung cấp là:

  • Cú pháp XML được sử dụng làm cơ sở để tạo các tài liệuXML Scema. Nó không yêu cầu học một ngôn ngữ mới như trường hợp của DTD.
  • Các XML Schema có thể được thao tác giống như bất kỳ tài liệu XML nào khác.

Viết XML Schema

Xét đoạn mã

XML file message.xml

<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="message.xsd">123</Message>

XSD file message.xsd

<?xml version= "1.0">
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name= "MESSAGE" type="xsd:string"/>
</xsd:schema>

Tệp XSD đã cho là một schema cho các phần tử . Tệp được lưu dưới dạng tin nhắn xsd. Nó là một tài liệu XML; do đó nó có một khai báo XML. Tệp schema này cũng có thể khai báo các phần tử khác, kể cả những phần tử không có trong tệp XML này, nhưng ít nhất nó phải khai báo phần tử <Message>

XML File

Tài liệu XML đã cho chứa một phần tử duy nhất, <Message>, schema cho tài liệu này phải khai báo phần tử <Message>

XSD File

Để lưu trữ tài liệu schema , tệp được lưu với phần mở rộng là “.xsd”. Các tài liệu schema là các tài liệu XML và có thể có các khai báo DTD, DOCTYPE.

Các tính năng của schema

Các XML schema cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn bằng cách sử dụng một loạt các tính năng mới. Chúng là:

Schema hỗ trợ các loại dữ liệu

Việc hỗ trợ XML schema cho các kiểu dữ liệu và khả năng tạo các kiểu dữ liệu cần thiết đã khắc phục được các nhược điểm của DTD. Điều đó có nghĩa là dễ dàng xác định và xác thực nội dung tài liệu và định dạng dữ liệu hợp lệ. Nhà phát triển có thể thấy việc làm việc với dữ liệu từ cơ sở dữ liệu là đơn giản. Cũng có thể dễ dàng thực hiện các hạn chế về dữ liệu.

Các Schema có thể linh hoạt và hiệu quả

Các schema có thể mang theo được và hiệu quả vì chúng sử dụng cùng một cú pháp XML. Do đó, không cần phải học bất kỳ ngôn ngữ mới nào hoặc bất kỳ trình soạn thảo nào để chỉnh sửa các tệp schema. Một trình phân tích cú pháp XML tương tự có thể được sử dụng để phân tích cú pháp các tệp schema.

Schema đảm bảo giao tiếp dữ liệu an toàn

Trong quá trình truyền dữ liệu, điều cần thiết là cả người gửi và người nhận phải có cùng một “từ vựng”. Với XML schema , người gửi có thể chỉ định dữ liệu theo cách mà người nhận sẽ hiểu.

Các schema có thể mở rộng

Một định nghĩa schema có thể được mở rộng; do đó, có thể sử dụng lại một schema hiện có để tạo một schema khác. Nhà phát triển có thể tạo các kiểu dữ liệu của riêng mình bắt nguồn từ các kiểu tiêu chuẩn. Các schema cũng hỗ trợ tham chiếu nhiều schema trong cùng một tài liệu.

Schema bắt lỗi cấp cao hơn

XML kiểm tra tính hợp lệ của tài liệu XML để xác thực cú pháp cơ bản. Một tài liệu được cho là đúng định dạng nếu có khai báo XML, phần tử gốc duy nhất, thẻ bắt đầu và thẻ kết thúc phù hợp, các phần tử được lồng đúng cách, v.v. Một tài liệu được định dạng tốt vẫn có thể có lỗi. Các XML schema có thể phát hiện các lỗi cấp cao hơn phát sinh, chẳng hạn như trường thông tin bắt buộc bị thiếu hoặc sai định dạng hoặc tên phần tử bị viết sai chính tả.

Schema hỗ trợ namespace

Hỗ trợ XML namespace cho phép lập trình viên xác thực các tài liệu sử dụng đánh dấu từ nhiều namespace . Điều đó có nghĩa là các cấu trúc có thể được sử dụng lại từ các schema đã được xác định trong một namespace khác.

Các kiểu dữ liệu phong phú hơn

Bản nháp schema định nghĩa các kiểu dữ liệu boolean , date time, URI, time interval và cả các loại số như decimal, integer, byte, long, v.v.

Nguyên mẫu (Archetypes)

Một nguyên mẫu được sử dụng để xác định loại dữ liệu được đặt tên tùy chỉnh từ các loại dữ liệu có sẵn. Ví dụ: loại dữ liệu ‘ContactList’ được xác định, sau đó hai phần tử, ‘FriendsList’ và ‘OfficialList’ được xác định theo loại đó.

Nhóm thuộc tính (Attribute grouping)

Có thể có các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. Nhóm thuộc tính cho phép tác giả schema làm rõ ràng mối quan hệ này giữa các phần tử. Thực thể tham số hỗ trợ nhóm trong DTD, giúp đơn giản hóa quy trình tạo DTD, nhưng thông tin không được chuyển đến bộ xử lý.

Nguyên mẫu có thể tinh chỉnh (Refinable Archetypes)

DTD tuân theo loại mô hình nội dung ‘đóng’. Mô hình nội dung được định nghĩa là ràng buộc về nội dung của các phần tử trong một tài liệu XML mẫu. Mô hình nội dung ‘đóng’ mô tả tất cả và chỉ những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. Lược đồ XML cho phép thêm hai khả năng:

  • Mô hình nội dung kiểu mở
  • Mô hình nội dung có thể tinh chỉnh

Trong mô hình nội dung ‘mở’, các yếu tố khác với các yếu tố bắt buộc cũng có thể xuất hiện. Mô hình nội dung mở cho phép bao gồm các phần tử con và các thuộc tính bên trong một phần tử không được khai báo trong schema của tài liệu. DTD chỉ hỗ trợ các mô hình nội dung đóng, yêu cầu khai báo tất cả các thành phần và thuộc tính để sử dụng chúng trong tài liệu. Các phần tử bổ sung có thể có mặt trong mô hình nội dung ‘có thể tinh chỉnh’, nhưng schema phải xác định các phần tử bổ sung đó.

So sánh DTD với các schema

XML kế thừa khái niệm về DTD từ Ngôn ngữ đánh dấu tổng quát hóa tiêu chuẩn (SGML), đây là tiêu chuẩn quốc tế cho các ngôn ngữ đánh dấu. DTD được sử dụng để xác định mô hình nội dung, lồng các phần tử theo thứ tự hợp lệ và cung cấp hỗ trợ hạn chế cho các loại dữ liệu và thuộc tính. Hạn chế của việc sử dụng DTD là:

DTD được viết bằng cú pháp không phải XML

Các DTD không sử dụng ký hiệu XML và do đó chúng rất khó viết và sử dụng.

DTD không thể mở rộng

DTD không thể mở rộng. Ví dụ: nếu có một Địa chỉ DTD cho danh mục bạn bè và một người muốn thêm một phần mới vào mã cho các liên hệ chính thức, thì toàn bộ DTD phải được viết lại.

DTD không hỗ trợ namespace

Namespace có thể được sử dụng để đưa một loại phần tử vào tài liệu XML. Tuy nhiên, một namespace không thể được sử dụng để chỉ một phần tử hoặc một khai báo thực thể trong DTD. Nếu một namespace được sử dụng, thì DTD phải được sửa đổi để bao gồm bất kỳ phần tử nào được lấy từ namespace.

DTD cung cấp kiểu dữ liệu hạn chế

DTD chỉ có thể thể hiện kiểu dữ liệu của các thuộc tính dưới dạng liệt kê rõ ràng và một vài định dạng chuỗi thô. DTD không có cơ sở để mô tả số, ngày tháng, giá trị tiền tệ, v.v. Hơn nữa, các DTD không có khả năng thể hiện kiểu dữ liệu của dữ liệu ký tự trong các phần tử. Ví dụ, một phần tử có thể được định nghĩa để chứa CDATA. Tuy nhiên, phần tử không thể bị ràng buộc chỉ bằng chữ số khi nó sử dụng DTD.

Đoạn mã sau minh họa một tài liệu XML tên là “Book.xml”

<?xml version="1.0" encoding="UTF-8" ?>
<!-- declare dtd file -->
<Book>
    <Title>Java</Title>
    <Author>James Gosling</Author>
    <Publisher>Oracle</Publisher>
    <Price>100</Price>
</Book>
DTD cho “book.xml”

DTD có tên “Book.dtd” xác định các thành phần của tài liệu “Book.xml”

<!ELEMENT Book (Title, Author, Publisher, Price)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
<!ELEMENT Price (#PCDATA)>

Khi đó, trên file Book.xml, chúng ta cần bổ sung đoạn mã để tham chiếu:

<!DOCTYPE Book SYSTEM "book.dtd">
XML Schema cho “Book.xml”

Tệp XML schema tương ứng có tên là “Book.xsd” xác định các thành phần của tài liệu XML Book.xml

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="https://hocvietcode.com" elementFormDefault="qualified">
    <xs:element name="Book">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Title" type="xs:string"/>
                <xs:element name="Author" type="xs:string"/>
                <xs:element name="Publisher" type="xs:string"/>
                <xs:element name="Price" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Phần tử Book là một kiểu phức tạp (complex) vì nó bao gồm các phần tử khác. Các phần tử con Tite, Author, Chapter là các kiểu đơn giản vì chúng không chứa các phần tử khác.

Khi đó, chúng ta sửa đổi nội dung của file Book.xml thành như sau để tham chiếu tới schema:

<?xml version="1.0" encoding="UTF-8" ?>
<Book xmlns="https://hocvietcode.com" xmlns:xsi="http://.www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://hocvietcode.com Book.xsd">
    <Title>Java</Title>
    <Author>James Gosling</Author>
    <Publisher>Oracle</Publisher>
    <Price>100</Price>
</Book>

Ưu điểm của XML Schema so với DTD

Schema khắc phục những hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML mạnh mẽ hơn mà không cần dựa vào các công cụ xác thực đặc biệt.

XML Schema cung cấp một loạt các tính năng mới:

Các kiểu dữ liệu phong phú hơn

Bản nháp schema xác định các giá trị boolean, number, date time, URI, integer, decimal, float và cả time interval.

Archtypes (nguyên mẫu)

Một nguyên mẫu cho phép xác định loại dữ liệu được đặt tên riêng từ các loại dữ liệu có sẵn. Ví dụ: người ta có thể xác định loại dữ liệu ‘ContactList’, sau đó xác định hai thành phần, “FriendList” và “OfficalList” trong kiểu đó.

Nhóm thuộc tính (Attribute grouping)

Có thể có các thuộc tính chung áp dụng cho tất cả các phần tử hoặc một số thuộc tính bao gồm các phần tử đồ họa hoặc bảng. Nhóm thuộc tính cho phép tác giả lược đồ làm rõ mối quan hệ này.

Các nguyên mẫu có thể tinh chỉnh

DTD tuân theo loại mô hình ‘đóng’. Nó mô tả tất cả và chỉ những phần tử và thuộc tính có thể xuất hiện trong nội dung của phần tử. XML Schema cho phép thêm hai khả năng: ‘mở’ và ‘có thể tinh chỉnh’. Trong mô hình nội dung ‘mở’, các yếu tố khác với các yếu tố bắt buộc cũng có thể xuất hiện. Các phần tử bổ sung có thể có mặt trong một mô hình nội dung có thể tinh chỉnh, nhưng schema phải xác định các phần tử bổ sung đó.

Ví dụ một file “mail.xsd”

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.com/mail"
    xmlns="http://www.example.com/mail"
    elementFormDefault="qualified">
    <xs:element name="mail">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="to" type="xs:string"/>
                <xs:element name="from" type="xs:string"/>
                <xs:element name="subject" type="xs:string"/>
                <xs:element name="body" type="xs:string"/>
                <xs:element name="date" type="xs:dateTime"></xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

File Mail.xml tương ứng:

<?xml version="1.0" encoding="UTF-8"?>
<mail
xmlns="http://www.example.com/mail"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/mail mail.xsd">
    <to>John Doe</to>
    <from>Jane Smith</from>
    <subject>XML Schema</subject>
    <body>XML Schema is a way to define the structure of an XML document.</body>
    <date>2004-10-01T14:32:00</date>
</mail>

Khám phá Schema

Các kiểu dữ liệu được Schema hỗ trợ

XML Schema mô tả một số kiểu dữ liệu dựng sẵn, có thể được sử dụng để chỉ định và xác thực kiểu dữ liệu dự định của nội dung. Nó cũng cho phép người dùng tạo kiểu dữ liệu do người dùng xác định bằng cách mở rộng kiểu dữ liệu tích hợp sẵn bằng cách sử dụng các khía cạnh. Do đó, đề xuất XML schema xác định hai loại kiểu dữ liệu, đó là:

  • Các kiểu dữ liệu tích hợp sẵn, có sẵn cho tất cả các tác giả XML Schema và phải được triển khai bởi bộ xử lý phù hợp.
  • Các kiểu dữ liệu có nguồn gốc từ người dùng, được xác định trong các thể hiện Schema riêng lẻ và dành riêng cho Schema đó (mặc dù có thể nhập các định nghĩa này vào các định nghĩa khác),

Trong XML Schema, các kiểu dữ liệu có thể được phân loại thành các kiểu có sẵn và kiểu dẫn xuất.

Các kiểu dữ liệu dựng sẵn được chỉ định bởi nhóm làm việc XML là:

string

Một nhóm các ký tự được gọi là một chuỗi. Kiểu dữ liệu string có thể chứa các ký tự, xuống dòng, cartiage và ký tự tab. Chuỗi cũng có thể bao gồm tổ hợp các ký tự Unicode. Unicode là một tiêu chuẩn chung để mô tả tất cả các ký tự có thể có của tất cả các ngôn ngữ với thư viện ký hiệu với một số duy nhất cho mỗi ký hiệu.

Cú pháp:

<xs:element name="element_name" type="xs:string"/>

boolean

Kiểu dữ liệu boolean được sử dụng để chỉ định một biểu diễn toán học. Các giá trị pháp lý cho kiểu dữ liệu boolean là true và false. True có thể được thay thế bằng giá trị số 1 và false có thể được thay thế bằng giá trị 0.

<xs:attribute name="attribute_name" type="xs:boolean"/>

numeric

Kiểu dữ liệu số đại diện cho một giá trị số. Nó bao gồm các số như số nguyên và số thực.

Cú pháp:

<xs:element name="element_name" type="xs:numeric" />

dateTime

Nó đại diện cho một thời gian cụ thể vào một ngày nhất định, được viết dưới dạng một chuỗi. Ví dụ: “2001-05-10T12:35:40” có thể được coi là chuỗi ngày giờ. Ngày được chỉ định ở dạng sau “yyyy-M-DDThh:mm:ss“

Cú pháp:

<xs:element name="update_at" type="xs:dateTime" />

binary

Kiểu nhị phân có thể bao gồm các tệp đồ họa, chương trình thực thi hoặc bất kỳ chuỗi dữ liệu nhị phân nào khác. Các kiểu dữ liệu nhị phân được sử dụng để thể hiện dữ liệu có định dạng nhị phân gồm hai loại, chẳng hạn như base64Binary (dữ liệu nhị phân được mã hóa Base64) và hexBinary (dữ liệu nhị phân được mã hóa theo hệ thập lục phân).

Cú pháp:

<xs:element name="image_name" type="xs:hexBinary" />

anyURI

Mã định danh tài nguyên chung (URI) đại diện cho tên tệp hoặc vị trí của tệp

Cú pháp:

<xs:element name="image_name" type="xs:anyURI" />

Các kiểu dữ liệu bổ sung

integer

Kiểu cơ sở cho số nguyên là kiểu dữ liệu số. Nó bao gồm cả số dương và số âm.

Cú pháp:

<xs:element name="element_name" type="xs:integer" />

decimal

Nó có thể đại diện cho các phần phân số chính xác. Kiểu cơ sở cho số thập phân là kiểu dữ liệu số. Kiểu dữ liệu thập phân được sử dụng để chỉ định một giá trị số.

Cú pháp:

<xs:element name="element_name" type="xs:decimal" />

time

:à kiểu dữ liệu thời gian. Biểu diễn mặc định là 16:35:26. Kiểu dữ liệu thời gian được sử dụng để chỉ định thời gian. Thời gian được chỉ định ở dạng sau “hh:mm:ss” trong đó, hh là giờ, mm là phút và ss là giây.

Cú pháp:

<xs:element name="element_name" type="xs:time" />

Schema Vocabulary (từ vựng lược đồ)

Tạo một lược đồ bằng cách sử dụng từ vựng lược đồ XML giống như tạo bất kỳ tài liệu XML nào khác bằng cách sử dụng một từ vựng chuyên biệt. Để hiểu từ vựng Lược đồ XML và các phần tử, ví dụ này thảo luận về một tài liệu XML sẽ được xác thực dựa trên một lược đồ.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetnamespace="https://hocvietcode.com" xmlns="https://hocvietcode.com" elementFormDefault="qualified">
    <xs:element name="Book">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Title" type="xs:string"/>
                <xs:element name="Author" type="xs:string"/>
                <xs:element name="Publisher" type="xs:string"/>
                <xs:element name="Price" type="xs:integer"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Xét đoạn mã highlight phía trên:

xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 

Mọi Lược đồ XML đều bắt đầu bằng phần tử gốc . Mã chỉ ra rằng các phần tử và kiểu dữ liệu được sử dụng trong lược đồ được lấy từ namespace “http://www.w3.org/2001/XMLSchema” và có tiền tố là xs.

targetNamespace="https://hocvietcode.com"

Nó xác định rằng các thành phần được xác định trong một tài liệu XML đề cập đến lược đồ này, đến từ namespace “https://hocvietcode.com”

xmlns="https://hocvietcode.com" 

Dòng mã này trỏ đến “https://hocvietcode.com” làm namespace mặc định.

elementFormDefault="qualified"

Nó chỉ ra rằng các phần tử được sử dụng bởi thực thể tài liệu XML đã được khai báo trong lược đồ này cần phải đủ điều kiện theo namespace.

Xét file XML mà schema này định nghĩa:

<?xml version="1.0" ?>
<Mail xmlns="https://hocvietcode.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://hocvietcode.com mail.xsd">
    <from>[email protected]</from>
    <to>[email protected]</to>
    <subject>Test</subject>
    <body>Test</body>
</Mail>

Giải thích cho khu vực highlight:

xmlns="https://hocvietcode.com" 

Nó chỉ ra khai báo namespace mặc định. Dấu phân cách này thông báo cho trình xác nhận lược đồ rằng tất cả các phần tử được sử dụng trong tài liệu XML này được khai báo trong namespace mặc định (“https://hocvietcode.com”).

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Đây là thực thể namespace có sẵn cho lược đồ XML.

xsi:schemaLocation="https://hocvietcode.com mail.xsd"

Thuộc tính schemaLocation này có hai giá trị. Giá trị đầu tiên xác định namespace. Giá trị thứ hai là vị trí của lược đồ XML nơi nó được lưu trữ.

Làm việc với kiểu dữ liệu phức tạp

Một lược đồ gán một kiểu cho từng thành phần và thuộc tính mà nó khai báo. Các phần tử có kiểu phức tạp có thể chứa các phần tử lồng nhau và có các thuộc tính. Chỉ các phần tử có thể chứa các kiểu phức tạp (complex). Các phần tử loại phức tạp có bốn biến thể:

Phần tử rỗng

Các phần tử trống có thể chỉ định các loại thuộc tính, nhưng không cho phép nội dung như trong ví dụ sau:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.com/vd"
    xmlns="http://www.example.com/vd"
    elementFormDefault="qualified">
    <xs:element name="Books">
        <xs:complexType>
            <xs:attribute name="bookCode" type="xs:positiveInteger">
            </xs:attribute>
        </xs:complexType>
    </xs:element>
</xs:schema>

XML tương ứng:

<?xml version="1.0" encoding="UTF-8"?>
<Books xmlns="http://www.example.com/vd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.com/vd vd.xsd"
    bookCode="1234567890"
></Books>

Chỉ chứa phần tử

Chỉ chứa văn bản

Các phần tử này chỉ có thể chứa văn bản và tùy chọn có thể có hoặc không có thuộc tính như trong ví dụ sau:

Trộn lẫn (mixed)

Đây là những phần tử có thể chứa nội dung văn bản cũng như các thành phần con bên trong phần tử như trong ví dụ sau. Chúng có thể có hoặc không có thuộc tính.

Định nghĩa kiểu phức tạp

Một yếu tố phức tạp có thể được xác định theo hai cách khác nhau. Các mã sau xác định các thuộc tính của phần tử phức tạp.

Đặt tên trực tiếp cho phần tử

Phần tử Student có thể được khai báo bằng cách đề cập trực tiếp đến nó trong lược đồ. Kiểu phức tạp(complex) đề cập rằng tài liệu XML chứa các phần tử XML lồng nhau. Phần tử trình tự(sequence) chỉ ra rằng các phần tử con FirstName, MiddleNane và LastName xuất hiện theo thứ tự như chúng được khai báo.

Bằng cách sử dụng thuộc tính tên và kiểu của loại phức tạp

Phần tử Student có thể có một loại chẳng hạn như PersonInfo đề cập đến tên của loại phức tạp. Một số phần tử có thể sử dụng lại kiểu phức tạp này bằng cách tham chiếu đến tên PersonInfo trong phần khai báo kiểu phức hợp của chúng.

Thuộc tính minOccurs và maxOccurs

Khi làm việc với các DTD, chúng ta đã sử dụng các dấu *,? và + để chỉ ra số lần một phần tử con cụ thể có thể được sử dụng làm nội dung cho một phần tử. Tương tự, lược đồ XML cho phép chỉ định số lần tối thiểu và tối đa mà một phần tử có thể xuất hiện .Trong các lược đồ, cả phần tử và thuộc tính đều sử dụng các thuộc tính sau:

minOccurs

minOccurs chỉ định số lần xuất hiện tối thiểu của phần tử trong tài liệu XML. Giá trị mặc định cho thuộc tính minoccurs là 1. Nếu một phần tử có giá trị minOccurs bằng 0, thì đó là tùy chọn. Một thuộc tính là tùy chọn, nếu minOccurs là 0. Nếu minOccurs được đặt thành 1, thì thuộc tính này là bắt buộc.

maxOccurs

maxOccurs chỉ định số lần xuất hiện tối đa của phần tử trong tài liệu XML. Giá trị mặc định cho thuộc tính maxoccurs là 1. Nếu giá trị của nó được giữ nguyên, điều đó có nghĩa là phần tử có thể xuất hiện không giới hạn số lần. Thuộc tính maxOccurs mặc định là 1 trừ khi nó được chỉ định.

Ví dụ này chỉ ra rằng phần tử Quantity có thể xảy ra tối thiểu là 0 lần và tối đa là 100 trăm lần trong phần tử Book.

Mối quan hệ giữa minOccurs và maxOccurs:

Phần tử nội dung

Một loại phức tạp có thể đề cập đến nội dung phần tử. Phần tử Nội dung chỉ có thể chứa các phần tử. Có thể có các trường hợp trong đó các phần tử được chứa cũng có thể có các phần tử con.

Ví dụ file book.xml

Ví dụ file book.xsd

Trong tài liệu XML, mỗi phần tử Author và Publisher đều chứa các phần tử Name. Vì vậy, không thể sử dụng các loại dữ liệu tích hợp sẵn như xs:string, thay vào đó, AuthorName và PublisherName có thể được xác định bằng cách sử dụng các phần tử xs:complexType cấp cao nhất.

Nội dung kết hợp/trộn lẫn (Mixed content)

Kiểu phức tạp (complex type) có thể chỉ định nội dung của nó là nội dung hỗn hợp(mixed content). Nội dung hỗn hợp có thể chứa văn bản trộn lẫn với các yếu tố. Thứ tự và số lượng phần tử xuất hiện trong nội dung hỗn hợp cũng có thể được chỉ định trong lược đồ, Loại nội dung này có thể có hoặc có thể có các thuộc tính.

Nội dung hỗn hợp được khai báo giống hệt như vậy, việc khai báo nội dung phần tử được thực hiện. Tiện ích bổ sung duy nhất cho khai báo là nó nhận một thuộc tính hỗn hợp được đặt thành giá trị thực.

Đoạn mã sau thể hiện các thuộc tính của nội dung hỗn hợp:

Book.xml

<Books>Apocalypse written  by <Author> Mary Jan </Author> is of Genre <Category> Fiction </Type></Books>

Book.xsd

Cấu trúc nhóm (Grouping Construct)

Ngôn ngữ lược đồ XML cung cấp ba cấu trúc nhóm xác định xem thứ tự của các phần tử riêng lẻ có quan trọng hay không và cách sắp xếp như thế nào:

xs:all

Cấu trúc nhóm này yêu cầu mỗi phần tử trong nhóm phải xuất hiện nhiều nhất một lần, nhưng Thứ tự đó không quan trọng. Lưu ý duy nhất là trong kiểu nhóm này, thuộc tính minoccurs có thể là 0 hoặc 1 và thuộc tính maxoccurs phải là 1, Đoạn mã sau thể hiện khái niệm này.

xs:choice

Phần tử lựa chọn là yếu tố đối lập với phần tử tất cả. Thay vì yêu cầu tất cả các yếu tố phải có mặt, nó sẽ chỉ cho phép một trong các lựa chọn xuất hiện. Phần tử lựa chọn cung cấp một biểu diễn XML để mô tả một lựa chọn từ một tập hợp các loại phần tử. Bản thân phần tử lựa chọn có thể có các thuộc tính minOccurs và maxOccurs thiết lập chính xác số lượng lựa chọn có thể được thực hiện từ lựa chọn đó. Đoạn mã sau thể hiện khái niệm này:

Trong đoạn mã, có ba phần tử con loại trừ lẫn nhau. Khi phần tử xs:choice bị loại bỏ, chỉ một phần tử trong số các lựa chọn có thể là phần tử con của phần tử cha AddressInfo.

xs:sequence

Phần tử xs:sequence chỉ định từng phần tử của chuỗi xuất hiện theo cùng một thứ tự trong tài liệu cá thể như được đề cập trong phần tử xs:sequence. Số lần mỗi phần tử được phép xuất hiện có thể được kiểm soát bởi thuộc tính minoccurs và maxOccurs của phần tử. Mã sau thể hiện khái niệm này.

Làm việc với các kiểu đơn giản

Định nghĩa một phần tử kiểu đơn giản

Kiểu đơn giản là một phần tử hoặc thuộc tính XML, chỉ chứa văn bản và không có phần tử hoặc thuộc tính nào khác. Các khai báo kiểu đơn giản được sử dụng để tạo thành dữ liệu văn bản và chỉ định loại dữ liệu được phép trong các thuộc tính và thành phần.

Cú pháp:

<xs:element name="XXXX" type="YYYY" />

Trong cú pháp này, “XXXX” là tên của phần tử, “YYYY” là kiểu dữ liệu của phần tử.

Đoạn mã sau chứng minh rằng phần tử TotalNoOfPages có thể được chỉ định là một loại số nguyên và là một số nguyên dương có ba chữ số.

book.xml

book.xsd

Các kiểu dữ liệu được sử dụng với các kiểu đơn giản

Các phần tử của kiểu đơn giản có xu hướng mô tả nội dung và kiểu dữ liệu của tài liệu, hơn là cấu trúc của nó:

Trong Lược đồ XML, người ta có thể đề cập đến loại dữ liệu mà một phần tử có thể chứa bằng cách gán cho nó một định nghĩa kiểu đơn giản cụ thể. Vì vậy, dựa trên loại dữ liệu mà nó hỗ trợ, lược đồ XML chia các phần tử của các kiểu đơn giản thành hai loại lớn:

  • Kiểu đơn giản dựng sẵn
  • Kiểu đơn giản do người dùng định nghĩa

Kiểu đơn giản dựng sẵn

Có một số kiểu đơn giản dựng sẵn, chẳng hạn như số nguyên, ngày tháng, dấu chấm động và chuỗi mà người ta có thể sử dụng mà không cần sửa đổi thêm.

Một phần tử đơn giản được xây dựng sẵn có thể chứa một giá trị mặc định hoặc một giá trị cố định. Giá trị ‘mặc định’ là giá trị được gán tự động cho phần tử khi không có giá trị nào khác được chỉ định. Một giá trị cố định được gán cho một phần tử, khi không cần thay đổi giá trị cho phần tử đó.

Cú pháp:

<xs:element name="XXXX" type="YYYY" default="zzzz"/>

Trong cú pháp này, “XXXX” là tên của phần tử, “YYYY” là kiểu dữ liệu của phần tử và “ZZZZ” là giá trị mặc định được chỉ định cho phần tử.

Ví dụ:

Các kiểu đơn giản do người dùng định nghĩa

Lược đồ XML hỗ trợ thư viện các kiểu dữ liệu dựng sẵn. Tuy nhiên, trong quá trình viết các tài liệu lược đồ phức tạp, nhà phát triển có thể cần một loại dữ liệu không được xác định trong đề xuất lược đồ. Ví dụ: hãy xem xét việc khai báo một phần tử . Nó thực hiện các hạn chế có sẵn cho nội dung của nó để chấp nhận các giá trị số không âm, nhưng nó vẫn chấp nhận các giá trị không mong muốn, chẳng hạn như:

<Angleteasure>490</AngleMeasure>

Theo khai báo lược đồ, “490” là một giá trị số dương hợp lệ, nhưng nó vẫn cần loại số cho phép các giá trị có phạm vi từ 0 đến 360 (vì dữ liệu biểu diễn góc độ). Do đó, có thể tạo loại dữ liệu tùy chỉnh do người dùng xác định bằng cách sử dụng định nghĩa.

Các mã sau thể hiện các thuộc tính của các kiểu đơn giản do người dùng định nghĩa:

  • Đoã mã tạo ra một loại dữ liệu mới gọi là “angleMeasure’
  • Các phần tử kiểu này có thể chứa các giá trị nguyên.
  • Giá trị của “angleMeasure” phải nằm trong phạm vi từ “0” đến “360”.
  • Điều này tạo ra một loại dữ liệu mới được gọi là “triangle”.
  • Các phần tử kiểu này có thể chứa các phần tử kiểu triangle.
  • Các phần tử của loại này có thể có giá trị isosceles, right-angled, equilateral

Sự hạn chế/chặt chẽ (Restriction)

Việc khai báo một kiểu dữ liệu đặt ra những hạn chế nhất định đối với nội dung của một phần tử hoặc thuộc tính XML. Nếu một phần tử XML thuộc loại “xs:integer” và chứa một chuỗi chẳng hạn như “Chào mừng”, thì phần tử đó sẽ không được xác thực. Những hạn chế này được gọi là các hạn chế/chặt chẽ, xác định các giá trị được phép cho các phần tử và thuộc tính XML.

Các hạn chế có thể được chỉ định cho các phần tử SimpleType và các loại hạn chế được khai báo bằng cách sử dụng khai báo . Về cơ bản, khai báo được sử dụng để khai báo một SimpleType dẫn xuất, là một tập hợp con của SimpleType cơ sở của nó. Giá trị của thuộc tính cơ sở có thể là bất kỳ kiểu dữ liệu SimpleType hoặc XML Schema dựng sẵn nào hiện có.

Cú pháp:

<restriction base="name of the simpleType you are deriving from">

Trong khai báo này, kiểu dữ liệu cơ sở có thể được chỉ định bằng thuộc tính base. Đoạn mã sau minh họa một kiểu “Age” đơn giản được lấy bằng cách chỉ định cơ sở là kiểu số nguyên.

Khía cạnh (facets)

Với Lược đồ XML, các hạn chế tùy chỉnh có thể được chỉ định trên các phần tử và thuộc tính XML. Những hạn chế này được gọi là các khía cạnh.

Các khía cạnh được sử dụng để hạn chế tập hợp hoặc phạm vi giá trị mà một loại dữ liệu có thể chứa. Phạm vi giá trị được xác định bởi khía cạnh phải bằng hoặc hẹp hơn phạm vi giá trị của loại cơ sở.

Có 12 phần tử facet, được khai báo bằng một cú pháp chung. Chúng đều có một thuộc tính giá trị bắt buộc cho biết giá trị của khía cạnh. Một hạn chế có thể chứa nhiều khía cạnh. Mọi giá trị xuất hiện trong thực thể và không gian giá trị phải tuân theo tất cả các khía cạnh được liệt kê.

FacetDescription
minExclusiveChỉ định giá trị tối thiểu cho loại không bao gồm giá trị được cung cấp.
minInclusiveChỉ định giá trị tối thiểu cho loại bao gồm giá trị được cung cấp.
maxExclusiveChỉ định giá trị tối đa cho loại không bao gồm giá trị được cung cấp.
maxInclusiveChỉ định giá trị tối đa cho loại bao gồm giá trị được cung cấp.
TotalDigitsChỉ định tổng số chữ số trong một kiểu số.
fractionDigitsChỉ định số chữ số phân số trong một kiểu số.
lengthChỉ định số mục trong kiểu danh sách hoặc số ký tự trong kiểu chuỗi.
minLengthChỉ định số mục tối thiểu trong kiểu danh sách hoặc số ký tự tối thiểu trong kiểu chuỗi.
maxLengthChỉ định số mục tối đa trong kiểu danh sách hoặc số ký tự tối đa trong kiểu chuỗi.
enumeration (liệt kệ)Chỉ định một giá trị được phép trong khoảng trắng danh sách liệt kê Chỉ định cách xử lý khoảng trắng trong loại.
whiteSpaceChỉ định một giá trị được phép trong khoảng trắng danh sách liệt kê Chỉ định cách xử lý khoảng trắng trong loại.
patternHạn chế các loại chuỗi.

Cú pháp:

Ở đây, phép liệt kê facet được thêm vào hạn chế với thuộc tính giá trị là isosceles, right-angled, hoặc equilateral. Vì vậy, một phần tử được khai báo là kiểu tam giác phải là một chuỗi có giá trị isosceles, right-angled, hoặc equilateral,

Attributes – thuộc tính

Các phần tử XML có thể chứa các thuộc tính mô tả các phần tử. Trong các Lược đồ XML, các dấu phân cách thuộc tính tương tự như các khai báo phần tử. Để khai báo một thuộc tính, phần tử được sử dụng.

Một thuộc tính có thể được chỉ định là bắt buộc hay tùy chọn hoặc liệu nó có giá trị mặc định hay không. Giá trị mặc định được tự động gán cho thuộc tính khi không có giá trị nào khác được chỉ định.

Thuộc tính sử dụng xác định xem thuộc tính là bắt buộc hay tùy chọn. Dưới đây là các giá trị khác nhau có thể được gán cho các thuộc tính:

Default

Giá trị mặc định được tự động gán cho thuộc tính khi không có giá trị nào khác được chỉ định. Ví dụ:

<xs:attribute name="genre" type="xs:string" default="fiction"/>

Trong mã này, giá trị mặc định của thuộc tính genre là fiction.

Fixed

Giá trị này làm cho thuộc tính cố định. Một giá trị cố định được gán tự động cho thuộc tính và không thể chỉ định một giá trị khác. Ví dụ:

<xs:attribute name="genre" type="xs:string" fixed="fiction"/>

Trong mã này, giá trị fixed “fiction” được gán cho thuộc tính genre do đó không thể chỉ định giá trị khác cho thuộc tính.

Optional

Giá trị này làm cho thuộc tính trở thành tùy chọn, có nghĩa là thuộc tính có thể có bất kỳ giá trị nào. Giá trị mặc định cho bất kỳ thuộc tính nào là tùy chọn.

<xs:attribute name="genre" type="xs:string" use="optional"/>

Trong mã này, thuộc tính thể loại có thể nhận bất kỳ giá trị chuỗi nào.

Prohibited

Giá trị này có nghĩa là thuộc tính không thể được sử dụng. Ví dụ:

<xs:attribute name="genre" type="xs:string" use="prohibited" />

Required

Giá trị này làm cho thuộc tính bắt buộc. Thuộc tính có thể có bất kỳ giá trị nào. Ví dụ:

<xs:attribute name="genre" type="xs:string" use="required" />

Trong dòng mã này, thuộc tính genre phải được sử dụng trong phần khai báo phần tử XML

Cú pháp:

<xs:attribute name="Attribute_name" type="Attribute_datatype" />

Trong đó:

  • Attribute_name là tên của thuộc tính.
  • Attribute_datatype xác định kiểu dữ liệu của thuộc tính. Có rất nhiều kiểu dữ liệu dựng sẵn trong lược đồ XML chẳng hạn như chuỗi, số thập phân, số nguyên, boolean, ngày tháng và thời gian.

Trong ví dụ sau, các phần tử xs:attribute xuất hiện sau xs:sequence và xe:group tạo thành phần thân của phần tử. Tên phần tử có thể có một thuộc tính tùy chọn có tên age với kiểu lnteger dương.

Bài tập

Bài 1:

Tạo một tài liệu XML đơn giản để mô tả thông tin cá nhân của bạn, bao gồm tên (sttring), tuổi (integer), địa chỉ (string), và số điện thoại (string). Sau đó, viết một XSD để định nghĩa cấu trúc và kiểu dữ liệu của tài liệu này.

Bài 2:

Xây dựng một tài liệu XML cho danh sách các sản phẩm trong một cửa hàng trực tuyến. Sử dụng XSD để định nghĩa cấu trúc dữ liệu cho danh sách sản phẩm, mỗi sản phẩm bao gồm tên sản phẩm (string), giá (float), và mô tả(string). Mỗi sản phẩm có thuộc tính type, (giá trị type có thể là simple, variable)

Bài 3:

Tạo một tài liệu XML để biểu diễn thông tin về đơn đặt hàng trong một cửa hàng trực tuyến, bao gồm danh sách sản phẩm (bán 1 hoặc nhiều sản phẩm), số lượng cho từng sản phẩm, và địa chỉ giao hàng. Đảm bảo sử dụng XSD để xác định cấu trúc dữ liệu của tài liệu.

 

Phần 2:


Bài tập 1: Tạo một XSD cơ bản

Tạo một file XSD để định nghĩa cấu trúc của file XML sau:

<book>
    <title>Learn XML</title>
    <author>John Doe</author>
    <price>29.99</price>
</book>

Yêu cầu:

  • title và author là các phần tử bắt buộc.
  • price là một số thực và không được âm.

Bài tập 2: XSD với các phần tử lồng nhau

Tạo một file XSD để định nghĩa cấu trúc của file XML sau:

<library>
    <book>
        <title>Learn XML</title>
        <author>John Doe</author>
        <price>29.99</price>
    </book>
    <book>
        <title>Mastering XSD</title>
        <author>Jane Smith</author>
        <price>39.99</price>
    </book>
</library>

Yêu cầu:

  • library chứa một hoặc nhiều book.
  • price là số thực lớn hơn 0.
  • title và author là chuỗi, không được trống.

Bài tập 3: Sử dụng kiểu dữ liệu phức tạp

Tạo một file XSD để định nghĩa cấu trúc của file XML sau:

<company>
    <employee>
        <id>1</id>
        <name>John Doe</name>
        <position>Developer</position>
        <salary>5000</salary>
    </employee>
    <employee>
        <id>2</id>
        <name>Jane Smith</name>
        <position>Manager</position>
        <salary>7000</salary>
    </employee>
</company>

Yêu cầu:

  • employee là một kiểu dữ liệu phức tạp.
  • id là một số nguyên dương, không trùng lặp.
  • name, position là chuỗi không được trống.
  • salary là số lớn hơn 0.

Bài tập 4: XSD với thuộc tính

Tạo một file XSD để định nghĩa cấu trúc của file XML sau:

<product id="101">
    <name>Smartphone</name>
    <price currency="USD">599.99</price>
</product>

Yêu cầu:

  • Thuộc tính id là số nguyên dương, bắt buộc.
  • name là chuỗi không được trống.
  • Thuộc tính currency của price phải là một trong các giá trị: USD, EUR, hoặc VND.
  • price là số thực lớn hơn 0.

Bài tập 5: Sử dụng enumeration

Tạo một file XSD để định nghĩa cấu trúc của file XML sau:

<student>
    <name>Nguyen Van A</name>
    <grade>A</grade>
</student>

Yêu cầu:

  • name là chuỗi không được trống.
  • grade chỉ nhận một trong các giá trị: A, B, C, D, hoặc F.

Bài tập 6: Sử dụng namespace

Tạo một file XSD để định nghĩa cấu trúc của file XML sau:

<school xmlns="http://www.example.com/school">
    <class>
        <name>Class 1</name>
        <student>
            <name>Nguyen Van A</name>
            <age>15</age>
        </student>
        <student>
            <name>Le Thi B</name>
            <age>16</age>
        </student>
    </class>
</school>

Yêu cầu:

  • Định nghĩa namespace http://www.example.com/school.
  • class chứa một hoặc nhiều student.
  • name là chuỗi, age là số nguyên từ 6 đến 18.

Bài viết liên quan:

XPath trong XML
XSL và XSLT
Style Sheet – định kiểu trong XML
Document Type Definition – Định nghĩa kiểu tài liệu
XML Namespaces
Giới thiệu về XML

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

KHÁI NIỆM QUẢN LÝ DỰ ÁN CÔNG NGHỆ THÔNG TIN (IT PROJECT MANAGEMENT)

Cấu trúc lập trình và Mảng

Bắt đầu với C#

1. GIỚI THIỆU KHÁI NIỆM CHUẨN MỰC – ĐẠO ĐỨC VÀ VẤN ĐỀ NGHỀ NGHIỆP TRONG CNTT

2. ÁP DỤNG CÁC CHUẨN MỰC VÀ VẤN ĐỀ NGHỀ NGHIỆP TRONG CNTT

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×