Hướng dẫn dùng apache xmlschema trong PHP

I. Schema là gì?

Sử dụng DTDs, chúng ta có thể kiểm tra cấu trúc file XML, tính đúng đắn của dữ liệu trong XML bằng DTDs. Tuy nhiên phương pháp này có nhiều hạn chế như:

  – Không có nhiều dạng kiểu dữ liệu

  – Không qui định được khoảng giá trị …

Chính vì thế Schema được tạo ra để khắc phục tất cả các nhược điểm của DTDs.

Như vậy về mặc cơ bản mục tiêu của Schema hoàn toàn giống như DTDs:

  – Định nghĩa cấu trúc các thành phần có trong XML

  – Định nghĩa các thuộc tính có trong Schema

  – Định nghĩa các thành phần con và thứ tự xuất hiện của chúng trong thành phần cha

  – Định nghĩa một thành phần là rỗng hay có chứa text

  – Định nghĩa kiểu dữ liệu cho các thành phần và thuộc tính

  – Định nghĩa giá trị mặc định cho thuộc tính

Tóm lại Schema được phát tirển trên nền tảng DTDs, tuy nhiên Schema có nhiều ưu điểm vượt trội hơn như:

  – Schema viết theo định dạng như XML nên người dùng quen thuộc hơn so với DTDs, người dùng không cần phải làm quen với cấu trúc mới

  – Schema có thể mở rộng còn DTDs thì không: có thể sử dụng cho shema khác, người dùng có thể tự định nghĩa ra kiểu dữ liệu riêng từ các kiểu dữ liệu chuẩn, có thể dùng nhiều Schema cho 1 file XML cùng lúc

  – Schema hỗ trợ Namespace

  – Schema hỗ trợ nhiều dạng kiểu dữ liệu: dễ dàng kiểm tra tính đúng đắn của dữ liệu, dễ dàng khai báo định dạng, phạm vi của dữ liệu.

II. Các kiểu dữ liệu trong Schema

Hướng dẫn dùng apache xmlschema trong PHP

Các kiểu dữ liệu có sẵn (Built-in datatypes) bao gồm các kiểu dữ liệu sau:

  – string: dạng chuỗi

  – boolean: dạng luận lý

  – numeric: dạng số

  – dateTime: dạng ngày tháng, thời gian

  – binary: dạng nhị phân

  – anyURI: các chuỗi URI

  – integer: số nguyên

  – decimal: số thập phân

  – time: thời gian

Thẻ :

Thẻ là thẻ gốc cho tất cả các file schema, thẻ có một số thuộc tính như sau:

  xmlns:xs=”http://www.w3.org/2001/XMLSchema”: chỉ ra rằng các kiểu element, kiểu dữ liệu dùng trong schema được khai báo trong namespace http://www.w3.org/2001/XMLSchema với tiền tố xs

  – xmlns=”http://code5s.com”: namespace mặc định là http://code5s.com

  elementFormDefault=”qualified”: chỉ ra rằng tên các thành phần được sử dụng trong file XML có khai báo schema phải thỏa mãn các khai báo namespace

III. Khai báo Element trong Schema:

Có 2 kiểu khai báo Element trong schema là: simple element và complex element

  – Simple Element: được dùng để khai báo cho các element chỉ chứa text không có khai báo các thẻ con hay thuộc tính

  – Complex Element: được dùng khai báo các khai báo Element có chứa element con, thuộc tính… có 4 dạng complex element:

+ Element rỗng:

    + Element chỉ chứa các thẻ con:

    + Element chỉ chứa text:

     + Element chứa thẻ con và text:

IV. Complex Element:

Cú pháp khai báo một complex element như sau:

1. Element rỗng:

– Ví dụ:

– Chúng ta thấy book  chỉ có 1 thuộc tính là id kiểu số nguyên, chúng ta khai báo như sau:

Ở đây: dùng để khai báo thuộc tính

2. Element chỉ chứa các thẻ con:

– Ví dụ:

– Như khai báo XML, chúng ta thấy thẻ có 2 thẻ con là kiểu chuỗi và kiểu số nguyên, có thuộc tính là id kiểu số nguyên

Trong đó: dùng để khai báo thứ tự các thẻ con trong complex element

3. Element chỉ chứa text:

– Ví dụ: Book 1

– Trong thẻ trên, chúng ta nội dung của thẻ có dạng chuỗi, schema đuuợc viết như sau:

4. Thẻ vừa có text vừa có element:

– Ví dụ:

– Trong thẻ , chúng ta thấy vừa có text vừa có thẻ con, schema được khai báo như sau:

V. Simple Element:

– Cú pháp:

– Ví dụ:

– Schema:

– Khai báo Attribute: Simple Element không thể có Attribute, khi 1 thẻ có Attribute, thẻ đó phải được khai báo ở dạng Complex Element, tuy nhiên 1 Attribute chúng ta có thể khai báo dưới dạng Simple Element theo cú pháp sau:

– Ví dụ:

– Khai báo Schema:

VI. Schema Indicator:

Chúng ta có thể kiểm soát các thẻ được sử dụng như thế nào trong XML bằng các Indicator. Có  5 dạng Indicator:

1. :

– Các thẻ con có thể xuất hiện với thứ tự bất kỳ và các thẻ con phải xuất hiện 1 lần duy nhất.

2.

– Chỉ một trong số các thẻ con được xuất hiện

3.

– Các thẻ con xuất hiện theo thứ tự

4. Số lần xuất hiện tối đa và tối thiểu:

: số lần xuất hiện tối đa

: số lần xuất hiện tối thiểu