XML: Bài 4.4. Làm việc với kiểu đơn giản

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Trong bài học cuối cùng này, Làm việc với kiểu đơn giản, bạn sẽ học cách:

  • Mô tả kiểu đơn giản.
  • Liệt kê và mô tả các kiểu dữ liệu được sử dụng với kiểu đơn giản.
  • Giải thích các hạn chế và khía cạnh.
  • Xác định việc sử dụng các thuộc tính.

4.4.1. Định nghĩa 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 trong đó chỉ chứa văn bản và không chứa các phần tử hoặc thuộc tính khác.

Các khai báo kiểu đơn giản được sử dụng để tạo dữ liệu dạng văn bản và chỉ định kiểu dữ liệu được phép trong các thuộc tính và phần tử.

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 đây thể hiện rằng phần tử TotalNoOfPages có thể được chỉ định là một kiểu số nguyên, cụ thể là một số nguyên dương có ba chữ số.

Book.xml: Các phần tử XML

<Book_name>The Da vinci code</Book_name>
<TotalNoOfPages>360</TotalNoOfPages>
<Author_name>Dan Brown</Author_name>
Book.xsd: Định nghĩa phần tử đơn giản tương ứng
<xs:element name="Book_name"
            type="xs:string"/>
<xs:element name="TotalNoOfPages"
            type="xs:integer"/>
<xs:element name="Author_name"
            type="xs:string"/>

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

Các phần tử thuộc 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 kiểu 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 kiểu 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 có sẵn
  • kiểu đơn giản do người dùng định nghĩa

4.4.3. Kiểu đơn giản có sẵn

Có một số kiểu đơn giản được tích hợp sẵn, chẳng hạn như số nguyên, ngày tháng, số thực 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 tích hợp 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. 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ử đó. Hình 4.7 mô tả các kiểu đơn giản có sẵn.

Các kiểu đơn giản có sẵn

Hình 4.7: Các kiểu đơn giản cài sẵn

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ử.

Đoạn mã sau minh họa việc khai báo kiểu đơn giản có sẵn.

Đoạn mã: kiểu đơn giản tích hợp sẵnkhai báo phần tử

<xs:element name="AccountType"
            type="xs:string"
            fixed="Savings"/>
<xs:element name="BalanceAmount"
            type="xs:integer"
            default="5000"/>

Đoạn mã hiển thị khai báo các kiểu đơn giản được tích hợp sẵn "AccountType" và "BalanceAmount". Giá trị cố định cho "AccountType" là "Savings" và giá trị mặc định cho "BalanceAmount" là "5000".

4.4.4. Kiểu đơn giản do người dùng tạo

  XML-schema hỗ trợ một thư viện các kiểu dữ liệu tích hợp sẵn. Tuy nhiên, trong quá trình viết các tài liệu lược đồ phức tạp, một nhà phát triển có thể cần một loại dữ liệu không được xác định trong lược đồ đã đề xuất. Ví dụ: hãy xem xét khai báo của một phần tử <AngleMeasure>. Nó thực hiện các hạn chế có sẵn đối với 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 như:
<AngleMeasure>490</AngleMeasure>

Theo khai báo trên, "490" là một giá trị số không âm hợp lệ, nhưng nó vẫn cần kiểu số cho phép các giá trị có phạm vi từ 0 đến 360. Do đó, có thể tạo kiểu dữ liệu do người dùng tùy chỉnh xác định bằng cách sử dụng định nghĩa <simpleType>.

Cú pháp:

<xs:simpleType name="name of the simpleType">
  <xs:restriction base="built-in data type">
    <xs:constraint="set constraint to limit the content"/>
  </xs:restriction>
</xs:simpleType>

Đoạn mã sau đây chứng minh các thuộc tính của các kiểu đơn giản do người dùng định nghĩa.

<xs:simpleType name="AngleMeasure">
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="360"/>
  </xs:restriction>
</xs:simpleType>
Trong đoạn mã trên, một kiểu dữ liệu mới được tạo gọi là "AngleMeasure", các phần tử thuộc 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".

Ví dụ tiếp theo:

<xs:simpleType name="triangle">
  <xs:restriction base="xsd:string">
    <xs:enumeration value="isosceles"/>
    <xs:enumeration value="right-angled"/>
    <xs:enumeration value="equilateral"/>
  </xs:restriction>
</xs:simpleType>

Trong ví dụ trên, một kiểu dữ liệu mới được gọi là "triangle", các phần tử có kiểu này có thể chứa các phần tử có kiểu triangle, các phần tử thuộc kiểu này có thể có giá trị "isosceles" hoặc "right-angled" hoặc "equilateral".

4.4.5. Các hạn chế

