Chuẩn bị thi chứng chỉ XML và các công nghệ có liên quan, Phần 2: Mô hình hóa thông tin

Mô hình dữ liệu với ngữ pháp XML

Hướng dẫn này về mô hình hóa thông tin là phần thứ hai trong một loạt gồm năm bài hướng dẫn có thể giúp bạn chuẩn bị cho Bài kiểm tra 142, XML và Các công nghệ liên quan để lấy chứng chỉ IBM™. Hướng dẫn này phân tích dữ liệu XML, đối chiếu tương phản các tài liệu trần thuật (narrative) với các tài liệu giống như bản ghi (record-like) và mô hình hóa một bài toán dữ liệu nhỏ bằng cách sử dụng ngữ pháp Document Type Definition (DTD-Định nghĩa kiểu tài liệu) và một vài lần sử dụng lặp đi lặp lại lược đồ XML của World Wide Web Consortium (W3C-Hiệp hội Web toàn thế giới). Nó kết thúc bằng một sự so sánh về DTD và Lược đồ XML để giúp bạn chọn cái này hay cái kia trong thiết kế của mình.

Louis E Mauget, Tư vấn cao cấp, Number Six Software, Inc.

Lou Mauget là một nhà tư vấn cao cấp về Java™ 2 Enterprise Edition (Java EE Java EE - Ấn bản Java 2 doanh nghiệp) và tác giả nhiều bài viết đã xuất bản, sống gần Raleigh, North Carolina. Ông tư vấn cho nhiều doanh nghiệp và khách hàng thuộc chính phủ. Lou đã là một kỹ sư phần mềm cho IBM trước khi đảm nhiệm chức vụ hiện nay của ông với Number Six Software. Ông vẫn tiếp tục tham gia vào hoạt động sát hạch chứng chỉ cho IBM.



28 08 2009

Trước bạn khi bắt đầu

Trong phần này, bạn sẽ tìm hiểu có thể học được những gì từ hướng dẫn này và làm thế nào để thu nhận được nhiều nhất từ nó.

Về loạt bài viết này

Loạt bài viết này gồm năm hướng dẫn giúp bạn chuẩn bị để làm Bài kiểm tra 142 lấy chứng chỉ IBM, XML và các công nghệ liên quan, để đạt chứng chỉ XML và các công nghệ liên quan dành cho Nhà phát triển giải pháp có chứng nhận của IBM. Chứng chỉ này xác nhận một nhà phát triển trình độ mức trung cấp, người thiết kế và triển khai thực hiện các ứng dụng có sử dụng XML và các công nghệ liên quan như: Lược đồ XML, Extensible Stylesheet Language Transformation (XSLT- Chuyển đổi ngôn ngữ bảng định kiểu mở rộng) và XPath. Nhà phát triển này có một sự hiểu biết tốt về XML cơ bản, có kiến thức về các khái niệm của XML và các công nghệ liên quan; hiểu dữ liệu tương quan với XML như thế nào, đặc biệt là với các vấn đề kết hợp với việc mô hình hóa thông tin, xử lý XML, biểu hiện XML và các dịch vụ Web; có một kiến thức uyên thâm về các khuyến cáo W3C có liên quan đến XML cốt lõi; và quen thuộc với các cách làm thực hành tốt nhất, được nhiều người biết đến.

Về hướng dẫn này

Hướng dẫn này dành cho các lập trình viên, những người có một sự hiểu biết cơ sở về XML và các kỹ năng và kinh nghiệm của họ ở mức bắt đầu tới mức trung cấp. Bạn cần phải có một hiểu biết chung về việc định nghĩa, duyệt tính hợp lệ và đọc XML.

Bản chất tiêu chuẩn hóa của XML đã làm xuất hiện một số trình phân tích cú pháp sao chép, xuyên nhiều nền tảng, xuyên nhiều ngôn ngữ và các công nghệ sao chép. Phần 1 của loạt bài này trình bày kiến trúc XML. Bài hướng dẫn thứ hai trình bày các đặc điểm của dữ liệu, các tài liệu trần thuật và các tài liệu dữ liệu. Nó tiếp tục mô hình hóa một nghiên cứu trường hợp cụ thể đơn giản của ứng dụng XML, đồng thời cho thấy vài lần lặp đi lặp lại của một ngữ pháp.

Các mục tiêu

Sau khi hoàn thành hướng dẫn này, bạn sẽ biết làm thế nào để:

  • Phân tích dữ liệu và các tài liệu.
  • Biểu diễn cấu trúc theo cú pháp XML.
  • Sử dụng các không gian tên một cách thích hợp.
  • Định nghĩa các DTD
  • Định nghĩa các ngữ pháp bằng cách sử dụng lược đồ XML.
  • Xác định khi nào sử dụng một DTD so với một lược đồ XML.

Các điều kiện cần có trước

Hướng dẫn này được viết cho các nhà phát triển, những người có một kiến thức nền tảng về lập trình và kịch bản lệnh và những người có một sự hiểu biết về các mô hình khoa học máy tính cơ bản và các cấu trúc dữ liệu. Bạn cần quen thuộc với các khái niệm khoa học máy tính, có liên quan đến XML sau đây: duyệt đi qua cây, phép đệ quy, và sử dụng lại dữ liệu. Bạn cũng cần quen biết với các tiêu chuẩn và các khái niệm Internet, chẳng hạn như trình duyệt Web, mô hình khách-chủ, làm cứ liệu, định dạng, thương mại điện tử, và các ứng dụng web. Kinh nghiệm thiết kế và triển khai thực hiện các ứng dụng máy tính dựa trên Java™ và làm việc với các cơ sở dữ liệu quan hệ cũng nên có.

Các yêu cầu hệ thống

Để hoàn thành các bước như được chỉ ra trong hướng dẫn này, bạn sẽ cần một trình duyệt cập nhật và trình soạn thảo XML có duyệt tính hợp lệ. Hướng dẫn này sử dụng trình soạn thảo XML XMLSpy. Xem Tài nguyên để tìm liên kết tải về một bản sao của XMLSpy.


Dữ liệu XML và các tài liệu

Trong phần này, bạn sẽ tìm hiểu về hai loại hình cơ bản của tài liệu XML, được gọi là các tài liệu trần thuật và các tài liệu giống như bản ghi. Bạn sẽ tìm hiểu các đặc điểm của chúng và xem các ví dụ mẫu về sử dụng chúng. Hãy ghi nhớ rằng khó có thể đưa ra một định nghĩa khắt khe thế nào là dạng trần thuật, so sánh với dạng giống như bản ghi, vì cuối cùng, mỗi tài liệu đều thực sự là dữ liệu.

Các tài liệu XML dạng trần thuật

Một tài liệu trần thuật (narrative document) là một định dạng có chỉ rõ các từ ngữ, các ký hiệu và định dạng thông tin dành cho con người sử dụng. Một tài liệu phong cách trần thuật thường là không chặt chẽ và ít bị ràng buộc theo một định dạng hơn so với một tài liệu giống như bản ghi dữ liệu. Hầu hết các ngữ pháp của tài liệu trần thuật cho phép một số lượng không hạn chế các cấu trúc tài liệu, trong khi một số ngữ pháp giống như bản ghi chỉ cho phép một cấu trúc.

Các ví dụ về trần thuật

Một ngữ pháp XML phong cách trần thuật có thể định nghĩa các tài liệu biểu hiện thành tư liệu in ra. HTML mở rộng (XHTML), một ngữ pháp XML dành cho Web và DocBook, một ngôn ngữ đánh dấu cho các xuất bản phẩm phẩm kỹ thuật, là những ví dụ về các ngữ pháp đánh dấu trần thuật. Xem Liệt kê 1 về một ví dụ đơn giản của một tài liệu DocBook.

Liệt kê 1. Tài liệu kiểu trần thuật DocBook
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
               "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<?altova_sps http://www.altova.com/sps/Template/Publishing/docbook.sps?>
<article>
    <title>Article Title</title>
    <sect1>
        <title>Section1 Title</title>
        <para>Text</para>
    </sect1>
</article>

Các tài liệu trần thuật có nhiều cách sử dụng ngoài việc biểu hiện văn bản in ấn. Ví dụ, Speech Synthesis Markup Language (SSML-Ngôn ngữ đánh dấu tổng hợp tiếng nói) định nghĩa các tài liệu được biểu hiện dưới dạng âm thanh tiếng nói tổng hợp. VoiceXML (VXML) là một ngữ pháp XML hướng-tiếng nói được W3C định rõ cho sự tương tác bằng tiếng nói của con người hai chiều với một máy tính. Liệt kê 2 hiển thị một ví dụ nhỏ.

Liệt kê 2. Tài liệu kiểu trần thuật VoiceXML
<?xml version="1.0" encoding="UTF-8"?>
<vxml xmlns="http://www.w3.org/2001/vxml" 
xmlns:xsi="http://www.w3.org/2001/Xhref="XMLSchema-instance" 
xsi:schemaLocation="http://www.w3.org/2001/vxml 
   http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0">
        <form>
                <block>Hello from VXML!</block>
        </form>
</vxml>

Các tài liệu dữ liệu giống như bản ghi

Những người sáng lập của dự án XML có lẽ ngạc nhiên thích thú về các ứng dụng của XML có mặt ở khắp mọi nơi, dành cho việc sử dụng dữ liệu giống như bản ghi. Với vai trò là một lựa chọn thay thế cho Standard Generalized Markup Language (SGML- Ngôn ngữ đánh dấu tổng quát hóa tiêu chuẩn) phức tạp, họ thiết kế XML là một siêu ngôn ngữ (metalanguage) được sử dụng để tạo ra các ngữ pháp cho các tài liệu theo phong cách trần thuật. Tuy nhiên, bản chất đơn giản, nhưng chặt chẽ của XML đã làm cho nó thành hoàn hảo để tạo ra các ngữ pháp phân cấp của các phần tử có thuộc tính -- đôi khi tốt hơn so với mô hình quan hệ dạng bảng.

