Những thành phần của một tài liệu XML

Một phần của tài liệu TÌM HIỂU HTML và CÔNG NGHỆ XML xây DỰNG TRÌNH BIÊN DỊCH HTML SANG XML (Trang 29)

Khai báo: Mỗi một tài liệu XML có một chỉ thị khai báo

<? xml version="1.0"?>

Định nghĩa tài liệu XML tuân theo chuẩn của W3C và đây là phiên bản “1.0”

Chú thích:được khai báo như sau: <!-- chú thích -- >

Phần tử (Elements): Một tài liệu XML được cấu thành từ những phần tử. Một phần tử có thẻ mở và thẻđóng. Giữa thẻ mở và thẻđóng là nội dung của phần tửđó. Phần tử

có thể chứa dữ liệu hoặc có thể lồng vào một phần tử khác. Phần tử gốc (root): Trong tài liệu XML, chỉ có một phần tử gốc, và phần tử này sẽ chứa tất cả những phần tử của tài liệu XML do chúng ta tạo ra. Theo ví dụ trên, ta thấy chỉ có một phần tử “Catalog” .Thuộc tính (Attributes): Nhưđã trình bày ở trên, một phần tử có thể chứa dữ liệu hoặc chứa phần tử khác hoặc cả hai. Bên cạnh đó, phần tử có thể rỗng, khi đó nó có thể chứa thuộc tính. Một thuộc tính chỉ là một sự lựa

Phần tử gốc (root): Trong tài liệu XML, chỉ có một phần tử gốc, và phần tử này sẽ

chứa tất cả những phần tử của tài liệu XML do chúng ta tạo ra. Theo ví dụ trên, ta thấy chỉ có một phần tử “Catalog” .

Thuộc tính (Attributes): Nhưđã trình bày ở trên, một phần tử có thể chứa dữ liệu hoặc chứa phần tử khác hoặc cả hai. Bên cạnh đó, phần tử có thể rỗng, khi đó nó có thể

chứa thuộc tính. Một thuộc tính chỉ là một sự lựa chọn để gắn dữ liệu đến phần tử. Một thuộc tính đặt trong thẻ mở của phần tử và chỉ ra giá trị của nó bằng cách sử dụng cặp “name=value”.

<?xml version="1.0"?> <Catalog>

<Product Type="Spinning Reel" SupplierId="5"> <ProductID>F10</ProductID>

<ProductName>Shimano Calcutta </ProductName> <ListPrice>47.76</ListPrice>

</Product>

<Product Type ="Baitcasting Reel" SupplierId="3"> <ProductID>F20</ProductID> <ProductName>Bantam Lexica</ProductName> <ListPrice>49.99</ListPrice> </Product> </Catalog> 2.2.7. Một tài liệu XML hợp lệ

Như chúng ta đã đề cập ở trên, một tài liệu XML hợp khuôn dạng là yếu tố đầu tiên khi tạo lập tài liệu. Hợp khuôn dạng có nghĩa là mỗi tài liệu chỉ có một nút gốc, mỗi phần tử phải có thẻ mở và thẻđóng, và phải lồng nhau chính xác, và cuối cùng là tên thuộc tính chỉ xuất hiện một lần trong thẻ mở. Nhưng một tài liệu XML hợp khuôn dạng không có nghĩa là nó hợp lệ.

Một vǎn bản XML được trao đổi giữa các thành phần khác nhau trong một hệ thống thông thường cần được kiểm tra tính hợp lệ của nó. Muốn kiểm tra sự hợp lệ của một tài liệu XML ta phải dựa vào DTD (Document Type Definition) hoặc Schema XML. DTD (Document Type Definition), được phát triển bởi W3C, được coi là bộ cú pháp dữ

liệu (vocabulary) của vǎn bản XML. File DTD cho phép bạn tạo ra các ràng buộc như tổ

chức dữ liệu hoặc tạo ra các luật (business rules) cho dữ liệu trong vǎn bản XML. Như

vậy quá trình kiểm tra tính hợp lệ (validation) của một vǎn bản XML là việc kiểm tra thành phần dữ liệu của vǎn bản đó có thoả mãn các ràng buộc và luật đề ra trong file DTD tương ứng.

