2. Các quy tắc văn bản XML

Không thể tìm thấy URL thông số tiện ích

Tổng quan: Các quy tắc văn bản XML

Nếu bạn đã xem xét những văn bản HTML, bạn đã quen thuộc với những khái niệm cơ bản khi sử dụng các thẻ để đánh dấu văn bản. Phần này bàn về sự khác biệt giữa văn bản HTML và văn bản XML. Nó sẽ kiểm tra những nguyên tắc cơ bản của văn bản XML, và bàn về thuật ngữ được dùng để miêu tả chúng.

Một điểm quan trọng về văn bản XML: Chi tiết kỹ thuật XML đòi hỏi một trình kiểm ngữ (parser) để từ chối bất cứ văn bản XML nào không theo những nguyên tắc cơ bản. Hầu hết những bộ kiểm ngữ HTML sẽ chấp nhận sự đánh dấu luộm thuộm, nhằm đoán biết điều gì mà tác giả văn bản đang đề cập đến. Để tránh sự bừa bộn, lỏng lẻo này, những người sáng tạo XML quyết định thực hiện kết cấu văn bản ngay khi bắt đầu.

(Nhân đây, nếu bạn vẫn chưa quen với từ bộ kiểm ngữ đó là một đoạn mã nhằm đọc và hiểu nội dung văn bản.)

Những văn bản không hợp lệ, hợp lệ, và đúng ngữ pháp.

Có ba loại văn bản XML:

  • Văn bản không hợp lệ không theo nguyên tắc cú pháp được quy định bởi đặc tính kỹ thuật XML. Nếu nhà phát triển đã định nghĩa những nguyên tắc cho những gì tài liệu có thể chứa đựng trong một DTD hoặc lược đồ, và văn bản không theo những nguyên tắc đó, văn bản đó cũng không hợp lệ. (Xem xác định nội dung văn bản giới thiệu chính xác DTDs và lược đồ cho văn bản XML.)
  • Văn bản hợp lệ tuân theo cả hai nguyên tắc, nguyên tắc cú pháp XML và nguyên tắc quy định trong DTD hoặc lược đồ.
  • Văn bản chuẩn tuân theo quy tắc cú pháp XML nhưng không có DTD hoặc lược đồ.

Phần tử gốc

Một văn bản XML phải được chứa trong một phần tử tố đơn. Phần tử đơn đó được gọi là phần tử gốc, và nó chứa tất cả các từ ngữ và bất cứ phần tử nào trong văn bản. Trong ví dụ dưới đây, văn bản XML được chứa đựng trong một phần tử đơn <greeting>. Chú ý văn bản này có một chú thích nằm ngoài phần tử gốc, điều này hoàn toàn hợp lệ.

<?xml version="1.0"?>
<!-- A well-formed document -->
<greeting>
  Hello, World!
</greeting>
          

Đây là một văn bản không chứa phần tử gốc đơn:

<?xml version="1.0"?>
<!-- An invalid document -->
<greeting>
  Hello, World!
</greeting>
<greeting>
  Hola, el Mundo!
</greeting>
          

Bộ kiểm ngữ XML được yêu cầu từ chối văn bản này, bất kể thông tin nó chứa là gì.

Những phần tử không thể đan chéo.

Các phần tử XML không thể đan chéo. Đây là vài đánh dấu không hợp lệ:

<!-- NOT legal XML markup -->            
<p>
  <b>I <i>really 
  love</b> XML.
  </i>
</p>
          

Nếu bạn bắt đầu một phần tử <i> trong một phần tử <b>, bạn cũng phải kết thúc nó ở đó. Nếu bạn muốn các dòng chữ XML là chữ nghiêng, bạn cần bổ sung một phần tử thứ hai <i> để sửa lại đánh dấu:

<!-- legal XML markup -->
<p>
  <b>I <i>really 
  love</i></b>
  <i>XML.</i>
</p>
          

Bộ kiểm ngữ XML sẽ chỉ chấp nhận đánh dấu này, trong khi bộ kiểm ngữ HTML chấp nhận cả hai.

Thẻ kết thúc là cần thiết

Bạn không thể bỏ một thẻ kết thúc nào. Trong ví dụ đầu tiên dưới đây, đánh dấu không hợp lệ vì không có thẻ kết thúc đoạn (</p>). Trong khi HTML (vài trường hợp trong SGML) đều chấp nhận được thì điều này lại bị bộ kiểm ngữ XML từ chối.

<!-- NOT legal XML markup -->
<p>Yada yada yada...
<p>Yada yada yada...
<p>...
          

