V. Sử dụng tham chiếu nội và tham chiếu ngoạ
Chương I V: LƯỢC ĐỒ XML (Schema)
Chúng ta thấy việc sử dụng và khai báo DTD rất phức tạp do đó tổ chức W3C đã
đưa ra một giải pháp tổng quát hóa DTD hơn đó là khai báo và định nghĩa các phần tử
trong tài liệu XML theo lược đồ XML (XML Schema).
Thực sự thì lược đồ XML không đơn giản hơn DTD nhưng nó mạnh hơn và chính xác hơn. Để kiểm tra tính hợp lệ của các định nghĩa DTD trong tài liệu ta dùng bộ kiểm tra
validator, để kiểm tra tính hợp lệ của các khai báo theo lược đồ XML ta dùng bộ kiểm tra cú pháp lược đồ (schema checker).
Chúng ta bắt đầu tìm hiểu về schema XML thông qua ví dụđơn giản sau đây: <?xmlversion="1.0"encoding="utf-8"standalone="no" ?>
<Laptrinh>
<Laptrinhvien> Như Ý</Laptrinhvien> <Laptrinhvien>Thạnh Trung</Laptrinhvien> <Chuyen>Lập trình XML</Chuyen>
</Laptrinh>
Lưu tài liệu này với tập tinh laptrinh.xml. Làm thế nào kết hợp lược đồ XML để trình duyệt hiểu. để thực hiện yêu cầu này cần chỉ định một không gian tên mặc định cho tài liệu bằng khai báo thuộc tính xmlns tại phần tử gốc cùng với thông tin về file chứa lược
đồ x-schema như sau :
<?xmlversion="1.0"encoding="utf-8"standalone="no" ?> <Laptrinhxmlns="x-schema:hello.xsd">
<Laptrinhvien> Như Ý</Laptrinhvien> <Laptrinhvien>Thạnh Trung</Laptrinhvien> <Chuyen>Lập trình XML</Chuyen>
</Laptrinh>
Nội dung file hello.xsd
<?xmlversion="1.0"encoding="utf-8"?> <xs:schemaname="hello"
targetNamespace="http://tempuri.org/hello.xsd" elementFormDefault="qualified"
xmlns="http://tempuri.org/hello.xsd"
xmlns:mstns="http://tempuri.org/hello.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<ElementTypename="Laptrinh"content="eltOnly"model="closed"/> <xs:elementtype="Laptrinhvien"minOccurs="1"maxOccurs="*"/> <xs:elementtype="Chuyen"minOccurs="1"maxOccurs="*"/> </xs:schema>
I.Khai báo các phần tử và kiểu dữ liệu:
Điểm cơ bản nhất để hiểu lược đồ XML đó là khái niệm sử dụng kiểu giản đơn và kiểu phức hợp trong khai báo kiểu cho các phần tử XML.
Để chỉ định kiểu cho một phần tử ta phải đảm bảo kiểu phải được định nghĩa trước
đó. Kiểu phức hợp là kiểu chứa các phần tử con trong nó hoặc chứa trong thuộc tính trong khi kiểu giản đơn thì không.
Kiểu giản đơn là kiểu nội tại đã được định nghĩa sẵn và ta có thể dùng nó tự do trong lược đồ XML. Dưới đây là bảng liệt kể các kiểu giản đơn.
Binary Kiểu dữ liệu nhị phân
boolean Kiểu lý luận
byte Kiểu byte
century Kiểu thế kỷ (ví dụ 21)
decimal Kiểu thập phân double Kiểu số thực 64 bits ENTITY Kiểu thực thể ENTITIES Kiểu đa thực thể ID Kiểu định danh int,integer Kiểu số nguyên
IDREF Kiểu tham chiếu định danh
NOTATION Kiểu ghi chú
NMTOKEN Kiểu token đơn
NMTOKENS Kiểu đa token
month Kiểu tháng
String Kiểu chuỗi
Bảng 4-1 Bảng liệt kê các kiểu dữ liệu đơn giản
Thực ra thì còn rất nhiều kiểu nữa chúng ta có thể tham khảo tại trang web
http://w3.org/199/XMLSchema/typeref.htm.
Tạo một kiểu phức hợp mới trong lược đồ bằng cách dùng phần tử khai báo <xsd:complexType>. Một định nghĩa về kiểu phức hợp bản thân nó thường chứa các khai báo phần tử con, tham chiếu đến các phần tử khác và khai báo thuộc tính. Khai báo phần tử bằng chỉ thị khai báo <xsd:element> và khai báo thuộc tính bằng chỉ thị
<xsd:attribute>. Cũng tương tự như DTD khai báo phần tử sẽ chỉ định cú pháp của phần tử trong lược đồ ta có thể chỉđịnh kiểu cho phần tử thậm chí còn có thể chỉđịnh kiểu cho thuộc tính.
<xs:sequence id="ab">
<xs:elementname="name"type="xs:string"/> <xs:elementname="city"type="xs:string"/> <xs:elementname="street"type="xs:string"/> </xs:sequence>
</xs:complexType>
Chỉđịnh số lần xuất hiện của các phần tử:
MinOccurs Chỉđịnh phần tửđó xuất hiện hoặc không xuất hiện ít nhất MaxOccurs Chỉđịnh phần tửđó xuất hiện tối đa là bao nhiêu lần
Bảng 4-2 Chỉ số xuất hiện của các phần tử (element)
Nếu như không chỉ định MinOccurs và MaxOccurs thì mặc định MinOccurs =1 còn MaxOccrus không giới hạn. Điều này có nghĩa là phải có ít nhất một phần tử xuất hiện.
II.Chỉ định ràng buộc và trị mặc định cho thuộc tính
Thuộc tính không có kiểu phức hợp chúng ta chỉ có thể khai báo thuộc tính giản
đơn nhưng thay vào đó ta có thể chỉ định các ràng buộc cho thuộc tính. Các ràng buộc cho thuộc tính thể hiện ở bảng sau:
required Thuộc tính cần phải hiện hữu trong thẻ và phải được gán trị
optional Thuộc tính có thể có hoặc không và giá trị gán cho thuộc tính là không bắt buộc
fixed Giá trị thuộc tính phải được gán cốđịnh và không được thay đổi nhưđã gán trong lược đồ.
trị mặc định của thuộc tính
prohibited Không cho phép thuộc tính xuất hiện
Bảng 4-3 Các ràng buộc giá trị cho thuộc tính.