Với sự phát triển như vũ bão của công nghệ XML, các yêu cầu ngày càng trở nên phức tạp. Khả nǎng của DTD chỉ đáp ứng những yêu cầu đơn giản, ví dụ như nó cho phép tạo ra luật: "mỗi quyển sách có thể có một hoặc nhiều tác giả", nhưng lại không cho phép đính ra luật phức tạp hơn như: "giá của quyển sách phải là số thực dương"... Một công nghệ mới cho phép bạn kiểm tra tính hợp lệ của dữ liệu XML tốt hơn là "Giản

đồ " (XML schemas) và cũng của W3C. XML schemas cho phép tạo ra các ràng buộc và luật một cách chặt chẽ hơn. Đặc biệt một vǎn bản XML schemas cũng sử dụng cú pháp XML, còn DTD thì không. Tuy nhiên XML schemas lại không thể thay thếđược DTD, trong một số trường hợp chúng ta hoàn toàn có thể sử dụng cả hai công nghệ cùng một lúc.

2.2.8. Cách sử dụng một tài liệu XML

Khi chúng ta đã có một tài liệu XML, chúng ta sẽ tự hỏi: sử dụng nó như thế nào và làm thế nào để truy cập đến một tập tin XML. Một vǎn bản XML có thể hiểu được ở

bất kỳ đâu trong hệ thống nhờ thông tin trong phần meta-data của nó mang theo. Vì vậy việc truy cập thông tin trong vǎn bản XML này là hoàn toàn khả thi (parsible), hơn nữa cách thức truy cập hoàn toàn có thểđược sử dụng cho các vǎn bản XML khác nhau.

Hai giải pháp mở cho người lập trình sử dụng để đọc thông tin XML là DOM (Document Object Model) và SAX (Simple API for XML). Đây là hai bộ giao diện lập trình chuẩn và mở cho phép người lập trình xử lý thông tin XML mà không phải tạo ra các module xử lý riêng rẽ cho từng dữ liệu cụ thể. Người lập trình chỉ cần tạo ra những module đơn giản gọi là parser sử dụng các hàm của SAX hoặc DOM để truy cập bất kỳ

từng phần tử của vǎn bản XML. Chúng ta có khá nhiều lựa chọn ngôn ngữ lập trình để

viết bộ parser này như Java, C++, Perl, Python, Microsoft cũng phát triển các thành phần để hỗ trợ XML cho VB, VC, ASP.NET, .NET ... Cụ thể hơn, bạn có thể viết client bằng C++ trên Linux sử dụng DOM để làm việc với XML và gửi dữ liệu XML đến server, server này được viết bằng VB.NET và sử dụng SAX để làm việc với dữ liệu XML client gửi đến.

DOM là công nghệ lưu trữ dữ liệu của vǎn bản XML dưới dạng cây (hierarchical object model) với các node là các thành phần dữ liệu của vǎn bản. Sử dụng mô hình cây cho phép dựng bất kỳ một vǎn bản XML phức tạp nào và việc thao tác dữ liệu chính là thao tác với các node tương ứng của cây.

SAX sử dụng kiểu xử lý hướng sự kiện (event), khác với DOM là dựng cây model trước tiên rồi mới cho phép thao tác dữ liệu. SAX xử lý ngay khi đọc vǎn bản và tạo ra các object tương ứng (custom object) để chứa dữ liệu, quá trình lặp lại cho đến khi kết thúc vǎn bản. Mọi thứđược giải phóng trừ các objects mới được tạo ra đã chứa toàn bộ

dữ liệu của vǎn bản XML. Với những vǎn bản đơn giản và chỉ đọc một lần mà không cần cập nhật thì SAX là lựa chọn đầu tiên vì nó nhanh hơn rất nhiều so với DOM.

Mặc dù SAX và DOM có chung một mục đích là truy cập thông tin trong vǎn bản XML nhưng mỗi pháp pháp có một cách tiếp cận riêng và sử dụng phương pháp nào cho hiệu quả lại phụ thuộc vào từng hoàn cảnh cụ thể.