Nếu một phần tử không chứa đánh dấu nào thì nó được gọi là phần tử rỗng; dấu ngắt HTML (<br>) và hình ảnh (img>) là hai phần tử ví dụ. Trong các phần tử rỗng ở của văn bản XML, bạn có thể đặt một gạch chéo đóng trong thẻ bắt đầu. Hai phần tử dấu ngắt và hai phần tử hình ảnh dưới có nghĩa tương tự với bộ kiểm ngữ XML:

<!-- Hai phần tử ngắt tương đương -->
<br></br>
<br />

<!-- Hai phần tử ngắt tương đương -->
<img src="../img/c.gif"></img>
<img src="../img/c.gif" />
          

Các phần tử là phân biệt chữ hoa/chữ thường.

Các phần tử XML là phân biệt chữ hoa/chữ thường. Trong HTML, <h1> <H1> đều giống nhau; trong XML, thì lại không thế. Nếu bạn kết thúc một phần tử <h1> bằng một thẻ </H1>, sẽ bị mắc lỗi. Trong ví dụ dưới đây, tiêu đề phía trên là không hợp lệ, còn tiêu đề dưới thì chính xác.

<!-- đánh dấu XML KHÔNG hợp lệ -->
<h1>phần tử là phân biệt chữ hoa/chữ thường</H1>

<!-- đánh dấu XML hợp lệ -->
<h1>phần tử là phân biệt chữ hoa/chữ thường</h1>
          

Thuộc tính phải nằm trong dấu trích dẫn