Một ngữ pháp XML của dữ liệu giống như bản ghi thường chặt chẽ hơn nhiều so với ngữ pháp XML trần thuật. Trần thuật là nghệ thuật dành cho con người tiêu dùng. Dữ liệu giống khoa học hơn, dành cho máy tính sử dụng. Có một lượng thừa thãi các ngữ pháp trần thuật hướng-công nghiệp tiêu chuẩn hóa. Một ngữ pháp nổi tiếng được tiêu chuẩn hóa là rất quan trọng nếu những người giấu tên sẽ đọc tài liệu. Mặt khác, các ngữ pháp giống như bản ghi, được chuyên môn hóa, thường tồn tại chỉ dành cho một ứng dụng.

Các ví dụ về tài liệu giống như bản ghi

Nếu bạn làm việc với các ứng dụng Web, bạn có thể đã gặp các bộ mô tả (descriptors) triển khai ứng dụng Web và các bộ mô tả thư viện thẻ JavaServer Pages™ (JSP). Đây là những ví dụ tốt về XML được sử dụng để định nghĩa các bản ghi dữ liệu. Một máy chủ ứng dụng Web cần một khung nhìn có cấu trúc về các ngữ nghĩa và các vị trí của các tạo phẩm triển khai. Bản chất phân cấp của tài liệu web.xml dựa trên XML thỏa mãn yêu cầu này một cách tốt đẹp. Liệt kê 3 cho thấy một bộ mô tả triển khai của một ứng dụng Web theo khung công tác Spring đơn giản.

Liệt kê 3. Một DTD mô tả một đơn vị servlet Web triển khai được
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>example</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>example</servlet-name>
    <url-pattern>/example/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Liệt kê 4 chứa một bộ mô tả thư viện thẻ JSP được sử dụng để kết hợp một tên taglib với một lớp Java có triển khai thực hiện logic của một thẻ đánh dấu JSP tuỳ chỉnh.

Liệt kê 4. Ví dụ một tài liệu XML là bộ mô tả thư viện thẻ JSP
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
       "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
  <tlib-version>1.2</tlib-version>
  <jsp-version>1.1</jsp-version>
  <short-name>bc</short-name>
  <tag>
    <name>BreadCrumb</name>
    <tag-class>com.rogers60.taglib.BreadCrumbTag</tag-class>
  </tag>
</taglib>

XML đúng ngữ pháp và cú pháp

Phần này so sánh các ví dụ tương tự của mã HTML và XHTML để làm nổi bật các sự khác nhau giữa hai mã đó và để giúp giải thích các yêu cầu đối với một tệp tin XML đúng ngữ pháp và cú pháp (well formed).

HTML

HTML là một ngôn ngữ đánh dấu khá lỏng lẻo dựa trên SGML. Các trình duyệt cố gắng đoán định để biểu hiện đúng đối với các thiếu sót và các lỗi đánh dấu. Kết quả thường thay đổi khác nhau tùy theo các nhà cung cấp hoặc các bản phát hành. HTML không tuân theo các quy tắc đơn giản về XML đúng ngữ pháp và cú pháp. Hãy xem một ví dụ về tài liệu đánh dấu HTML không nghiêm ngặt trong Liệt kê 5. Tài liệu này không có DTD kết hợp với nó. Thẻ đánh dấu đoạn (paragraph tag) không được đóng lại. Thẻ tiêu đề là chữ thường, nhưng các thẻ khác là chữ hoa. Hình 1 cho thấy trình duyệt Firefox biểu diễn đúng đắn tài liệu bất chấp sự đánh dấu tùy tiện của nó như thế nào.

Liệt kê 5. Đánh dấu lỏng lẻo
   <HEAD>
      <title>XML Tutorial</title>
   </HEAD>
   <BODY>
   <H1>This is a heading</h1>
      <P>This is a paragraph.
      <P align=center>This is centered</P>
      <P><B>This is bold</P></B>
   </BODY>
Hình 1. Trình duyệt biểu diễn đúng đắn tài liệu HTML không nghiêm ngặt
tài liệu HTML không nghiêm ngặt biểu diễn đúng

Lưu ý rằng HTML không phải là XML. Một tài liệu XML phải đúng ngữ pháp và cú pháp. Nếu một trình phân tích cú pháp XML bắt gặp một lỗi phân tích cú pháp, thì tài liệu đó thật sự không phải là một tài liệu XML. Tài liệu đó không sử dụng được cho đến khi bạn sửa chữa nó.

XHTML

Một tài liệu XHTML là một biến thể của HTML dựa trên tính nghiêm ngặt đúng ngữ pháp và cú pháp của đánh dấu XML.Bảng 1 minh hoạ rằng XHTML một phần là về những dạng đánh dấu nào là không được phép.

Bảng 1. Các đánh dấu XHTML bất hợp pháp
Các ví dụ đánh dấu không được phép trong XHTML
<P>Viết chữ hoa tên các phần tử</P>
<p>Thiếu thẻ kết thúc<br>
<body>Thiếu phần tử root html</body>
<p id=id001>Thiếu dấu nháy kép trong thuộc tính
<p><b>Phạm vi gối đè lên nhau</p></b>
<input type="checkbox" được đánh dấu chọn/>

Bạn phải mã hóa một tài liệu XHTML bằng bộ mã UTF-8 hoặc UTF -16 hoặc đặt lên trước một khai báo XML, khai báo bộ mã bắt buộc. Nó cũng phải có một PUBLIC ID DOCTYPE chỉ rõ DTD của XHTML. Bảng 2 cho thấy năm DTD công cộng, mô tả các biến thể của ngữ pháp XHTML.

Bảng 2. Các DOCTYPE của XHMTL
Ngữ phápDTD DOCTYPE
XHTML 1.0 Chính xác (Strict)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML 1.0 Chuyển tiếp (Transitional)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
XHTML 2.0 (2005)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 2.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml2.dtd">

Bài tập

Trong bài tập này, bạn sẽ tạo ra một phiên bản của XHTML của dữ liệu HTML từ Liệt kê 5 và sau đó chỉnh sửa nó để biểu hiện như đã hiển thị trong Hình 1. Trước tiên, gọi trình soạn thảo XML của bạn, tạo ra một tài liệu mới và chọn kiểu là XHTML. XHTML sẽ tương tự như Hình 2. Nếu bạn không sử dụng XMLSpy, bạn có thể thấy một số sự khác biệt. Kiểm tra xem DOCTYPE có đúng là XHTML 1.0 chính xác không.

Hình 2. Mẫu soạn sẵn của XHTML
Mẫu soạn sẵn của XHTML

Tiếp theo, chỉnh sửa mẫu soạn sẵn để tích hợp một phiên bản sạch lỗi của tài liệu HTML tùy tiện từ Liệt kê 5. Nếu bạn cung cấp XHTML đúng ngữ pháp và cú pháp và hợp lệ, thì nó sẽ vượt qua được bài kiểm tra xác nhận hợp lệ, như được hiển thị trong Hình 3.

Hình 3. Tài liệu đánh dấu XHTML 1.0 đã cập nhật
Đánh dấu XHTML 1.0 đã cập nhật

Lưu ý rằng bạn phải sử dụng một thuộc tính style dóng văn bản theo chiều thẳng đứng của một Cascading Style Sheet (CSS- Bảng định kiểu xếp chồng) để dóng chính giữa dòng đoạn văn bản, vì DTD sẽ không cho phép thuộc tính dóng chính giữa dòng (center) của một đoạn văn bản HTML. Nếu dùng, lúc đó tài liệu sẽ không vượt qua được phép kiểm tra xác nhận hợp lệ vì có thuộc tính center của một đoạn văn bản này.

So sánh với XHTML, HTML khó kiểm tra hợp lệ hơn vì bản chất xuề xòa (laid-back) của các trình duyệt và vì HTML là thừa kế của SGML phức tạp. Cần các công cụ chuyên dùng, phức tạp thực hiện kiểm tra hợp lệ của HTML, trong khi bất kỳ công cụ XML tiêu chuẩn nào đều có thể kiểm tra hợp lệ một tài liệu XHTML.

Để thử nghiệm việc biểu hiện, hãy lưu tệp tin XHTML và xem nó trong một trình duyệt hoặc nhấn vào thẻ Browser trong XMLSpy. Hình 4 cho thấy kết quả này. Lưu ý rằng nó biểu hiện giống hệt Hình 1.

Hình 4. XHTML được biểu diễn trong một trình duyệt Web Firefox
XHTML được biểu diễn trong một trình duyệt Web Firefox

Không giống như ví dụ về HTML không nghiêm ngặt, trình duyệt sẽ từ chối biểu hiện tệp tin XHTML nếu nó không hợp lệ. Một lỗi ngữ pháp duy nhất làm mất hiệu lực toàn bộ tài liệu.

Tại sao lại sử dụng XHTML nếu nó quá nhạy cảm như vậy?

Các trình duyệt phải đoán để biểu hiện các đánh dấu không chặt chẽ trong các tệp tin HTML. Không có tiêu chuẩn nào cho các giả định này, do đó HTML có thể biểu hiện các tạo phẩm trực quan không mong muốn trong một trình duyệt này nhưng không phải trong trình duyệt khác.

Tệp tin hợp lệ là XML, do đó tất cả các trình phân tích cú pháp bắt buộc phải phân tích cú pháp nó và cung cấp một biểu hiện trực quan hợp lý. Hơn nữa, lưu ý rằng bạn đã sử dụng một công cụ XML để tạo ra và chỉnh sửa tệp tin này. Giá trị thực sự của XHTML là bạn có thể sử dụng bất kỳ công cụ hay thư viện XML nào để làm việc với XHTML.