Sau đây, là một số kỹ thuật được sử dụng trong mội trường Visual Studio.NET để

làm việc với tập tin XML.

2.2.8.1. Đọc và phân tích tài liu XML

2.2.8.1.1. Sử dụng lớp XMLTextReader

Lớp XMLTextReader cung cấp một cursor được sử dụng để lấy dữ liệu từ một tài liệu XML. Chúng ta khai báo như sau:

XmlTextReader myRdr = new XmlTextReader(Server.MapPath("catalog2.xml"));

Khi một thể hiện được tạo ra, con trỏ cursor sẽđược đặt ởđầu tài liệu. Chúng ta có thể

sử dụng phương thức Read() để lấy những phần dữ liệu một cách tuần tự. Mỗi phần dữ

liệu tương tự như một nút trong cây XML. Thuộc tính NodeType sẽ lấy kiểu của phần dữ liệu, thuộc tính Name sẽ lấy tên của nút, và Value sẽ lấy giá trị của nút. Vì thế, khi một phần dữ liệu được đọc, chúng ta có thể sử dụng câu lệnh sau để hiện thị tên, giá trị

và kiểu của nút.

Response.Write(myRdr.NodeType.ToString() +" " + myRdr.Name + ":" + myRdr.Value);

Nếu muốn kiểm tra nút đó có thuộc tính hay không, chúng ta có thể sử dụng phương thức HasAttributes. Nếu giá trị trả về của phương thức HasAttributes là true, chúng ta áp dụng phương thức MoveToAttribute(i) để lặp qua các thuộc tính của nút.

if (myRdr.HasAttributes) {

for( int i = 0; i< myRdr.AttributeCount-1;i++) { myRdr.MoveToAttribute(i); Response.Write(myRdr.NodeType.ToString()+":"+ myRdr.Name + ": " + myRdr.Value + "</br>"); } myRdr.MoveToElement(); } 2.2.8.1.2. Sử dụng mô hình DOM

Bên cạnh XMLTextReader thì mô trường Visual Studio.NET cũng hỗ trợ mô hình DOM (Document Object Module) đểđọc và trình bày nội dung của một tập tin XML. Việc sử dụng mô hình DOM sẽ thông qua một số đối tượng như XMLDocument, XMLDataDocument. Khi một XMLDocument được tạo ra, nó tổ chức nội dung của một tập tin XML thành một cây. Trong khi đối tượng XMLTextReader cung cấp một cursor

định vị theo một hướng, thì XMLDocument cung cấp việc truy xuất nhanh và trực tiếp

đến một nút. Tuy nhiên, việc sử dụng mô hình DOM rất tốn bộ nhớđể lưu trữ thành một cây, và thật sự sẽ khó khăn khi tài liệu XML có kích thước lớn. Có nhiều cách khác nhau để tạo một đối tượng XMLDocument. Sau đây chúng ta sử dụng đối tượng XMLTextReader để tạo một XMLDocument.