Khai báo 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 như "Welcome", phần tử sẽ không được xác thực. Các giới hạn này được gọi là các hạn chế, định nghĩa 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 <restriction>. Về cơ bản, khai báo <restriction> được sử dụng để khai báo một simpleType dẫn xuất, là một tậ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ỳ loại dữ liệu simpleType hiện có nào hoặc kiểu dữ liệu Lược đồ XML có sẵn.

Cú pháp:

<restriction base="tên ca simpleType mà bn đang ly">

Trong khai báo <restriction> này, kiểu dữ liệu cơ sở có thể được chỉ định bằng cách sử dụng thuộc tính base. Đoạn mã sau đây thể hiện một kiểu đơn giản là "Age" được bắt nguồn bằng cách chỉ định cơ sở là kiểu số nguyên.

<xs:simpleType name="Age">
  <xs:restriction base="xs:integer">
    ...
    ...
  </xs:restriction>
</xs:simpleType>

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 facet.

Các facet được sử dụng để hạn chế tập hợp hoặc phạm vi giá trị mà một kiểu dữ liệu có thể chứa. Phạm vi giá trị được xác định bởi facet phải bằng hoặc nhỏ hơn phạm vi giá trị của kiểu 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. Bất kỳ giá trị nào xuất hiện trong thể hiện và không gian giá trị phải tuân theo tất cả các facet được liệt kê.

Bảng 4.2 mô tả các ràng buộc facet.

facet

Mô tả

minExclusive

Chỉ định giá trị tối thiểu cho kiểu loại trừ giá trị được cung cấp.

minInclusive

Chỉ định giá trị nhỏ nhất cho kiểu bao gồm giá trị được cung cấp.

maxExclusive

Chỉ định giá trị lớn nhất cho kiểu loại trừ giá trị được cung cấp.

maxInclusive

Chỉ định giá trị lớn nhất cho kiểu bao gồm giá trị được cung cấp.

TotalDigits

Chỉ định tổng số chữ số trong một kiểu số.

fractionDigits

Chỉ định số chữ số phân số trong kiểu số.

length

Chỉ định số lượng mục trong kiểu danh sách hoặc số ký tự trong kiểu chuỗi.

minLength

Chỉ định số mục tối thiểu trong một loại danh sách hoặc số ký tự tối thiểu trong một loại chuỗi.

maxLength

Chỉ định số mục tối đa trong một loại danh sách hoặc số ký tự tối đa trong một loại chuỗi.

enumeration

Chỉ định một giá trị cho phép trong một danh sách được liệt kê.

whiteSpace

Chỉ định cách xử lý khoảng trắng trong kiểu.

pattern

Hạn chế các loại chuỗi.

Cú pháp:

<xs:simpleType name="name">
  <xs:restriction base="xs:source">
    <xs:facet value="value"/>
    <xs:facet value="value"/>
    …
  </xs:restriction>
</xs:simpleType>

Đoạn mã sau đây chứng minh rằng thuộc tính giá trị cung cấp giá trị của facet đó.

Ví dụ:

<xs:simpleType name="triangle">
  <xs:restriction base="xs:string">
    <xs:enumeration value="isosceles"/>
    <xs:enumeration value="right-angled"/>
    <xs:enumeration value="equilateral"/>
  </xs:restriction>
</xs:simpleType>

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

4.4.7. Các 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, khai báo thuộc tính tương tự như khai báo phần tử. Để khai báo một thuộc tính, phần tử <xs:attribute> được sử dụng.

Một thuộc tính có thể được chỉ ra liệu nó là bắt buộc hay tùy chọn hoặc 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 use chỉ định liệu 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ị default đượ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 ví dụ trên, giá trị của thuộc tính default của attribute genre là fiction.

Ø fixed

Giá trị này làm cho thuộc tính cố định. Một giá trị cố định được tự động gán 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 ví dụ trên, giá trị fiction của thuộc tính fixed được gán cho thuộc tính genre, vì vậy không thể chỉ định một giá trị khác cho nó.

Ø 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ỳ attribute nào cũng là tùy chọn. Ví dụ,

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

Ở ví dụ trên, attribute genre 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"/>

Trong ví dụ trên thì thể hiện phần tử sẽ không có attribute genre.

Ø required

Giá trị này làm cho thuộc tính trở thà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"/>

Ở ví dụ trên thì attribute genre phải được sử dụng trong khai báo phần tử XML.

Hình 4.8 mô tả khai báo thuộc tính.

Khai báo thuộc tính

Hình 4.8: Các thuộc tính

Cú pháp :

Cú pháp để xác định một thuộc tính là:

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

trong đó,

Attribute_name là tên của thuộc tính,

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

