Search…

Cơ Bản Về XML

23/09/20207 min read
Giới thiệu XML. Cách biểu diễn dữ liệu trong XML, các lỗi cú pháp thường gặp. Chỉ thị xử lý, chú thích, entity và kiểu dữ liệu trong XML.

HTML là gì?

HTML (HyperText Markup Language) là một ngôn ngữ đánh dấu.

Khi nói đến ngôn ngữ đánh dấu, thường nghĩ ngay đến ngôn ngữ HTML. HTML là một ngôn ngữ đánh dấu rất thành công thể hiện ở mức độ thông dụng của nó, có thể dễ dàng tìm thấy một văn bản HTML ở bất cứ nơi nào. Vậy tại sao đã tồn tại một ngôn ngữ đánh dấu thành công như HTML mà XML vẫn ra đời?

HTML tuy là một ngôn ngữ đánh dấu rất thành công nhưng vẫn không thể phủ nhận các mặt còn hạn chế của nó. HTML có một bộ dữ liệu bao gồm hơn 400 thẻ (tag) được xây dựng và định nghĩa sẵn, lập trình viên khi sử dụng phải tuân thủ theo các thẻ được xây dựng sẵn này, việc nhớ tên và cách sử dụng hơn 400 thẻ này đối với những người mới bắt đầu hoặc người sử dụng không chuyên là một vấn đề rất lớn.

Thứ hai các thẻ trong HTML chỉ đưa ra các quy định và trình bày văn bản mà không mô tả được dữ liệu bên trong và cuối cùng tất cả các thẻ trong HTML đều được đặt tên bằng các từ tiếng Anh hoặc các từ viết tắt có nguồn gốc bằng tiếng Anh, đây cũng là một trở ngại khá lớn cho những người sử dụng không chuyên tiếng Anh.

XML là gì?

XML (Extensible Markup Language) là một ngôn ngữ đánh dấu mở rộng. 

Để khắc phục một số khuyết điểm trên của HTML năm 1996 tổ chức W3C đã thiết kế ra XML. XML là một ngôn ngữ đánh dấu được xây dựng dựa trên SGML. Đúng với cái tên của nó, ngôn ngữ không định nghĩa trước các thẻ, các thẻ trong tài liệu XML được tạo ra bởi người dùng theo những quy ước của họ, điều này làm cho ngôn ngữ XML linh hoạt và không bị giới hạn bởi số lượng và ý nghĩa các thẻ như HTML. Mục đích của ngôn ngữ XML hướng đến việc mô tả dữ liệu chứ không chỉ đơn thuần là hiển thị dữ liệu như HTML.

Một tài liệu XML đơn giản:

<?xml version="1.0" encoding="UTF-8"?>
<programmer>
	<university>HUFLIT</university>
	<job>Programming</job>
	<full_name last_name='Dinh' middle_name='Minh' first_name='Hoa'/>
	<id>11dH110005</id>
</programmer>

Qua ví dụ trên ta có thấy những nhược điểm của HTML lại trở thành ưu điểm của ngôn ngữ XML, các thẻ được định nghĩa bởi quy ước của người viết, sử dụng tiếng Việt để đặt tên các thẻ, quan trọng nhất là khả năng mô tả dữ liệu của tài liệu trên, dựa vào XML ta có thể dễ dàng mô tả thông tin của một sinh viên.

Biểu diễn dữ liệu trong một tài liệu XML

Tạo một tài liệu XML well-formed

XML well-formed là gì?

Tài liệu XML được xem là đúng cú pháp khi thỏa tất cả những điều kiện sau:

  • Chỉ được có duy nhất 1 root element, nó sẽ chứa tất cả các element khác của tài liệu.
  • Mỗi thẻ mở phải có 1 thẻ đóng tương ứng, thẻ mở và thẻ đóng phải có tên giống nhau hoàn toàn, kể cả chữ hoa và chữ thường.
  • Khi lồng các thẻ XML, phải chú ý thứ tự đóng các thẻ, thẻ nào mở sau phải đóng trước.
  • Tên của các thẻ được đặt theo ý người dùng, nhưng phải tuân thủ một số quy tắc (giống với quy tắc đặt tên biến trong lập trình) và không được bắt đầu bằng "xml".
  • Các thuộc tính của thẻ được đặt theo cú pháp: tên_thuộc_tính=‘giá trị’, có thể thay nháy đơn ' thành nháy kép ".

Các lỗi cú pháp thường gặp trong tài liệu XML

<staff>
	<full_name> Hoa Dinh</Full_name>
	<day_of_birth>Nov, 4 1990</day_of_birth>
	<xml_department title=leader>Programmer</xml_department>
	<contact>
		<address>Bao Loc, Dalat</address>
		
		<phone>+84-0123456789
	</contact>
		</phone>
</staff>