private void Page_Load(object sender, System.EventArgs e) {

if(!Page.IsPostBack) {

XmlDocument myDoc = new XmlDocument();

XmlTextReader myRdr = new XmlTextReader(Server.MapPath("Catalog2.xml"));

myDoc.Load(myRdr);

Session("sessionDoc") = myDoc;

//khi cây được tạo ra, chúng ta có thể hiển thị lênlistbox //với thuộc tính InnerText của những node ProductName int i=0; for(i=0;i<myDoc.DocumentElement.ChildNodes.Count-1;i++) { lstProducts.Items.Add (myDoc.DocumentElement. ChildNodes[i].ChildNodes[i].InnerText); } myRdr.Close(); } }

2.2.8.2. Định hướng qua tài liu XML để rút trích d liu:

2.2.8.2.1. Sử dụng lớp XMLTextReader

Trong phần trên, chúng ta đã biết cách để đọc vào một tài liệu XML, phần này chúng ta sẽđịnh hướng qua tài liệu XML và chỉ lấy những dữ liệu nào cần thiết cho ứng dụng của mình. Ví dụ như nếu nút đó là ProductName chúng ta sẽđọc và hiển thị thông tin trên một listbox, cụ thể như sau:

while (myRdr.Read()) { if(XmlNoteType.Element) { if (myRdr.Name="ProductName") { myRdr.Read(); stProducts.Items.Add(myRdr.ReadString); } } } myRdr.Close(); 2.2.8.2.2. Sử dụng mô hình DOM

Một cây được tạo thành từ nhiều nút. Và một nút cũng là một cây chứa những nút khác. Nút lá thì không có nút con, vì thế nút này dùng để hiển thị dữ liệu văn bản. Lớp XmlDataDocument kế thừa từ lớp XmlDocument, vì thế nó cũng có một số phương thức như lớp XmlDocument. Điều thú vị nhất của XmlDataDocument là nó cung cấp hai cách nhìn trên cùng một dữ liệu đó là XML view và relational view. XmlDataDocument có một thuộc tính tên là DataSet, thông qua DataSet, XmlDataDocument trình bày dữ liệu như một hoặc nhiều bảng (DataTable) có quan hệ

hoặc không có quan hệ. Khi chúng ta sử dụng phương thức Load() để tải một đối tượng XmlDataDocument, chúng ta có thể xem nó như một cây hoặc như một bảng (hoặc nhiều bảng). Sau đây là hình minh hoạ cho hai cách nhìn về một tài liệu XML khi sử

Mô hình DOM trong .NET 2.2.9. Nhận xét về XML

XML được xây dựng như là một chuẩn cho việc trình bày và trao đổi dữ liệu trên web. Tập đoàn W3C đã xây dựng chuẩn XML và những công nghệ liên quan bao gồm XML DOM, XPath, XSL, và XML Schema. Trong đó XML DOM được sử dụng để tạo, thay đổi, và duyệt qua tài liệu XML. Xpath là ngôn ngữ dùng để truy vấn trên tài liệu XML. XSL dùng để chuyển đổi tài liệu XML từ dạng này sang dạng khác. XML Schema định nghĩa cấu trúc và kiểu dữ liệu cho những nút trong một tài liệu XML. Tất cả những công nghệ này đã tạo nên sức mạnh cho XML. Vì thế, XML ngày nay đang

được sử dụng rất phổ biến và tương lai sẽ là một chuẩn duy nhất được dùng trên web.

XML không phải là:

XML không là ngôn ngữ lập trình

Không có một trình biên dịch nào có thểđọc tập tin XML và tạo ra mã co thể thực thi được. Có lẽ chúng ta có thểđịnh nghĩa một ngôn ngữ kịch bản, ngôn ngữđó sử

dụng định dạng mã máy XML, và được thông dịch bằng một chương trình nhị phân, nhưng các chương trình này sẽ hiếm khi được sử dụng. XML có thểđược sử dụng như một dạng chỉ dẫn cho những chương trình, giống như các chương trình truyền thống có thểđọc một tập tin văn bản config và thực thi những hành động khác nhau phụ thuộc và những gì mà nó đọc được trong tập tin config. Gần đây nhiều chương trình đang bắt đầu sử dụng những tập tin XML config.

XML không phải là giao thức truyền tải trên mạng (network transport protocol)

XML sẽ không gửi dữ liệu qua mạng. Dữ liệu gửi trên mạng thông qua giao thức HTTP, FTP, NFS hoặc một số giao thức khác có thể ngẫu nhiên được mã hóa bằng

định dạng XML.

XML không là cơ sở dữ liệu

Việc XML có phải là cơ sở dữ liệu hay không là một câu hỏi mà nhiều nguời không trả lời được. Vì XML cũng giống như mọi ngôn ngữ khác đó là nó cũng có ưu điểm và khuyết điểm. Ưu điểm của XML như chúng ta đã biết ở trên nhưng khuyết điểm của XML ởđây là XML dài dòng và truy xuất chậm. Việc truy xuất chậm là do việc lưu trữ tài liệu XML trong bộ nhớđể phục vụ cho vấn đề truy vấn như chúng ta đã

đề cập trong mô hình DOM. Vì vậy, sau đây chúng ta sẽ quan tâm đến một khía cạnh khác của XML. Đó là XML có gần gũi như một Cơ sở dữ liệu (CSDL) hay

không? Câu trả lời là “chỉ một phần nào”. Vì XML cũng có một sốđiểm giống như

CSDL. Đó là nó cũng có khả năng lưu trữ, có hỗ trợ một số lược đồ như DTD, hay Schema (tương tự như bảng trong CSDL quan hệ). Và trên XML ta cũng có thể thực hiện thao tác truy vấn bằng cách sử dụng XPath, XQuery, XQL,…, và XML cũng có hỗ trợ lập trình trên giao diện. Nhưng một số vấn đề mà XML chưa hỗ trợ như

một CSDL. Đó là không có chỉ mục, vấn đề bảo mật không cao, tính toàn vẹn dữ

liệu chưa đáp ứng, không hỗ trợ các trigger, việc truy cập đa người dùng cũng hạn chế, và cuối cùng là không cho truy vấn thông qua nhiều tài liệu. Một cơ sở dữ liệu có thể chưa dữ liệu XML, có thể như một VARCHAR hoặc như một số kiểu dữ liệu XML tùy chỉnh nhưng cơ sở dữ liệu không phải là một tài liệu XML. Chúng ta có thể lưu trữ dữ liệu XML vào trong cơ sở dữ liệu trên server hoặc nhận dữ liệu từ cơ

sở dữ liệu in định dạng XML, nhưng để làm được như vậy, chúng ta cần một phần mềm được viết bằng ngôn ngữ lập trình như là C, C++,C# hay Java… Để lưu trữ

XML trong cơ sở dữ liệu, phần mềm ở phía client sẽ gửi dữ liệu tới server sử dụng một giao thức mạng nhu là TCP/IP. Phần mềm phía server sẽ nhận dữ liệu XML, phân tích nó, và lưu trữ vào cơ sở dữ liệu.Để nhận một tài liệu XML từ một cơ sở dữ

liệu, chúng ta sẽ cần một phần mềm trung gian (middleware) như Enhydra, phần mềm này sẽ thực hiện các truy vấn SQL trên cơ sở dữ liệu và đưa ra tập kết quả theo

định dang XML trước khi trả về cho client. Một số cơ sở dữ liệu có thể tích hợp mã lệnh phần mềm này vào server của họ hoặc cung cấp plug-ins để xử lý. XML là một dạng thức chuyển tải độc lập hệ thống nền, tuy nhiên việc lưu trữ dữ liệu XML như

một cơ sở dữ liệu là không khả thi.

2.3. DTD (Document Type Definition)

DTD là từ viết tắt của Document Type Definition – định nghĩa kiểu tư liệu. Định nghĩa kiểu tư liệu DTD làm cho tài liệu XML trở nên hợp khuôn dạng và có giá trị.

2.3.1. To khai báo và định nghĩa kiu tư liu DTD:

2.3.1.1. Chỉ thị bắt đầu khai báo DTD:

Cách khai báo DTD phụ thuộc vào khái niệm standalone trong chỉ thị xml đầu tiên. Khái niệm này cho ta biết định nghĩa kiểu tư liệu DTD trong tài liệu XML được định nghĩa ởđâu (nằm trong tài liệu XML hay nằm bên ngòai). Cụ thể:

Giá trị Mô tả

Yes DTD được khai báo bên trong tài liệu XML.

No DTD được khai báo bên ngòai tài liệu XML với tên mở rộng là “.dtd”

Có nhiều mẫu khai báo, nhưng để bắt đầu ta dùng thẻ <!DOCTYPE>

Khai báo Mô tả

<!DOCTYPE rootname [DTD] > Đây là tham chiếu nội.

<!DOCTYPE rootname SYSTEM URL> Đây là tham chiếu ngoại riêng tư, URL

được dùng để tham chiếu đến các DTD ngoại.

<!DOCTYPE rootname SYSTEM URL

[DTD]> Tham chingọai riêng tếu nư. ội kết hợp với tham chiếu

Một phần của tài liệu TÌM HIỂU HTML và CÔNG NGHỆ XML xây DỰNG TRÌNH BIÊN DỊCH HTML SANG XML (Trang 29)

Tải bản đầy đủ (PDF)

(109 trang)