Đoạn mã sau minh họa các thuộc tính của attribute. Trong ví dụ này, các phần tử xs:attribute đứng sau xs:sequence và xs:group tạo nên phần thân của phần tử. Phần tử Name có thể có một attribute tùy chọn có tên là age với kiểu positiveInteger.

....
<xs:complexType name="SingerType">
  <xs:sequence>
    <xs:element name="Name">
      <xs:complexType>
        <xs:all>
          <xs:element name="FirstName"
                      type="xs:string"/>
          <xs:element name="LastName"
                      type="xs:string"/>
        </xs:all>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
  <xs:attribute name="age"
                type="xs:positiveInteger"
                use="optional/>
</xs:complexType>
....

Kiểm tra kiến thức bài 4.4

1. Câu nào sau đây về phần tử kiểu đơn giản là đúng và câu nào sai?

(A)

Một kiểu dữ liệu do người dùng xác định tùy chỉnh có thể được tạo bằng cách sử dụng định nghĩa <simpleType>.

(B)

Phần tử của kiểu đơn giản mô tả nội dung và kiểu dữ liệu của một phần tử.

(C)

Các phần tử của kiểu đơn giản tạo nên cấu trúc của một tài liệu XML.

(D)

Một phần tử đơn giản được tích hợp sẵn có thể chứa một giá trị mặc định hoặc một giá trị thuộc tính.

(E)

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.

2. Bạn có thể đối sánh các từ khóa khác nhau với mô tả tương ứng của chúng không?

Mô tả

Mục

(A)

Specifies the number of digits after decimal point

(1)

pattern

(B)

Restricts string types using regular expressions

(2)

use

(C)

Specifies an allowable value in an enumerated list

(3)

prohibited

(D)

Specifies whether the attribute is required or optional

(4)

fractionDigits

(E)

Specifies that the attribute cannot be used

(5)

enumeration

Tóm tắt mô-đun

Trong mô-đun này, Lược đồ XML, bạn đã học về:

Ø Lược đồ XML

Lược đồ XML là một giải pháp thay thế dựa trên XML cho các DTD, nó mô tả cấu trúc của một tài liệu XML. Ngôn ngữ Lược đồ XML còn được gọi là Định nghĩa Lược đồ XML (XML Schema Definition - XSD). Một Lược đồ XML có thể xác định các phần tử, các thuộc tính, các phần tử con và các giá trị khả dĩ có thể xuất hiện trong một tài liệu. Lược đồ khắc phục các hạn chế của DTD và cho phép các ứng dụng Web trao đổi dữ liệu XML một cách mạnh mẽ mà không cần dựa vào các công cụ xác thực đặc biệt.

Ø Khám phá các lược đồ XML

Lược đồ XML cung cấp một loạt các kiểu dữ liệu. Nó hỗ trợ các kiểu dữ liệu tích hợp như string, boolean, number, dateTime, binary và uri. Các kiểu dữ liệu bổ sung như số nguyên, thập phân, thực, thời gian, chu kỳ thời gian và kiểu dữ liệu do người dùng xác định.

Ø Làm việc với loại phức hợp

Các phần tử có kiểu phức hợp có thể chứa các phần tử lồng nhau và có các attribute. Một phần tử phức hợp có thể được xác định bằng cách đặt tên trực tiếp cho phần tử và bằng cách sử dụng tên và thuộc tính kiểu của kiểu phức hợp. 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. maxOccurs chỉ định số lần xuất hiện tối đa của phần tử trong tài liệu XML. Nội dung phần tử trong tài liệu XML chỉ chứa các phần tử XML và nội dung hỗn hợp chứa văn bản trộn với các phần tử. Các cấu trúc nhóm trong lược đồ XML chỉ định thứ tự của các phần tử XML.

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

Các phần tử của kiểu đơn giản mô tả nội dung và kiểu dữ liệu của phần tử hơn là cấu trúc của nó. Kiểu đơn giản có thể có các kiểu dữ liệu cài sẵn và do người dùng xác định. Định nghĩa kiểu đơn giản nhận một trong hai giá trị, mặc định hoặc cố định theo yêu cầu. Kiểu dữ liệu do người dùng xác định có thể được lấy từ kiểu tích hợp sẵn hoặc kiểu đơn giản hiện có. Việc sử dụng các hạn chế và facet hạn chế nội dung của nó ở các giá trị do người dùng quy định. Lược đồ hỗ trợ việc sử dụng các thuộc tính trong các phần tử, được khai báo với một định nghĩa kiểu đơn giản.

» Tiếp: Bài 5.1. Style Sheet
« Trước: Bài 4.3. Làm việc với các kiểu Phức hợp
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!