Mô hình hóa dữ liệu trong XML

Giả sử rằng bạn phải mô hình hóa bằng XML một tập hợp các cuốn sách đã xuất bản. Mục đích là để cho phép bất kỳ ứng dụng lập trình nào sử dụng nó làm đầu vào cho các báo cáo, các công việc tìm kiếm tài liệu tham khảo hoặc, có lẽ, một danh mục thương mại điện tử về các quyển sách để bán.

Một số các chuyên gia khuyên cáo bạn nên tạo một DTD hay một lược đồ trước khi bạn thực hiện một mẫu tài liệu. Tôi cho rằng cách tiếp cận này quá trừu tượng hóa. Thay vào đó, tôi muốn mượn một trang về các phương pháp dựa theo thử nghiệm được sử dụng trong thiết kế chương trình: Tạo một tài liệu, sau đó tạo ra một DTD để xác nhận hợp lệ của tài liệu đó. Tài liệu là bài kiểm tra và DTD là một ứng dụng. Bạn sẽ có thể lặp lại việc thiết kế này bằng cách thay đổi bất kỳ tài liệu nào trong hai cái khi bạn xử lý. Sau này, tôi sẽ chỉ ra cho bạn thấy làm thế nào để loại bỏ DTD và ủng hộ tạo ra một lược đồ XML cho tài liệu kiểm tra này, vì hướng dẫn này nói về việc làm thế nào để mô hình và ràng buộc dữ liệu trong XML bằng cách sử dụng cả hai cách tiếp cận.

Bạn vẫn còn cần tài liệu thử nghiệm đó. Nhiệm vụ của bạn là mô hình hóa của một danh mục các cuốn sách đã xuất bản, nhưng bạn có thể muốn mở rộng danh mục cho các loại xuất bản phẩm khác trong tương lai. Bạn có thể nghĩ về danh mục đó như là một danh sách các xuất bản phẩm. Mỗi tài liệu XML là một hệ thống phân cấp có chỉ một gốc, do đó, bạn có thể sử dụng từ "các xuất bản phẩm") (publications) như là phần tử gốc. Xem Liệt kê 6.

Liệt kê 6. Các phần mở đầu
<?xml version="1.0" encoding="UTF-8"?>
<publications>
     . . .
</publications>

Danh mục các xuất bản phẩm không chứa hay có chứa nhiều cuốn sách. Có vẻ hợp lý là một cuốn sách phải là một phần tử con của phần tử publications, như được hiển thị trong Liệt kê 7.

Liệt kê 7. Các phần tử con được thêm vào
<?xml version="1.0" encoding="UTF-8"?>
<publications>
  <book></book>
  <book></book>
  <book></book>
    . . .
</publications>

Mỗi một cuốn sách có một số thuộc tính chung: tiêu đề (title), tác giả (author), bản quyền (copyright) và số ISBN. Các mục này là các thuộc tính của một cuốn sách, nhưng bạn sẽ mô hình hóa chúng như là các thuộc tính XML thực sự, hay như là các phần tử XML? Xem xét lại một số khả năng khác nhau giữa các thuộc tính và các phần tử, như được hiển thị trong Bảng 3.

Bảng 3. Các khả năng của các thuộc tính so với các phần tử
Khả năngThuộc tínhPhần tử
Tính phân cấpKhông-phẳng
Sắp thứ tựKhông-không định nghĩa
Các kiểu phức tạpKhông- chỉ là chuỗi ký tự
Văn bản dàiÍt hơn - thường như thếNhiều hơn
Dễ đọcÍt hơnNhiều hơn-thường như thế

Tiêu đề (title), tác giả (author), bản quyền (copyright) và số ISBN dường như là phần tử con trực tiếp của một cuốn sách. Cuối cùng chúng sẽ cần có phần tử con của chính chúng hay không? Bạn không chắc chắn về điểm này, nhưng không vì lý do gì mà bạn lại muốn ngăn chặn việc mở rộng kiểu này. Đây là một lý do ủng hộ việc mô hình hóa chúng như là các phần tử.

Các mục có lẽ không cần phải sắp thứ tự bên trong một cuốn sách, khi mà một ứng dụng có thể phân tích cú pháp chúng theo tên, nhưng việc sắp đúng thứ tự dường như -- cũng -- có trật tự hơn. Bạn có thể ủng hộ cách này hay cách kia nếu nói về mặt sắp thứ tự. Không bên nào ghi điểm ở đây.

Một số các mục dường như là các chuỗi ký tự đơn giản, nhưng bản quyền thực sự là một số có bốn chữ số mà bạn có thể phải thi hành trong một phiên bản tương lai của một lược đồ dành cho danh mục các xuất bản phẩm của bạn. Ngoài ra, sau này bạn có thể áp đặt một mẫu định dạng đối với ISBN. Vì vậy, hãy ghi thêm một điểm chắc chắn ủng hộ việc mô hình hóa như là các phần tử ở đây.

Nếu một công nghệ ràng buộc XML, chẳng hạn như Java™ Architecture for XML Binding (JAXB - Kiến trúc Java ™ cho việc ràng buộc XML), là một phần của kiến trúc, thì hãy xem xét việc các phần tử được chuyển thành các lớp, trong khi các thuộc tính (XML) trở thành các thuộc tính của các lớp này. Như vậy, số lượng các lớp tỷ lệ với số lượng các loại các phần tử. Điều này có thể có nghĩa là kích thước lớn hơn và có lẽ mã nguồn phức tạp hơn. Tuy nhiên, công cụ ràng buộc tạo ra mã này. Tài liệu nguồn thực sự là lược đồ. Những người bảo trì (maintainers) thường không sửa đổi các lớp này bằng tay. Vì vậy, việc ràng buộc XML có thể không phải là một nhân tố trong việc quyết định chọn là phần tử hay là thuộc tính. Không bên nào ghi điểm đối với JAXB hay ràng buộc XML nói chung.

Hiện nay tỷ lệ lý lẽ ủng hộ là hai trên không ủng hộ chọn các phần tử trên toàn bộ các thuộc tính -- chỉ với vấn đề này. Các đặc điểm dài và dễ đọc có thể là một vấn đề về sở thích cá nhân hay là một phần của các yêu cầu thiết kế. Bạn phải tự đánh giá nhiệm vụ thiết kế hiện tại của mình. Đôi khi nó chỉ còn là vấn đề sở thích cá nhân.

Một số các lược đồ cho phép sử dụng hoặc một thuộc tính hoặc một phần tử ở một vị trí cụ thể. Cả hai tài liệu Apache ANT và DocBook cho phép hành vi này xảy ra.

Trong hướng dẫn này, hãy sử dụng các phần tử cho tiêu đề, tác giả, bản quyền và số ISBN, với các chữ thường cho ISBN. Bạn có thể giữ lại lựa chọn cho phép có các thuộc tính tùy chọn hay các thuộc tính thực tế bắt buộc phải có đối với phần tử book, ví dụ như thuộc tính image dùng để gắn thêm một hình ảnh tùy chọn của cuốn sách và thuộc tính mã nhận dạng id để áp đặt một mã nhận dạng (identifier) duy nhất đối với một cuốn sách, để các ứng dụng sử dụng như là một khóa tham chiếu. Liệt kê 8 chỉ ra tài liệu thử nghiệm vào thời điểm này. Nó không có lược đồ DTD hoặc XML. Đó là công việc tiếp theo của bạn. Hướng dẫn này cho bạn thấy cách làm thế nào để thực hiện một trong thuộc tính ấy.

Liệt kê 8. Tài liệu thử nghiệm publications1.xml
<?xml version="1.0" encoding="UTF-8"?>
<publications>
    <book>
        <title>Building J2EE Applications With IBM WebSphere</title>
        <author>Nilsson and Mauget</author>
        <copyright>2003</copyright>
        <publisher>Wiley</publisher>
        <isbn>0471281573</isbn>
    </book>
    <book>
        <title>Linux and Windows Interoperability Guide</title>
        <author>Bradford and Mauget</author>
        <copyright>2001</copyright>
        <publisher>Pearson Education</publisher>
        <isbn>0130324779</isbn>
    </book>
    <book>
        <title>e - Directories</title>
        <author>House,Hahn,Mauget,Daugherty</author>
        <copyright>2000</copyright>
        <publisher>Pearson Education</publisher>
        <isbn>0471281573</isbn>
    </book>
</publications>

Bạn có thể áp đặt một ngữ pháp dựa trên-DTD cho tài liệu thử nghiệm này bằng cách mô tả tài liệu trong DTD-speak, một ngôn ngữ đánh dấu cũ, vay mượn từ SGML. Trước tiên, để áp đặt một ngữ pháp có nghĩa là gì?

Một ngữ pháp ràng buộc tính hợp lệ của tài liệu XML, hơi giống như là một lược đồ của hệ quản trị cơ sở dữ liệu quan hệ (DBMS) mô tả và ràng buộc khuôn dạng của cơ sở dữ liệu. Khi nào thì áp dụng một ngữ pháp? Một ngữ pháp DBMS ngăn ngừa những sự thay đổi cấu trúc có hại hoặc các thay đổi quan hệ không được phép bất cứ khi nào một ứng dụng sửa đổi dữ liệu trong các bảng của nó. Lược đồ DBMS chủ yếu là về viết và một chút về đọc.