<staff>
	<full_name>Ngoc Tran</full_name>
	<day_of_birth>Jun, 5 1995</day_of_birth>
	......
</staff>
  • Không thể biết đâu là root element, để khắc phục lỗi này, có thể bỏ tất cả vào trong 1 cặp thẻ như <staff_list> </staff_list>, khi đó tài liệu trên sẽ có dạng như sau:
<staff_list>
	<staff>
		......
	</staff>

	<staff>
		......
	</staff>
</staff_list>
  • title không được để trong 1 cặp nháy đơn hoặc nháy kép <xml_department title=leader>Programmer</xml_department>. Nhưng lỗi này thường rất khó xuất hiện vì hiện nay các trình soạn thảo thông minh đã tự thêm cặp nháy đơn (kép). Để sửa lỗi trên chỉ cần thêm nháy đơn hoặc nháy kép vào sẽ được dòng như sau <xml_department title="leader">Programmer</xml_department>.
  • Ở thẻ (tag) full_name đầu tiên, chữ f ở thẻ mở và thẻ đóng mặc dù chỉ sai lệch có một ít <full_name>Hoa Dinh</Full_name>, 1 viết hoa và 1 không, tuy nhiên trong tài liệu XML không chấp nhận lỗi này, tên thẻ mở và đóng phải giống nhau tuyệt đối. Phải sửa lại như sau <full_name>Hoa Dinh</full_name>.
  • Lỗi thứ tư xuất hiện trong tài liệu XML này là các thẻ chồng chéo lên nhau, đóng mở không theo 1 thứ tự (Xem xét từ dòng số 5 cho đến dòng số 10), việc đóng mở tag có dạng như sau <contact><phone></contact></phone>, nguyên tắc là thẻ phone đã mở trong thẻ contact thì phải được đóng trong thẻ contact. Sau khi sửa lại sẽ được tài liệu như sau <contact><phone></phone></contact>.
<contact>
	<address>Bao Loc, Dalat</address>
			
	<phone>+84-0123456789</phone>
</contact>

Các trình soạn thảo thông minh thường tự động thêm thẻ đóng để tránh lỗi này, nhưng trong 1 số trường hợp tự đóng thẻ, thứ tự các thẻ đóng để sai có thể làm hư cấu trúc của 1 tài liệu XML.

Chỉ thị xử lý và chú thích trong tài liệu XML

Thường có 1 dòng khai báo như sau trên đầu mỗi tài liệu XML.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Phần này được gọi là chỉ thị xử lý (Processing Instructions). Chỉ thị xử lý luôn được đặt trong cặp thẻ <? ?>, nó cung cấp cho ứng dụng xử lý tài liệu XML 1 số thông tin cơ bản như:

  • Phiên bản đặc tả XML.
  • Loại mã hóa được sử dụng trong tài liệu.
  • Thuộc tính standalone cho biết tài liệu XML này có phụ thuộc vào 1 tài liệu nào khác nữa không hay nó vẫn mang đủ ý nghĩa khi đứng 1 mình.

Do các thẻ XML được định nghĩa theo những quy ước của người dùng, đôi lúc người tạo ra tài liệu XML cần phải chú thích lại để khi đọc lại có thể hiểu được ý nghĩa của thẻ đó. Chú thích trong tài liệu XML được đặt trong cặp thẻ <!--  -->.

Entity

Do các ký tự đặc biệt như "", <>, '', đã được dùng để đặc tả các thẻ và thuộc tính, để tránh nhầm lẫn tài liệu XML không cho phép người dùng sử dụng trực tiếp các ký tự này mà sử dụng các đối tượng khác để thay thế.

ENTITY OUTPUT
&lt;
&gt;
&apos; '
&quot; "
&amp; &

Kiểu dữ liệu

Dữ liệu trong tài liệu XML được nhận dạng dưới dạng chuỗi ký tự và được chia làm 2 loại: PCDATA và CDATA.        

  • PCDATA (Parsed Character Data) dữ liệu này sẽ được đọc và phân tích bởi các ứng dụng phân tích XML, PCDATA không được chứa các ký tự đặc biệt để tránh việc các ứng dụng phân tích nhầm lẫn với các thẻ. Do đó trong dữ liệu PCDATA phải sử dụng các entity thay thế ký tự đặc biệt.
  • CDATA (Character Data) dữ liệu này chỉ bao gồm nội dung, các ứng dụng phân tích XML sẽ không phân tích và giữ nguyên định dạng cho các dữ liệu kiểu này. Dữ liệu CDATA được đặt trong thẻ <![CDATA[…….]]>. Điều này rất quan trọng, khi nội dung trong tài liệu là 1 đoạn HTML hoặc là 1 tài liệu HTML khác sẽ thấy rất rõ ứng dụng của kiểu dữ liệu này trong giải quyết RSS.
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024