Có hai nguyên tắc về các thuộc tính trong văn bản XML:

  • Thuộc tính phải có giá trị
  • Những giá trị đó phải được đặt trong dấu trích dẫn (" hoặc ')

So sánh hai ví dụ dưới đây. Đánh dấu phía trên là hợp lệ trong HTML, nhưng không hợp lệ trong XML. Để làm điều tương tự trong XML, bạn phải cho thêm thuộc tính một giá trị, và đặt nó trong dấu trích dẫn.

<!-- NOT legal XML markup -->
<ol compact>

<!-- legal XML markup -->
<ol compact="yes">
          

Bạn có thể dùng dấu trích dẫn đơn hoặc dấu kép, miễn là nó phù hợp.

Nếu giá trị của thuộc tính đã chứa dấu trích dẫn đơn hoặc kép, sẽ phải dùng loại kia để đặt giá trị vào trong đó (như là tên="Doug's car"), hoặc dùng kí tự &quot; để đặt dấu ngoặc kép và &apos; để đặt dấu đơn. Một kí tự là một biểu tượng, ví dụ &quot;, mà bộ kiểm ngữ XML sẽ thay thế với từ khác, ví dụ ".

Khai báo XML

Hầu hết các văn bản XML đều bắt đầu với một khai báo XML thứ sẽ đưa ra cho bộ kiểm ngữ những thông tin cơ bản có trong văn bản. Khai báo XML có thể có, nhưng không bắt buộc. Nếu có, nó phải là thứ đầu tiên trong văn bản.

Tuyên bố có thể chứa tới ba cặp giá trị-tên (nhiều người gọi đó là những thuộc tính, dù thực chất về kỹ thuật thì không phải vậy). Phiên bản là phiên bản XML được sử dụng; giá trị lúc này phải là 1.0. encoding là chỉ bảng mã chữ cái được sử dụng trong văn bản này, ISO-8859-1. Chữ cái tham khảo trong khai báo trên bao gồm những chữ cái rất phổ biến trong hầu hết các ngôn ngữ Tây Âu. Nếu không có encoding nào được chỉ ra, bộ kiểm ngữ XML sẽ cho là những chữ cái trong bộ UTF-8, một tiêu chuẩn Unicode phù hợp với từng chữ cái và chữ tượng hình của các ngôn ngữ trên thế giới.

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
          

Cuối cùng, standalone, có thể là hoặc không, xác định tài liệu này có thể được xử lý cùng với hay không với bất cứ tập tin nào khác. Chẳng hạn, nếu văn bản XML không tham khảo các tập tin khác, bạn nên chỉ rõ standalone="yes". Nếu văn bản XML tham khảo những tập tin khác mà mô tả nội dung văn bản, bạn nên chỉ rõ standalone="no". Bởi vì standalone="no" là một mặc định, bạn sẽ hiếm khi thấy standalone trong các tuyên bố XML.

Một số chú ý khác trong văn bản XML

Có một số điều cần biết khác trong một văn bản XML:

  • Chú thích: Các chú thích có thể xuất hiện bất cứ đâu trong văn bản; thậm chí chúng còn có thể xuất hiện ngay sau phần tử gốc. Một chú thích bắt đầu bằng <!-- và kết thúc bằng -->. Một chú thích không thế chứa một dấu nối kép ( -- ) trừ khi là kết thúc; với ngoại lệ này, một chú thích có thể chứa bất cứ thứ gì. Quan trọng hơn, nếu đánh dấu trong một chú thích sẽ không có giá trị; nếu bạn muốn bỏ đi một đoạn lớn trong văn bản XML, đơn giản là hãy đặt nó vào bên trong một chú thích. (Để khôi phục lại, chỉ cần bỏ đi các thẻ chú thích.) Đây là vài thẻ đánh dấu có chứa một chú thích:
<!-- Đây là một PI cho Cocoon: -->
<?cocoon-process type="sql"?>
          

  • Hướng dẫn xử lý: Một hướng dẫn xử lý được đánh dấu cho một đoạn mã riêng biệt. Trong ví dụ trên, có một hướng dẫn xử lý (đôi lúc còn gọi là PI) cho Cocoon, một cơ cấu xử lý XML của Tổ chức phần mềm Apache. Khi Cocoon xử lý một văn bản XML, nó sẽ tìm các hướng dẫn được bắt đầu bằng cocoon-quy trình, sau đó xử lý văn bản XML một cách phù hợp. Trong ví dụ này, type="sql" thuộc tính chỉ cho Cocoon biết văn bản XML chứa một lệnh SQL.
<!-- Đây là một thực thể: -->
<!ENTITY dw "developerWorks">
          

  • Thực thể: Ví dụ trên xác định một thực thể cho văn bản. Ở mọi nơi, bộ xử lý XML sẽ tìm chuỗi &dw;, và thay thế thực thể bằng chuỗi developerWorks. Kỹ thuật XML còn xác định năm thực thể có thể thay thế nhiều ký tự đặc biệt. Các thực thể đó là:
    • &lt; cho kí hiệu nhỏ hơn
    • &gt; cho kí hiệu lớn hơn
    • &quot; cho dấu trích dẫn kép
    • &apos; cho dấu trích dẫn đơn (hoặc dấu lược)
    • &amp; cho một ký hiệu và (&)

Không gian tên (Namespaces)

Sức mạnh XML nằm ở chính tính linh hoạt của nó, điều này bạn, tôi và hàng triệu người khác dễ dàng nhận thấy trong các thẻ miêu tả dữ liệu của XML. Bạn còn nhớ văn bản XML mẫu về tên người và địa chỉ không? Văn bản đó bao gồm phần tử <title> của chủ đề người, một lựa chọn hợp lý cho một tên phần tử. Nếu bạn điều hành một tủ sách trực tuyến, bạn có thể tạo nên một phần tử <title> cho chủ đề của cuốn sách. Nếu bạn điều hành một tiệm cầm đồ trực tuyến, bạn có thể tạo nên một phần tử <title> cho từng mục tài sản. Chúng đều là những lựa chọn hợp lý, nhưng chúng đều có những phần tử có tên giống nhau. Bạn sẽ nói gì nếu một phần tử <title> đề cập tới một người, một quyển sách, một tài sản? Với không gian tên - namespaces.

Để sử dụng một không gian tên, bạn xác định một tiền tố xmlns và đặt chúng trong một chuỗi riêng biệt. Đây là cách bạn có thể xác định tiền tố xmlns cho ba phần tử <title>:

<?xml version="1.0"?>
<customer_summary
  xmlns:addr="http://www.xyz.com/addresses/"
  xmlns:books="http://www.zyx.com/books/"
  xmlns:mortgage="http://www.yyz.com/title/"
>
... <addr:name><title>Mrs.</title> ... </addr:name> ...
... <books:title>Lord of the Rings</books:title> ...
... <mortgage:title>NC2948-388-1983</mortgage:title> ...
          

Trong ví dụ này, ba tiền tố không gian tên là addr, book, và mortgate. Chú ý rằng xác định một không gian tên cho một phần tử riêng biệt có nghĩa là tất cả các phần tử con của nó đều thuộc về cùng một không gian tên như nhau. Phần tử <title> đầu tiên thuộc về không gian tên addr vì phần tử mẹ của nó, <addr:Name>, như vậy.

Điểm cuối cùng: Chuỗi trong xác định không gian tên chỉ là một chuỗi. Đúng thế, những chuỗi này trông giống như các URL, nhưng lại không phải. Bạn có thể xác định xmlns:addr="mike". Điều quan trọng duy nhất của chuỗi không gian tên là nó chính là duy nhất; điều này giải thích tại sao hầu hết các xác định không gian tên trông giống như các URL. Bộ kiểm ngữ XML không tìm một DTD hay một lược đồ ở http://www.zyx.com/books/, mà nó sẽ sử dụng các ký tự chữ cái như một chuỗi. Điều này có vẻ phức tạp, nhưng đó chính là cách các không gian tên vận hành.

2 của 7 | Trang trước | Trang sau


Comments