Một ngữ pháp XML áp dụng ở một điểm khác. Một người sử dụng có thể sửa đổi một tài liệu XML bằng Notepad của Microsoft®, đó là một ứng dụng không biết gì về XML hay các tài liệu ngữ pháp của nó. Một ngữ pháp XML áp dụng trong quá trình phân tích cú pháp hoặc ghi nhận tài liệu XML trong lúc đọc. Vì vậy, một ngữ pháp XML là về cách đọc thông tin hợp lệ, chứ không phải viết nó. Một tài liệu đúng ngữ pháp và cú pháp đáp ứng các yêu cầu về đánh dấu XML, nhưng có thể là không hợp lệ theo ngữ pháp đi kèm. Đây là vấn đề lựa chọn đi tiếp /không đi tiếp trong lúc phân tích cú pháp. Việc không có tính hợp lệ ở đây làm cho tài liệu vô dụng. Không có chuyện tiếp tục công việc như khi trình duyệt làm việc với HTML không nghiêm ngặt.


Các DTD và Các lược đồ

Định nghĩa một DTD

Một DTD nói chung bao gồm các câu lệnh đánh dấu <!ELEMENT ... ><!ATTRIBUTE ... >.

Phần tử đầu tiên của tài liệu thử nghiệm là publications. Nó có chứa các phần tử book, do đó đặt book trong ngoặc để biểu thị sự chứa đựng. Bạn có thể nối vào sau từ book một dấu hoa thị (*) để biểu thị cho "không hay nhiều", một dấu (+) cho "một hay nhiều", một dấu hỏi (?) cho "một hay không", hoặc không có hậu tố nào cho một book được phép. Đây là một phần của ký hiệu biểu thức chính quy. Vì vậy, dòng đầu tiên của DTD trông như sau:

<!ELEMENT publications (book*)>

Mỗi cuốn sách (book) có chứa chính xác một phần tử title, author, copyrightisbn, theo thứ tự này. (Với mục đích của hướng dẫn này, nhiều tác giả cũng được nhập vào trong cùng một phần tử tác giả duy nhất. Khi bạn tạo một DTD, hãy nhớ xem xét làm thế nào để thiết lập DTD để cho phép một hoặc nhiều phần tử). Do đó, câu lệnh đánh dấu tiếp theo là:

<!ELEMENT book (title, author, copyright, publisher, isbn)>

Các phần tử còn lại là các phần tử nút lá có chứa dữ liệu ký tự. Bạn sử dụng dấu ngoặc để biểu thị sự chứa đựng, như bình thường. Bạn cần phải khai báo các loại dữ liệu ký tự. Các chuỗi ký tự được phân tích cú pháp như dữ liệu ký tự, được biểu thị bằng các chữ, #PCDATA:

<!ELEMENT title (#PCDATA)>

Bạn cho mỗi book một khóa nhận dạng duy nhất bắt buộc phải có, nhờ một loại thuộc tính mã nhận dạng ID XML đặc biệt. Ngoài ra, bạn có thể cho phép một thuộc tính image tùy chọn có chứa một URL của một bức ảnh của bìa sách. Đánh dấu ATTLIST nhận một đối số là phần tử, theo sau là một bộ (tuple) cho mỗi thuộc tính kết hợp với phần tử này. Mỗi bộ gồm có tên của thuộc tính, kiểu của nó và một dấu chỉ báo nó là tùy chọn hay bắt buộc. Đặc tả DTD cho phép 10 kiểu thuộc tính, được liệt kê trong Bảng 4.

Bảng 4. Các kiểu thuộc tính DTD
Kiểu thuộc tính DTD Mô tả
CDATABất cứ chuỗi ký tự nào có thể chấp nhận được trong XML.
NMTOKENGần như là một tên XML; ký tự đầu tiên không quy định chặt.
NMTOKENSMột hoặc nhiều mã thông báo NMTOKEN được phân tách bằng khoảng trống.
Enumeration (Bảng kê)Danh sách chỉ các giá trị được phép cho một thuộc tính.
ENTITYKết hợp một tên với một phép thay thế kiểu như macro.
ENTITIESDanh sách các tên ENTITY được phân tách bằng khoảng trống.
IDTên XML duy nhất trong toàn bộ tài liệu.
IDREFTham chiếu đến một thuộc tính ID trong tài liệu.
IDREFSDanh sách các mã thông báo IDREF được phân tách bằng khoảng trống.
NOTATIONKết hợp một tên với thông tin được máy khách sử dụng.

Bạn biểu thị một thuộc tính là bắt buộc bằng cách viết thêm #REQUIRED sau kiểu. Bạn có thể quy định một thuộc tính là tùy chọn bằng cách viết thêm #IMPLIED. Ngữ pháp này có một thuộc tính của mỗi loại trên phần tử book. Một câu lệnh ATTLIST trông như sau:

<!ATTLIST book id ID #REQUIRED  image CDATA #IMPLIED>

Liệt kê 9 hiển thị DTD đã hoàn thành.

Liệt kê 9. DTD của xuất bản phẩm
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT publications (book*)>
<!ELEMENT book (title, author, copyright, publisher, isbn)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT isbn (#PCDATA)>
<!ATTLIST book
      id ID #REQUIRED
      image CDATA #IMPLIED>

Bạn sẽ kết hợp với DTD với tài liệu mà nó mô tả như thế nào? Bạn có thể gắn DTD vào trong tài liệu XML ngay trong dòng lệnh (in line). Cách tiếp cận sách giáo khoa là giữ cho hai tài liệu riêng biệt. Ứng dụng có thể dứt khoát sử dụng tài liệu publications.dtd để xác nhận tính hợp lệ của tài liệu publications2.xml. Thay vào đó, liên kết không rõ ràng DTD tới tài liệu XML là:

<!DOCTYPE publications SYSTEM "publications.dtd">

Liệt kê 10 hiển thị tài liệu XML có liên kết đến DTD mới. Nó giả thiết rằng DTD này nằm ở thư mục hiện tại.

Liệt kê 10. Tài liệu có liên kết đến một DTD riêng biệt
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE publications SYSTEM "publications.dtd">
<publications>
    <book id="_1001">
        <title>Building J2EE Applications With IBM WebSphere</title>
        <author>Nilsson and Mauget</author>
        <copyright>2003</copyright>
        <publisher>Wiley</publisher>
        <isbn>0471281573</isbn>
    </book>
    <book id="_3042">
        <title>Linux and Windows Interoperability Guide</title>
        <author>Bradford and Mauget</author>
        <copyright>2001</copyright>
        <publisher>Pearson Education</publisher>
        <isbn>0130324779</isbn>
    </book>
    <book id="_9593" image="edir.jpg">
        <title>e - Directories</title>
        <author>House,Hahn,Mauget,Daugherty</author>
        <copyright>2000</copyright>
        <publisher>Pearson Education</publisher>
        <isbn>0471281573</isbn>
    </book>
</publications>

Những công cụ dễ kiếm nào bạn có thể sử dụng để tiến hành kiểm tra hợp lệ ? Bạn có thể sử dụng Altova XMLSpy Home Edition (XMLSpy của Altova, Ấn bản dùng ở nhà) tải về miễn phí để kiểm tra tính hợp lệ của tài liệu. Đặt tệp tin publications.dtd và tệp tin publications2.xml trong cùng một thư mục, mở tài liệu XML, và sau đó nhấn vào F8. Hình 5 cho thấy việc xác nhận hợp lệ thành công.

Hình 5. Xác nhận hợp lệ bằng cách sử dụng DTD được liên kết
Hình 5. Xác nhận hợp lệ bằng cách sử dụng DTD được liên kết

Điều gì sẽ xảy ra khi tài liệu đó không hợp lệ? Hủy bỏ thuộc tính id bắt buộc của phần tử đầu tiên, sau đó nhấn vào F7 để kiểm tra tài liệu hợp pháp với cú pháp XML. Trạng thái báo màu vàng. Điều này có nghĩa là tài liệu đúng ngữ pháp và cú pháp. Bây giờ hãy nhấn vào F8. Hình 6 cho thấy kết quả. Trạng thái có màu đỏ, có nghĩa là nó là một tài liệu không hợp lệ. XMLSpy sẽ báo rằng tài liệu không hợp lệ nếu bạn cố gắng lưu lại nó.

Hình 6. Tài liệu không hợp lệ -- thiếu thuộc tính id bắt buộc
Hình 6. Tài liệu không hợp lệ -- thiếu thuộc tính id bắt buộc

Định nghĩa một Lược đồ XML

Một lược đồ XML của W3C là một tài liệu ngữ pháp đó là, chính nó là một tài liệu XML. Schematron và Relax NG là ngôn ngữ xác nhận tính hợp lệ XML khác. Tôi chỉ trình bày lược đồ XML của W3C, nhưng bạn có thể muốn xem các lược đồ khác, vì chúng tương đối đơn giản và phổ biến.

Bạn có thể thiết kế một lược đồ XML để ràng buộc tài liệu của bạn đến một mức độ cao hơn so với khi sử dụng DTD. Ví dụ, một ngữ pháp của lược đồ XML có thể chỉ rõ rằng chính xác bốn phần tử quả táo (apple) luôn luôn phải là phần tử con trực tiếp của một phần tử giỏ hàng (basket). Bạn có thể định nghĩa các kiểu phức tạp, dựa vào các kiểu chuỗi ký tự (string). Ví dụ, bạn có thể yêu cầu một phần tử mã bưu điện (zipcode) phải có một phần của giá trị (facet of value) theo mẫu là "\d\d\d\d\d-\d\d\d\d", sao cho các giá trị như là "95123-4823" là hợp lệ , nhưng "abcde-fghi" hay "27703" là không hợp lệ.

Ý nghĩa của thuật ngữ facet là gì?. Một Lược đồ XML xem xét một facet là một phần của các giá trị có thể cho một kiểu dữ liệu đơn giản. Bảng 5 thấy các facet của Lược đồ XML.

Bảng 5. Các facet của Lược đồ XML của W3C
Kiểu facet Mô tả
lengthÁp đặt độ dài chính xác.
minLengthÁp đặt, ít nhất, một độ dài tối thiểu của một kiểu chuỗi ký tự bắt đầu.
maxLengthÁp đặt, hầu hết, một độ dài tối đa của một kiểu chuỗi ký tự bắt đầu.
maxExclusiveGiá trị phải <= giá trị lớn nhất thích hợp cho kiểu đó.
maxInclusiveGiá trị phải < giá trị lớn nhất thích hợp cho kiểu đó.
minExclusiveGiá trị phải > giá trị nhỏ nhất thích hợp cho kiểu đó.
minInclusiveGiá trị phải >= giá trị nhỏ nhất thích hợp cho kiểu đó.
enumerationHạn chế các giá trị cho một bộ phận trong một danh sách đã định.
totalDigitsÁp đặt tổng số các số trong một số; không tính các ký hiệu và các dấu thập phân.
fractionDigitsÁp đặt tổng số các số phân số trong một số phân số.
whiteSpaceĐược sử dụng để bảo quản, thay thế hoặc thu hẹp khoảng trống trong tài liệu.

Đây là một gợi ý về độ chi tiết mà bạn có sẵn để sử dụng, nhưng bạn sẽ bắt đầu bằng cách tạo ra một lược đồ XML phù hợp với khả năng của DTD. Sau đó, tôi sẽ cho bạn thấy làm thế nào để thiết chặt nó một chút nữa nhằm cho thấy lợi thế của lược đồ.

Để bắt đầu, hãy khai báo lược đồ được Lược đồ XML sử dụng. Không sử dụng một không gian tên cho ngữ pháp cho đến phần sau trong hướng dẫn này. Lược đồ tự nó sử dụng một không gian tên. Theo quy ước, bạn nên sử dụng tiền tố "xs". Bạn có thể sử dụng bất kỳ chuỗi ký tự nào làm tiền tố, ngay cả "radish", nhưng tại sao lại phạm vào quy ước?

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

Hiện nay, hãy khai báo rằng các phần tử và các thuộc tính được khai báo riêng của bạn là chưa đủ điều kiện phân loại:

	elementFormDefault="unqualified" 
	attributeFormDefault="unqualified"

Dưới đây là phần tử gốc của lược đồ XML sau khi bạn ghép lại với nhau:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	elementFormDefault="unqualified" 
	attributeFormDefault="unqualified">

Tiếp đến, bạn có thể bắt đầu chỉ rõ các khai báo của phần tử publications, cũng như các phần tử book, title, author, copyright, publisherisbn. Bạn có thể chỉ rõ phần tử gốc là:

<xs:element name="publications">

Phần tử gốc publications là một kiểu phức tạp có chứa một dãy các phần tử khác, cụ thể là một phần tử book. tùy chọn. Nó có một số lượng tối đa không hạn chế các lần xuất hiện:

<xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">

Book là một kiểu phức tạp tiếp theo, chứa một dãy riêng các khai báo phần tử title, author, copyright, publisherisbn element declarationscủa nó:

<xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="title"/>
       <xs:element name="author"/>
       <xs:element name="copyright"/>
       <xs:element name="publisher"/>
       <xs:element name="isbn"/>
      </xs:sequence>
	...

Có phải tôi đã quên, không yêu cầu bạn thêm thuộc tính id và thuộc tính image image cho phần tử book không? Không, bạn đơn giản là trì hoãn những thứ đó đến cuối của kiểu phức tạp được phần tử book chứa đựng.

Các quy tắc (ngữ pháp) của Lược đồ XML tuyên bố rằng bạn đặt các thuộc tính cuối cùng trong khai báo kiểu phức tạp mà một phần tử chưa đựng. Một thuộc tính là một phần tử lược đồ có dạng <xs:attribute … />.

Vì vậy, bạn có thể thêm vào thuộc tính id image,như được hiển thị ở đây:

 <xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="title"/>
       <xs:element name="author"/>
       <xs:element name="copyright"/>
       <xs:element name="publisher"/>
       <xs:element name="isbn"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required"/>
      <xs:attribute name="image" type="xs:string"/>
     </xs:complexType>

Thuộc tính id là bắt buộc, còn thuộc tính image sử dụng các giá trị mặc định cho tùy chọn.

Hãy chú ý kiểu, xs:string. Bạn có thể đã xác định một kiểu phức tạp dựa trên chuỗi ký tự. Với XML, đó vẫn còn là một chuỗi ký tự, nhưng với lược đồ XML, nó là một kiểu chuỗi đặc biệt. Tôi sẽ nói thêm về các kiểu phức tạp do người dùng định nghĩa ngay sau đây.

Vậy là gần như hoàn tất lược đồ của bạn. Hãy thêm thẻ đánh dấu đóng cho các phần tử còn mở, như được hiển thị trong Liệt kê 11.

Liệt kê 11. Lược đồ khớp với các khả năng DTD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
 <xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="title"/>
       <xs:element name="author"/>
       <xs:element name="copyright"/>
       <xs:element name="publisher"/>
       <xs:element name="isbn"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required"/>
      <xs:attribute name="image" type="xs:string"/>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

Bạn có thể mở tài liệu publication3.xsd trong XMLSpy và nhấn vào F8 để xác nhận tính hợp lệ của nó dựa vào http://www.w3.org/2001/XMLSchema, như thể nó là một tài liệu XML -- bởi vì nó đúng là một tài liệu XML.

Kết hợp một Lược đồ XML vào một tài liệu

Lược đồ chỉ có ích khi được áp dụng cho một tài liệu XML. Bạn có thể kết hợp một lược đồ vào một tài liệu như thế nào? Ứng dụng này có thể dứt khoát sử dụng tài liệu publications3.xsd để xác nhận tính hợp lệ của tài liệu publications3.xml. Thay vào đó, bạn muốn kết hợp không rõ ràng lược đồ với tài liệu XML.

Bạn có thể chỉnh sửa phần tử gốc của tài liệu để liên kết với lược đồ thông qua một thuộc tính đặc biệt. Lược đồ này còn chưa dùng một không gian tên -- chưa. Bạn cần phải thêm một thuộc tính tới phần tử gốc publications để chỉ cho trình phân tích cú pháp tìm thấy lược đồ không có không gian tên ở đâu:

<publications xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                       xsi:noNamespaceSchemaLocation="publications3.xsd">

Thế là xong việc này! Hãy xem tài liệu publications3.xml trong Liệt kê 12. Nó có cùng các nội dung tài liệu như được hiển thị trong Liệt kê 8, trừ kết hợp lược đồ.

Liệt kê 12. publication3.xml liên kết với Lược đồ XML của W3C
<?xml version="1.0" encoding="UTF-8"?>
<publications xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="publications3.xsd">
      <book id="_1001">
            <title>Building J2EE Applications With IBM WebSphere</title>
            <author>Nilsson and Mauget</author>
            <copyright>2003</copyright>
            <publisher>Wiley</publisher>
            <isbn>0471281573</isbn>
      </book>
      <book id="_3042">
            <title>Linux and Windows Interoperability Guide</title>
            <author>Bradford and Mauget</author>
            <copyright>2001</copyright>
            <publisher>Pearson Education</publisher>
            <isbn>0130324779</isbn>
      </book>
      <book id="_9593" image="edir.jpg">
            <title>e - Directories</title>
            <author>House,Hahn,Mauget,Daugherty</author>
            <copyright>2000</copyright>
            <publisher>Pearson Education</publisher>
            <isbn>0471281573</isbn>
      </book>
</publications>

Áp đặt một không gian tên

Việc áp đặt một không gian tên trên tài liệu của bạn là như thế nào? Một DTD không có khái niệm nào của không gian tên. Thay vào đó, nó lờ đi dấu hai chấm (":") trong một tên phần tử hay thuộc tính đủ phân biệt theo không gian tên. Điều này có nghĩa là bất kỳ sự khử nhập nhằng nào được áp dụng bằng cách sử dụng tiền tố trước dấu hai chấm, không phải là URI được biểu diễn bằng tiền tố. Hai tài liệu sử dụng tiền tố giống nhau là hợp pháp, nhưng phải được kết hợp với các không gian tên khác nhau. Điều này có thể dẫn đến một sự xung đột tên khó giải quyết.

Áp đặt không gian tên sau đây cho tài liệu của bạn:

http://rogers60.com/xmltutorial/2

Hãy sử dụng pub làm tiền tố, mặc dù bạn có thể sử dụng bất cứ chuỗi ký tự hợp pháp nào duy nhất trong tài liệu và lược đồ. Với một DTD, pub:book như thể nó đã là pubbook.

Với sự hỗ trợ không gian tên Lược đồ XML, về mặt quan niệm nó hoạt động như thể đã là http://rogers60.com/xmltutorial/2book.

Hoạt động của DTD không nhất thiết ngăn ngừa được các xung đột không gian tên. Mặt khác, hoạt động của Lược đồ XML có thể ngăn ngừa các xung đột không gian tên, nếu đã được khai báo đúng đắn, bởi vì URI dựa trên DNS là duy nhất. Hãy tiến lên một bước nhỏ nữa tiếp theo trong quá trình tiến triển của lược đồ bằng cách cho nó một không gian tên mặc định với tiền tố là pub:

xmlns:pub="http://rogers60.com/xmltutorial/2"

Bạn cần phải định rõ cả hai thuộc tính để nhằm đến một không gian tên và sử dụng một không gian tên mặc định. Quy ước chung là cho phép các phần tử không gắn tiền tố nhận không gian tên mặc định, nhưng để lại các thuộc tính không gắn tiền tố nằm ngoài mọi không gian tên:

elementFormDefault="qualified"
attributeFormDefault="unqualified"

Nhớ lại rằng bạn đã khai báo elementFormDefault="unqualified" trong ngữ pháp không có không gian tên trước đó. Bạn đã không thêm thứ gì khác vào lược đồ cụ thể của bạn để phân biệt theo không gian tên các ngữ pháp của nó. Xem Liệt kê 13.

Liệt kê 13. Lược đồ với không gian tên mặc định
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pub="http://rogers60.com/xmltutorial/2" 
    targetNamespace="http://rogers60.com/xmltutorial/2" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
 <xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
     <xs:complexType>
      <xs:sequence>
       <xs:element name="title"/>
       <xs:element name="author"/>
       <xs:element name="copyright"/>
       <xs:element name="publisher"/>
       <xs:element name="isbn"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:string" use="required"/>
      <xs:attribute name="image" type="xs:string" use="optional"/>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

Bạn cần phải thực hiện một phẫu thuật nho nhỏ với tài liệu XML để kết nối nó tới không gian tên. Ca phẫu thuật là nhỏ bởi vì toàn bộ tài liệu ở trong không gian tên mặc định. Thay vì chỉ rõ một thuộc tính vị trí của lược đồ không có không gian tên cho phần tử gốc publications, bạn chỉ rõ:

xsi:schemaLocation="http://rogers60.com/xmltutorial/2   publicationsNS4.xsd"

Hãy cẩn thận ở đây. Lưu ý cặp giá trị có hai phần, phân tách bằng khoảng trống, nằm trong dấu nháy kép. Thành phần đầu tiên là URI của không gian tên và thứ hai là vị trí của tệp tin lược đồ. Đây sẽ là một URL nói chung. Ngoài ra, thêm một không gian tên mặc định và một tiền tố pub cho chính không gian tên này:

   xmlns="http://rogers60.com/xmltutorial/2"
    xmlns:pub="http://rogers60.com/xmltutorial/2"

Điều này cho phép bạn để cho một tên phần tử chưa phân biệt đầy đủ mặc định thuộc URI http://rogers60.com/xmltutorial/2 hoặc chỉ rõ một tiền tố pub rõ ràng cho không gian tên đó. Đối với ví dụ này, <book><pub:book> muốn nói khai báo ngữ pháp của phần tử giống hệt nhau. Xem Liệt kê 14 về một phiên bản có cho phép không gian tên của tài liệu thử nghiệm. Lưu ý rằng phần tử book cuối cùng được phân biệt rõ ràng như là pub:book để minh họa. Tài liệu này là hợp lệ trong bối cảnh của lược đồ của Liệt kê 13, được hiển thị trước đó.

Liệt kê 14. Tài liệu XML với không gian tên mặc định
<?xml version="1.0" encoding="UTF-8"?>
<publications 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://rogers60.com/xmltutorial/2  
    publicationsNS4.xsd" 
    xmlns="http://rogers60.com/xmltutorial/2"
    xmlns:pub="http://rogers60.com/xmltutorial/2">
     <book id="_1001">
          <title>Building J2EE Applications With IBM WebSphere</title>
          <author>Nilsson and Mauget</author>
          <copyright>2003</copyright>
          <publisher>Wiley</publisher>
          <isbn>0471281573</isbn>
     </book>
     <book id="_3042">
          <title>Linux and Windows Interoperability Guide</title>
          <author>Bradford and Mauget</author>
          <copyright>2001</copyright>
          <publisher>Pearson Education</publisher>
          <isbn>0130324779</isbn>
     </book>
     <pub:book  id="_9593" image="edir.jpg">
          <title>e - Directories</title>
          <author>House,Hahn,Mauget,Daugherty</author>
          <copyright>2000</copyright>
          <publisher>Pearson Education</publisher>
          <isbn>0471281573</isbn>
     </pub:book>
</publications>

Các kiểu dữ liệu đơn giản có sẵn

Đặc tả kỹ thuật của Lược đồ XML của W3C áp đặt một tập hợp các kiểu dữ liệu có sẵn đơn giản. Bảng 6 liệt kê các kiểu đơn giản của Lược đồ XML có sẵn và các mô tả của chúng. Trường hợp thử nghiệm được sử dụng trong hướng dẫn này sử dụng không rõ kiểu chuỗi ký tự, trừ những nơi nó được chỉ định rõ trong các thuộc tính imageid của phần tử book.

Bảng 6. Các kiểu dữ liệu đơn giản của Lược đồ W3C có sẵn
KiểuMô tả
anyURIMã nhận dạng tài nguyên thống nhất.
base64BinaryGiá trị nhị phân được mã hóa bằng bộ mã base64.
booleantrue .. false hay 0 ..1
byteSố lượng có dấu >= 128 và < 127.
dateTimeMột giá trị thời gian và ngày tháng tuyệt đối.
ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENSCùng các ác định nghĩa như trong Bảng 4
integerSố nguyên có dấu.
languageCác giá trị "xml:lang" theo khuyến cáo của XML 1.0.
nameMột tên XML.
stringChuỗi Unicode.

Một lược đồ tài liệu dữ liệu cho một ứng dụng phức tạp có thể trở nên lớn và khó bảo trì trừ khi nó được cấu trúc lại thành một dạng được chuẩn hóa. Trong trường hợp của bạn, bạn đã khai báo một lược đồ mà nó có khai báo các phần tử và các thuộc tính tại điểm cấu trúc nơi bạn sử dụng mỗi thứ. Bạn trộn lẫn cấu trúc của tài liệu với các khai báo về các phần tử và các thuộc tính được sử dụng để xây dựng cấu trúc đó. Điều này có thể che lấp sự rõ ràng của lược đồ với một người đang cố gắng để hiểu hoặc bảo trì nó. Nó cũng làm giảm khả năng tái sử dụng các kiểu và làm cho khó khăn hơn để tìm ra một kiểu khi người bảo trì cần phải thay đổi nó.

Một URI khác với một URL như thế nào?

Một URI là một mã nhận dạng ID phổ biến duy nhất. Một URL là một nhãn xác định vị trí phổ biến duy nhất, được sử dụng để đánh địa chỉ cho một nguồn tài nguyên tại chỗ hay ở xa.

Bạn có thể sử dụng một URL như là một URI, vì nó là duy nhất. Một URI, nói chung, không phải luôn luôn là một URL, vì nó có thể không chỉ rõ một vị trí nguồn tài nguyên. Lược đồ XML sử dụng một URI để nói rõ một không gian tên. URI này có thể hoặc không thể hoạt động như là một URL, tham chiếu đến một tài liệu mô tả không gian tên.

Khó hiểu phải không? Có thể cho một ví dụ cụ thể không? URI của không gian tên trong hướng dẫn http://rogers60.com/xmltutorial/2 không phải là một tài nguyên Web (URL) trong thực tế, nhưng nó có thể là một URI phổ biến duy nhất, nếu phần cơ sở của nó, rogers60.com, là một tên DNS đã đăng ký mà bạn có thể kiểm soát.

Tại sao không tập trung hóa các khai báo kiểu tại một điểm và sau đó tham chiếu các kiểu đó trong một phần cấu trúc dữ liệu riêng biệt của lược đồ? Nếu bạn thực hiện điều này, bạn thậm chí có thể chia cắt một lược đồ lớn thành các tệp tin riêng biệt, tự giới hạn trong phần kiểu hoặc phần cấu trúc.

Hãy thử nó. Cấu trúc lại lược đồ để tách riêng khai báo khỏi cấu trúc, như vậy việc khai báo tất cả các phần tử nằm trong phần trên cùng của tài liệu, theo sau là các khai báo thuộc tính, tiếp theo đó là cấu trúc tài liệu. Phần cấu trúc tham chiếu đến một phần tử hoặc thuộc tính bằng cách sử dụng một thuộc tính tham chiếu (ref) với một giá trị tên của phần tử hoặc tên thuộc tính. Việc tham chiếu thuộc tính phải sử dụng tiền tố của không gian tên, bởi vì bạn đã cho tất cả các thuộc tính là không biết đến không gian tên (namespace-agnostic).

Cách bố trí lược đồ được chuẩn hóa này đôi khi làm cho một tài liệu rất lớn dễ đọc hơn, bởi vì mọi người có thể đọc các khai báo được tách khỏi cấu trúc ít dài dòng hơn. Ngoài ra, điều này khuyến khích tái sử dụng các mục.

Liệt kê 15 hiển thị lược đồ nhỏ trong dạng chuẩn hóa này. Nó thực tế dài hơn bản gốc, nhưng nó dễ dàng bảo trì hơn do sự tách rời khai báo khỏi cấu trúc và do khả năng khai báo một cái gì đó chỉ một lần thay vì nhiều lần.

Liệt kê 15. Lược đồ W3C được chuẩn hóa
<?xml version="1.0" encoding="UTF-8"?>6
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pub="http://rogers60.com/xmltutorial/2" 
    targetNamespace="http://rogers60.com/xmltutorial/2" 
    elementFormDefault="qualified" 
    attributeFormDefault="qualified">
   <!-- Simple elements -->
   <xs:element name="title"/>
   <xs:element name="author"/>
   <xs:element name="copyright"/>
   <xs:element name="publisher"/>
   <xs:element name="isbn"/>
   <!-- Attributes -->
   <xs:attribute name="id" type="xs:string"/>
   <xs:attribute name="image" type="xs:string"/>
   <!-- Complex elements -->
   <xs:element name="publications">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="book" maxOccurs="unbounded">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element ref="pub:title"/>
                     <xs:element ref="pub:author"/>
                     <xs:element ref="pub:copyright"/>
                     <xs:element ref="pub:publisher"/>
                     <xs:element ref="pub:isbn"/>
                  </xs:sequence>
                  <xs:attribute ref="pub:id" use="required"/>
                  <xs:attribute ref="pub:image" use="optional"/>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

Sau khi liên kết tài liệu thử nghiệm với lược đồ, nó vẫn còn xác nhận hợp lệ như trước, vì vậy tôi sẽ không lặp lại nó ở đây. Bây giờ hãy mở lược đồ trong XMLSpy và nhấn vào thẻ Schema/WSDL để biểu hiện sơ đồ, như được hiển thị trong Hình 7. Hãy lưu ý các biểu tượng kết nối cho các dãy, các nhãn có phân loại không gian tên và sự xếp chồng các phần tử pub:book.

Hình 7. Sơ đồ của Lược đồ XML của W3C
Hình 7. Sơ đồ của Lược đồ XML

Lược đồ cho thấy một lỗi không đáng kể. Bạn muốn cho phép một danh sách các publications rỗng, nhưng lưu ý rằng phải có ít nhất một pub:book. Một danh sách các publications rỗng không được xác nhận hợp lệ. Để kiểm tra các điều kiện ranh giới luôn là một việc tốt. Bạn có thể sửa chữa điều này bằng cách thêm một thuộc tính minOccurs đến phần tử đó:

 <xs:element name="book" maxOccurs="unbounded" minOccurs="0">

Một danh sách các publications rỗng bây giờ sẽ được xác nhận hợp lệ.

Lược đồ XML của W3C chứa các kiểu có sẵn đơn giản, nhưng một phần sự hấp dẫn của nó nằm ở chỗ nó có khả năng để ràng buộc các giá trị tới các kiểu đơn giản do người sử dụng định nghĩa với độ chi tiết cao hơn. Bạn sẽ tạo ra hai kiểu đơn giản -- một kiểu cho phần tử isbn một kiểu cho phần tử copyright Mỗi kiểu đều dựa trên xs:string, nhưng áp dụng các khuôn mẫu hạn chế cho chúng. Trước tiên, giải quyết định dạng của copyright. Quy định rằng nó luôn là một số có bốn chữ số. Trong khi có các cách tiếp cận thay thế khác cho việc hạn chế đơn giản này (ví dụ, một số thập phân có chiều dài đã xác định), bạn sẽ sử dụng một mẫu cho khuôn dạng "dddd" ở đây mỗi "d" là một chữ số thập phân:

 <xs:simpleType name="year">
  <xs:restriction base="xs:string">
   <xs:pattern value="\d\d\d\d"/>
  </xs:restriction>
 </xs:simpleType>

Tương tự như vậy, hãy hạn chế một số ISBN để có dạng "d-dddd-dddd-d" ở đây mỗi "d" cũng là một chữ số thập phân. Bạn biết đó không phải là khuôn dạng thực tế cuối cùng. ISBN gần đây đã thay đổi từ 10 chữ số lên 13 chữ số, bởi vì nó cạn hết kho số. Tuy nhiên, đây chỉ là một bài hướng dẫn và mẫu đó ăn khớp với các số ISBN có trong tài liệu thử nghiệm:

 <xs:simpleType name="isbn">
  <xs:restriction base="xs:string">
   <xs:pattern value="\d-\d\d\d\d-\d\d\d\d-\d"/>
  </xs:restriction>
 </xs:simpleType>

Hãy chèn hai đoạn XML này bên trên các khai báo phần tử và thuộc tính của lược đồ đã chuẩn hóa. Sau đó, bạn có thể tham khảo các kiểu mới ở bất cứ nơi nào bạn cần chúng bằng cách sử dụng một thuộc tính ref nhằm đến kiểu mới:

<xs:attribute ref="pub:id" use="required"/>
<xs:attribute ref="pub:image" use="optional"/>

Bạn sử dụng tiền tố không gian tên trong giá trị ref vì thuộc tính này tham khảo giá trị mặc định cho không có không gian tên, như đã định rõ trong lược đồ là attributeFormDefault="unqualified". Liệt kê 16 hiển thị phiên bản mới nhất của Lược đồ XML có sử dụng các kiểu đơn giản. Tôi sẽ không hiển thị lại liệt kê tài liệu XML ở đây, bởi vì nó không có gì thay đổi, trừ việc nhằm vào tên mới nhất của lược đồ.

Liệt kê 16. Lược đồ khai báo một kiểu tùy chỉnh
<?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pub="http://rogers60.com/xmltutorial/2" 
    targetNamespace="http://rogers60.com/xmltutorial/2" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
 <!-- Simple types -->
 <xs:simpleType name="isbn">
  <xs:restriction base="xs:string">
   <xs:pattern value="\d-\d\d\d\d-\d\d\d\d-\d"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="year">
  <xs:restriction base="xs:string">
   <xs:pattern value="\d\d\d\d"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- Simple elements -->
 <xs:element name="title" type="xs:string"/>
 <xs:element name="author" type="xs:string"/>
 <xs:element name="copyright" type="pub:year"/>
 <xs:element name="publisher" type="xs:string"/>
 <xs:element name="isbn" type="pub:isbn"/>
 <!-- Attributes -->
 <xs:attribute name="id" type="xs:string"/>
 <xs:attribute name="image" type="xs:string"/>
 <!-- Complex elements -->
 <xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
     <xs:complexType>
      <xs:sequence>
       <xs:element ref="pub:title"/>
       <xs:element ref="pub:author"/>
       <xs:element ref="pub:copyright"/>
       <xs:element ref="pub:publisher"/>
       <xs:element ref="pub:isbn"/>
      </xs:sequence>
      <xs:attribute ref="pub:id" use="required"/>
      <xs:attribute ref="pub:image" use="optional"/>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

Tài liệu thử nghiệm vẫn còn hợp lệ khi bạn kiểm tra nó bằng cách sử dụng XMLSpy. Bây giờ hãy gỡ bỏ dấu gạch ngang trong phần tử isbn đầu tiên và kiểm tra lại tính hợp lệ. Thao tác ấy sẽ làm hỏng việc xác nhận hợp lệ. Hình 8 cho thấy những gì xảy ra.

Hình 8. Làm hỏng việc xác nhận hợp lệ của một kiểu tùy chỉnh
Hình 8. Làm hỏng việc xác nhận hợp lệ của một kiểu tùy chỉnh

Bạn có thể sử dụng một kỹ thuật chia-để-trị để làm cho lược đồ của bạn dễ hiểu và dễ bảo trì hơn nữa. Vay mượn một kỹ thuật từ việc lập trình và chia cắt lược đồ thành các khai báo nằm trong các tệp tin riêng biệt. Đầu tiên, tạo ra một lược đồ chỉ ràng buộc khai báo các kiểu đơn giản, các phần tử và thuộc tính của lược đồ đã cấu trúc lại trước đó. Liệt kê 17 cho thấy làm như thế nào.

Liệt kê 17. Khai báo trong các tệp tin lược đồ riêng biệt
<?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pub="http://rogers60.com/xmltutorial/2" 
    targetNamespace="http://rogers60.com/xmltutorial/2" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
 <!-- Simple types -->
 <xs:simpleType name="isbn">
  <xs:restriction base="xs:string">
   <xs:pattern value="\d-\d\d\d\d-\d\d\d\d-\d"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:simpleType name="year">
  <xs:restriction base="xs:string">
   <xs:pattern value="\d\d\d\d"/>
  </xs:restriction>
 </xs:simpleType>
 <!-- Simple elements -->
 <xs:element name="title" type="xs:string"/>
 <xs:element name="author" type="xs:string"/>
 <xs:element name="copyright" type="pub:year"/>
 <xs:element name="publisher" type="xs:string"/>
 <xs:element name="isbn" type="pub:isbn"/>
 <!-- Attributes -->
 <xs:attribute name="id" type="xs:string"/>
 <xs:attribute name="image" type="xs:string"/>
</xs:schema>

Tiếp theo, hãy loại bỏ các mục khỏi một bản sao của lược đồ gốc, thay thế chúng bằng các đánh dấu sau đây:

<xs:include schemaLocation="publicationsRedefine8.xsd"/>

Việc này tạo ra lược đồ cấu trúc được hiển thị trong Liệt kê 18. Thuộc tính ref của nó tham chiếu đến lược đồ đã được bao gồm vào. Lưu ý mỗi tệp tin dễ đọc hơn như thế nào. Một lược đồ là về khai báo phần tử, thuộc tính và kiểu. Lược đồ khác là về việc sắp xếp những cái đó thành một cấu trúc tài liệu. Khi bạn thay đổi liên kết trong tệp tin XML thử nghiệm để trỏ đến publications8.xsd, tệp tin này được xác nhận hợp lệ một cách đúng đắn trong XMLSpy.

Liệt kê 18. Lược đồ W3C có cấu trúc
<?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pub="http://rogers60.com/xmltutorial/2" 
    targetNamespace="http://rogers60.com/xmltutorial/2" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified">
 <xs:include schemaLocation="publicationsRedefine8.xsd"/>
 <!-- Complex elements -->
 <xs:element name="publications">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
     <xs:complexType>
      <xs:sequence>
       <xs:element ref="pub:title"/>
       <xs:element ref="pub:author"/>
       <xs:element ref="pub:copyright"/>
       <xs:element ref="pub:publisher"/>
       <xs:element ref="pub:isbn"/>
      </xs:sequence>
      <xs:attribute ref="pub:id" use="required"/>
      <xs:attribute ref="pub:image" use="optional"/>
     </xs:complexType>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>

Bạn có thể sử dụng khả năng của Lược đồ XML cho các tệp tin bên ngoài xs:include, xs:redefine hay xs:import để nhận được các kiểu mới thông qua các phần tử xs:extension hay xs:restriction. Điều này cần có một hướng dẫn riêng đầy đủ của chính nó. Hãy đọc về nó trong Phần 0 của Lược đồ XML của W3C dựa trên Web: Ấn bản vỡ lòng thứ hai (Web-based "W3C XML Schema Part 0: Primer Second Edition") được liệt kê trong phần Tài nguyên.


Quyết định giữa Lược đồ DTD và W3C XML

Tôi đã đề cập đến các khía cạnh của cả DTD lẫn lược đồ XML W3C. Bây giờ tôi sẽ so sánh và làm rõ sự tương phản giữa chúng.

Bảng 7 liệt kê các đặc tính xác nhận tính hợp lệ cơ bản của các DTD. Có ít độ chi tiết trong việc kiểm soát định dạng và các kiểu giá trị phần tử và giá trị thuộc tính. Điều này thường là đủ cho các tài liệu phong cách trần thuật. Thực vậy, một số lượng khủng khiếp các DTD tiêu chuẩn có sẵn cho nhiều tài liệu trao đổi kiểu trần thuật định hướng công nghiệp khác nhau.

Bảng 7. Xác nhận tính hợp lệ với DTD
DTD validation restraints
Phần tử lồng nhau
Số lần xuất hiện của phần tử
Các thuộc tính được phép của một phần tử
Các kiểu thuộc tính và các giá trị mặc định

Các tài liệu giống như bản ghi dữ liệu làm nên một khu vực khác của các ứng dụng XML. Việc tuần tự hóa đối tượng thành XML và từ XML đòi hỏi đặc tả nội dung chính xác. Đây là nơi mà Lược đồ XML của W3C tỏa sáng. Bảng 8 chứa một sự mô tả mức cao về các đặc tính ràng buộc của nó. Lưu ý rằng Lược đồ XML cho thấy một số sự chồng chéo với DTD, nhưng lược đồ XML có thể kết hợp để tạo ra các kiểu dữ liệu mới cho một quy tắc ngữ pháp. Các đặc tính giống nhau có thể gây nhầm lẫn. Lược đồ XML cho phép kiểm soát chính xác hơn về các mục ví dụ như số lần xuất hiện của phần tử. Chẳng hạn, bạn có thể quy định rằng danh sách xuất bản phẩm của bạn gồm có 10 và đúng 10 cuốn sách mà thôi. Điều này là không thể được với các DTD.

Bảng 8. Các đặc tính của Lược đồ W3C
Các đặc tính của Lược đồ XML của W3C
Các ràng buộc về số lần xuất hiện của phần tử
Các khai báo thuộc tính và phần tử được phân loại theo không gian tên
Các kiểu dữ liệu đơn giản và phức tạp
Sự sao chép và thừa kế kiểu

Nghe như có vẻ Lược đồ XML luôn luôn lôi kéo DTD trong định nghĩa các ngữ pháp hướng-dữ liệu mới, nhưng DTD có thể làm một việc tốt hơn so với lược đồ XML. Hãy nhớ về các thực thể? Đó là các khai báo giống như macro, có thể thay thế các mục có tên trong một tài liệu. Bạn có thể định nghĩa chúng một cách dễ dàng trong một DTD. Chức năng đó khó có thể lặp lại trong lược đồ XML. Các thực thể phổ biến được dùng rộng rãi trong các ngữ pháp trần thuật, ở đây việc sử dụng DTD vẫn còn khó có thể thay đổi được.

Lược đồ XML là một ứng dụng khác của XML. Trong thực tế, nó bị Lược đồ XML của riêng nó ràng buộc. DTD không phải là XML, mà đúng hơn là một ngôn ngữ đánh dấu riêng. Một số người coi điều này là một bất lợi của các DTD. Những người khác chỉ ra rằng Lược đồ XML là dài dòng và có thể khó đọc. Bạn đã thấy rằng việc chuẩn hóa một lược đồ thành các phần có làm giảm nhẹ điều này một chút. Các lược đồ có thể khó viết từ đầu hơn các DTD. Các công cụ hiện đại cung cấp sự trợ giúp gợi ý khi bạn gõ vào, vì thế có chút gì đó chống lại lý lẽ trên.

Câu nói "Luôn luôn thiết kế với lược đồ" không có ý nghĩa. Cuối cùng thì bạn phải quyết định dựa trên ứng dụng của bạn, nhưng bây giờ bạn có một vài lý lẽ ở cả hai phía sẽ hướng dẫn bạn khi chọn lựa.


Kết luận

Tóm tắt

Phần 1 của loạt này trình bày kiến trúc XML. Hướng dẫn thứ hai này thảo luận về các đặc điểm của dữ liệu và tài liệu trần thuật. Nó đã tiếp tục mô hình hóa một nghiên cứu trường hợp đơn giản trong XML, đồng thời cho thấy vài lần sử dụng lặp đi lặp lại một ngữ pháp. Phần 3 cho bạn thấy làm thế nào để xử lý XML trong một ứng dụng. Phần 4 tập trung vào việc biến đổi các tài liệu XML thành các tài liệu mới và Phần 5 giải thích việc thử nghiệm và tinh chỉnh XML và các công nghệ có liên quan phổ biến.

Nếu bạn nghiên cứu toàn bộ loạt bài này, bạn có đầy đủ nền tảng giúp bạn chuẩn bị kiến thức cho Bài kiểm tra 142, để đạt được chứng chỉ XML và các công nghệ liên quan-Nhà phát triển giải pháp có chứng nhận của IBM.

Tài nguyên

Học tập

  • XML on developerWorks: Nhận các tài nguyên mà bạn cần để nâng cao các kỹ năng XML của bạn với các bài viết kỹ thuật và các lời khuyên, các hướng dẫn, các tiêu chuẩn và các Sách Đỏ của IBM.
  • Trang New to XML (developerWorks): Duyệt qua tổng quan này nếu bạn muốn tìm hiểu về XML nhưng không biết bắt đầu từ đâu.
  • IBM XML 1.1 certification: Trở thành một nhà phát triển có Chứng chỉ IBM về XML 1.1 và các công nghệ liên quan.
  • Introduction to XML tutorial (Doug Tidwell, developerWorks, 08.2002): Tìm hiểu XML là gì, tại sao nó đã được phát triển và nó đang có ảnh hưởng lớn đối với tương lại của thương mại điện tử như thế nào. Bạn cũng sẽ làm quen với một loạt các giao diện và các tiêu chuẩn lập trình XML quan trọng.
  • XML Matters: Comparing W3C XML Schemas and Document Type Definitions (DTDs) (David Mertz, developerWorks, 03.2001): So sánh các lược đồ và các DTD và làm sáng tỏ chuyện gì sắp xảy ra trong thế giới lược đồ XML.
  • Validating XML tutorial, by (Nicholas Chase. developerWorks, 08.2003): Tìm hiểu xác nhận hợp lệ là gì và làm thế nào để kiểm tra hợp lệ một tài liệu với một Document Type Definition (DTD-Định nghĩa kiểu tài liệu) hoặc tài liệu lược đồ XML.
  • XML in a Nutshell, 3rd Edition (Elliotte Rusty Harold and W. Scott Means, O'Reilly Media, 2004, ISBN: 0596007647): Xem phần tham khảo XML toàn diện này, gồm tất cả mọi thứ từ các quy tắc cú pháp cơ bản, DTD và việc tạo lược đồ XM, các phép chuyển đổi XSLT , xử lý các API , XML 1.1, cộng với SAX2 và DOM Mức 3.
  • XML Schema Part 0: Primer Second Edition Đọc về lược đồ XML và làm thế nào để tạo các lược đồ bằng cách sử dụng ngôn ngữ Lược đồ XML.
  • W3C Markup Validation Service: Với dịch vụ miễn phí này, hãy kiểm tra các tài liệu Web theo các định dạng như HTML và XHTML về mức tuân thủ các khuyến cáo W3C và các tiêu chuẩn khác.
  • XHTML: Tìm hiểu thêm về Extensible HyperText Markup Language (XHTML- Ngôn ngữ đánh dấu siêu văn bản mở rộng) trên trang Web Wikipedia.
  • VoiceXML (VXML): Đọc thêm thông tin về định dạng XML này dành cho đối thoại bằng tiếng nói tương tác giữa con người và các máy tính trên trang Web Wikipedia.
  • Speech Synthesis Markup Language (SSML): Tìm hiểu thêm về ngôn ngữ đánh dấu dựa trên XML này cho các ứng dụng tổng hợp tiếng nói trên trang Web Wikipedia.
  • developerWorks technical events and webcasts: Theo sát công nghệ trong các phiên này.

Lấy sản phẩm và công nghệ

  • IBM product evaluation versions: Các phiên bản đánh giá sản phẩm của IBM: Tải về và thử các công cụ phát triển ứng dụng và sản phẩm phần mềm trung gian từ DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
  • Trial: Rational Application Developer for WebSphere Software V6.0: Tải về và khám phá một phiên bản dùng thử miễn phí, hỗ trợ môi trường đang chạy của nhiều nhà cung cấp và được các nền tảng mã nguồn mở Eclipse hỗ trợ.
  • Altova XMLSpy® 2006 Home Edition: Tải về một trình soạn thảo XML mức nhập môn và công cụ phát triển để thiết kế và chỉnh sửa các ứng dụng dựa trên XML.
  • Eclipse SDK: Tải về Eclipse SDK, sau đó duyệt qua để tìm kiếm các công cụ và các trình cắm thêm có ích.
  • XMLBuddy™ plugin for the Eclipse SDK: Soạn thảo, xác nhận tính hợp lệ, định dạng và nhiều hơn nữa với XMLBuddy. Nó hỗ trợ XML, DTD, lược đồ XML, RELAX NG, cú pháp nén RELAX NG và XSLT.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=424076
ArticleTitle=Chuẩn bị thi chứng chỉ XML và các công nghệ có liên quan, Phần 2: Mô hình hóa thông tin
publish-date=08282009