This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.This theme is Bloggerized by Lasantha Bandara - Premiumbloggertemplates.com.

Hiển thị các bài đăng có nhãn xml. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn xml. Hiển thị tất cả bài đăng

Thứ Tư, 23 tháng 12, 2015

XML 7

Untitled Document

Bài 07: Tìm hiểu CDATA trong XML

 0 
 Google +0 
 
  0
Đăng bởi: TheHalfHeart - Vào ngày: 30-11-2015 - Chuyên mục: XML - View: 95

Bài này ta sẽ tìm hiểu cách sử dụng CDATA để giữ nguyên văn bản trong các thẻ XML, đây là một chức năng khá quan trọng giúp file XML không bị lỗi về cú pháp.

1. CDATA trong XML

Một tài liệu XML được xây dựng bởi các thẻ XML do lập trình viên tự định nghĩa ra, và đương nhiên lập trình viên phải tuân thủ các quy tắc mà XML đề ra (xem bài XML Element). Tuy nhiên có một số trường hợp dữ liệu chứa trong các thẻ XML lại có những ký tự đặc biệt dẫn đến tài liệu XML bị đảo lộn.

Ví dụ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<Tutorials>
    <Post>
        <Title>
            Học CDATA trong XML miễn phí
        </Title>
        <Code>
            <?xml version="1.0" encoding="UTF-8"?>
            <Persons>
                <Person>
                   Nguyễn Văn Cường
                </Person>
            </Persons>
        </Code>
    </Post>
</Tutorials>

Bạn thấy nội dung bên trong thẻ Code là một đoạn mã XML khác, có nghĩa đây là trường hợp giá trị của the XML lại là một đoạn mã XML khác. Nếu chạy lên sẽ bị lỗi như hình dưới đây:

Để khắc phục trường hợp này ta sẽ sử dụng CDATA như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<Tutorials>
    <Post>
        <Title>
            Học CDATA trong XML miễn phí
        </Title>
        <Code>
            <![CDATA[
            <?xml version="1.0" encoding="UTF-8"?>
            <Persons>
                <Person>
                   Nguyễn Văn Cường
                </Person>
            </Persons>
            ]]>
        </Code>
    </Post>
</Tutorials>

Như vậy cú pháp của CDATA là <![CDATA[nội dung]]>.

2. Sử dụng Special Character trong XML

Special character (đôi lúc ta gọi là thực thể) là những ký tự đặc biệt được chuyển đổi thành mỗi dãy các chữ cái và dấu &;. 

Như ở trong phần một ta sử dụng CDATA để khắc phục lỗi nội dung XML chứa kí tự đặc biệt. Nhưng cũng có một cách khác là bạn chuyển những ký tự đặc biệt đó sang Special characters như bảng dưới đây.

Thực thể Mô tả
&apos; Dấu nháy đơn '
&amp; Dấu &
&gt; Dấu >
&lt; Dấu <
&quot; Dáu nháy kép "

Ví dụ: Viết lại ví dụ trên bằng cách sử dụng Special character.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<Tutorials>
    <Post>
        <Title>
            Học CDATA trong XML miễn phí
        </Title>
        <Code>
            &lt;?xml version="1.0" encoding="UTF-8"?&gt;
            &lt;Persons&gt;
                &lt;Person&gt;
                   Nguyễn Văn Cường
                &lt;/Person&gt;
            &lt;/Persons&gt;
        </Code>
    </Post>
</Tutorials>

Chạy file XML này lên và mọi thứ đều ổn.

3. Lời kết

Cả hai cách trên đều dùng để xử lý nội dung bên trong thẻ XML, tuy nhiên chúng ta vẫn hay sử dụng CDATA bởi vì nó đơn giản nhưng lại rất hiệu quả.

Bài tiếp theo chúng ta sẽ tìm hiểu một số cách hiển thị XML trên trình duyệt.

XML 6

Untitled Document

Bài 06: Tìm hiểu XML Namespace

  0  


 
Google +0  

   0
Đăng bởi: TheHalfHeart - Vào ngày: 30-11-2015 - Chuyên mục: XML - View: 75
Bài này chúng ta sẽ tìm hiểu khái niệm về XML Namespace, nó sẽ giải quyết vấn đề trùng tên thẻ trong một tài liệu XML.

1. XML Namespace là gì?

Cấu trúc một tài liệu XML được xây dựng bởi các lập trình viên, do đó họ có thể tự đặt tên thẻ XML (XML Element), điều này dẫn đến xung đột nếu trong một file bị đặt trùng tên dẫn đến không phân biệt được thẻ nào dùng cho ứng dụng nào.
Ví dụ: Bị trùng lặp thẻ Title.


1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?xml version="1.0" encoding="UTF-8"?>
<ShopOrder>
    <Order>
        <Customer>
            <Title>Nguyễn Văn Cường</Title>
            <Address>Buôn Ma Thuột - Đăklăk</Address>
        </Customer>
        <Product>
            <Title>Dép thái cao cấp</Title>
            <Qua>20</Qua>
            <Price>200.000 vnđ</Price>
        </Product>
    </Order>
</ShopOrder>

Trong tài liệu này có hai thẻ Title, thẻ thứ nhất là tên của khách hàng và thẻ thứ hai là tên của sản phẩm => điều này ta gọi là xung đột thẻ XML.
Nếu bạn nghĩ điều này không có gì đáng lo ngại thì đúng rồi đấy, bởi vì trong ví dụ chỉ nói đến một tài liệu XML. Nhưng bạn có nghĩ trường hợp ta sử dụng kết hợp nhiều tài liệu XML với nhau thì sẽ dẫn đến sự nhầm tưởng tệ hại không? Vì vậy để giải quyết vấn đề này thì ta phải sử dụng XML Namespace.

Cú pháp tạo XML namespace:

Để tạo một namespace thì ta sẽ khai báo một thuộc tính xmlns:uri.

  • Trong đó xmlns là viết tắt của từ XML namespace.
  • uri là đường dẫn URL của namespace, có thể là một địa chỉ nào đó trên internet hoặc một địa chỉ nào đó đều được nhưng phải đảm bảo rằng nó là duy nhât trong file tài liệu XML của bạn.

Ví dụ:


1
2
3
4
5
6
7
8
9

<?xml version="1.0" encoding="UTF-8"?>
<ShopOrder>
    <Order>
        <cus:Customer xmlns:cus="http://freetuts.net/customer">
            <cus:Title>Nguyễn Văn Cường</cus:Title>
            <cus:Address>Buôn Ma Thuột - Đăklăk</cus:Address>
        </cus:Customer>
    </Order>
</ShopOrder>

Như vậy các thẻ XML chúng ta cũng phải bổ sung tên của namespace theo cú pháp namespace_name:element_name.

Liên tưởng tới truy vấn T-SQL:

Trong ngôn ngữ T-SQL thì để giải quyết vấn đề này ta sẽ sử dụng lệnh as (alias) và dấu chấm để tránh sự nhầm lẫn này.
Ví dụ: Có hai bảng tin tức và chuyên mục có trùng tên field id. Lúc này để lấy danh sách tin tức và chuyên mục của tin tức đó kèm id của cả hai thì ta phải viết câu SQL dạng:


1
2

SELECT p.id, p.title, c.id, c.title
FROM products as p JOIN categories as c on p.cate_id = c.id

2. Namespace mặc định

Nếu tài liệu của chúng ta chỉ sử dụng một namespace thì bạn có thể khai báo namespace mặc định cho nó bằng cách chỉ sử dụng từ khóa xmlns và bỏ đi tên của namespace.
Ví dụ:


1
2
3
4
5
6
7
8
9
10
11
12
13

<?xml version="1.0" encoding="UTF-8"?>
<ShopOrder xmlns="http://freetuts.net/customer">
    <Order>
        <Customer>
            <Title>Nguyễn Văn Cường</Title>
            <Address>Buôn Ma Thuột - Đăklăk</Address>
        </Customer>
        <Customer>
            <Title>Nguyễn Văn Kính</Title>
            <Address>Buôn Ma Thuột - Đăklăk</Address>
        </Customer>
    </Order>
</ShopOrder>

Nhưng giả sử chúng ta có hai namespace mặc định trong một tài liệu XML như trường hợp dưới đây:


1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?xml version="1.0" encoding="UTF-8"?>
<ShopOrder>
    <Order>
        <Customer xmlns="http://freetuts.net/customer">
            <Title>Nguyễn Văn Cường</Title>
            <Address>Buôn Ma Thuột - Đăklăk</Address>
        </Customer>
        <Product  xmlns="http://freetuts.net/product">
            <Title>Dép thái cao cấp</Title>
            <Qua>20</Qua>
            <Price>200.000 vnđ</Price>
        </Product>
    </Order>
</ShopOrder>

Trường hợp này nếu ta có nhiều đơn hàng thì phải tạo nhiều namespace mặc định. Đều này khá phiền toái nếu ta có 1000 đơn hàng phải không nào? Để giải quyết vấn đề này thì ta khai báo namespace ngay tại thẻ Root.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<?xml version="1.0" encoding="UTF-8"?>
<ShopOrder
    xmlns:cus="http://freetuts.net/customer"
    xmlns:pro="http://freetuts.net/product">
    <Order>
        <cus:Customer>
            <cus:Title>Nguyễn Văn Cường</cus:Title>
            <cus:Address>Buôn Ma Thuột - Đăklăk</cus:Address>
        </cus:Customer>
        <pro:Product>
            <pro:Title>Dép thái cao cấp</pro:Title>
            <pro:Qua>20</pro:Qua>
            <pro:Price>200.000 vnđ</pro:Price>
        </pro:Product>
    </Order>
</ShopOrder>

Trên là những vấn đề ta cần biết về namespace trong XML.

3. Lời kết

Có lẽ xong bài này bạn vẫn còn vướng mắc khá nhiều về công dụng của namespace trong thực tế, nếu vậy thì hãy chờ các bài nâng cao chúng ta sẽ thấy tận mắt nhé.
Bài này cũng khá đơn giản nên nội dung hơi ngắn, cũng hy vọng các bạn hiểu bài.

XML 5

Untitled Document

Bài 05: XML và các hệ quản trị CSDL (MySQL)
 0 
 Google +0 

  0
Đăng bởi: TheHalfHeart - Vào ngày: 30-11-2015 - Chuyên mục: XML - View: 97
XML cũng là một dạng lưu trữ dữ liệu nhưng có điểm khác là nó lưu trữ trên file nên đối với những ứng dụng lớn vài triệu records thì rất khó để đọc và truy xuất. Nhưng khi bạn sử dụng các hệ quản trị CSDL thì dễ dàng hơn bởi nó cung cấp cho bạn ngôn ngữ T-SQL giúp việc xử lý truy vấn rất hiệu quả.
Ở các ví dụ trước mình có đưa ra khá nhiều ví dụ về cấu trúc lưu trữ trong XML, nhưng bạn có thắc mắc nếu chuyển nó sang một hệ quản trị như MySQL thì phải thiết kế table như thế nào? Để hiểu rõ thì sau khi xem bài này bạn sẽ loại bỏ ngay câu hỏi đó trong đầu bạn.
Vì mình chuyên bên PHP và MySQL nên mình sẽ lấy hệ quản trị CSDL MySQL để làm ví dụ trong quá trình viết bài nhé.


1. Phân tích một file XML

Trước tiên mình có một ví dụ như sau: Cần lưu trữ danh sách sinh viên của một trường đại học, mỗi sinh viên cần lưu các thông tin:

  • Tên sinh viên (TenSV)
  • Mã SV (MaSV)
  • Năm sinh (NamSinh)
  • Giới tính (GioiTinh)
  • Mã lớp (MaLop)

Phân tích bài toán để lưu trữ trong XML như sau:

  • Mỗi sinh viên sẽ được bao bọc bởi thẻ SinhVien.
  • Bên trong thẻ SinhVien là các thẻ TenSV, MaSV, NamSinh, GioiTinh, MaLop
  • Cần một thẻ root bên ngoài để khai báo project và ta đặt nó là thẻ DS_SinhVien

Và đây là file XML của chúng ta:


1
2
3
4
5
6
7
8
9
10

<?xml version="1.0" encoding="UTF-8"?>
<DS_SinhVien>
    <SinhVien>
        <MaSV></MaSV>
        <TenSV></TenSV>
        <NamSinh></NamSinh>
        <GioiTinh></GioiTinh>
        <MaLop></MaLop>
    </SinhVien>
</DS_SinhVien>

Nếu có nhiều sinh viên thì ta chỉ cần copy thẻ SinhVien là được:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<?xml version="1.0" encoding="UTF-8"?>
<DS_SinhVien>
     
    <SinhVien>
        <MaSV></MaSV>
        <TenSV></TenSV>
        <NamSinh></NamSinh>
        <GioiTinh></GioiTinh>
        <MaLop></MaLop>
    </SinhVien>
     
    <SinhVien>
        <MaSV></MaSV>
        <TenSV></TenSV>
        <NamSinh></NamSinh>
        <GioiTinh></GioiTinh>
        <MaLop></MaLop>
    </SinhVien>
     
</DS_SinhVien>

2. Phân tích sang MySQL

Với MySQL thì ta sẽ lưu mỗi sinh viên là một record, có nhiều sinh viên thì cứ bổ sung một record là được.
Lúc này nhìn vào file XML ở phần 1 ta có thể rút ra kết luận nhu sau: Dữ liệu trong thẻ SinhVien tương ứng với một record trong MySQL, khóa chính là thẻ MaSV và khóa ngoại là MaLop.
Cấu trúc table như sau:

  • Tên table: DS_SinhVien
  • Các fields: MaSV, TenSV, NamSinh, GioiTinh, MaLop

Tất cả được mô phỏng trong hình dưới đây:
http://freetuts.net/upload/tut_post/images/2015/11/30/517/xml-vs-mysql.png
Lưu ý là bạn có thể đặt tên database và tên fields khác với file XML, bởi vì nếu bạn đặt tên giống thì khi viết API dễ dàng bị lộ tên table, điều này đôi khi là một thông tin có lợi cho hacker.


3. Lời kết

Từ bài này bạn sẽ hiểu được nguyên lý khi lấy dữ liệu từ trong một table rồi chuyển sang file XML, chức năng này thường được sử dụng trong các API trong các ứng dụng Mobile.
Đáng lẽ bài này mình sẽ trình bày sau khi học xong XML nhưng một số bạn thắc mắc nên mình trình bày luôn ở bài thứ 5 này, bỏi vì bạn đã học căn bản qua XML rồi nên cũng không khó khăn gì. Và mình cũng tin là khi bạn đọc bài này thì chắc chắn bạn đã học qua một hệ quản trị CSDL nào đó rồi. Cuối cùng hy vọng bạn hiểu ý tưởng của bài này.

XML 4

Untitled Document

Bài 04: Tìm hiểu XML Attributes

  0  


 
Google +0  

   0
Đăng bởi: TheHalfHeart - Vào ngày: 30-11-2015 - Chuyên mục: XML - View: 76
Trong các thẻ HTML bạn sẽ có các thuộc tính như href, id, class, src, ... Các thuộc tính này chỉ có tác dụng đặc biệt trong tài liệu HTML chứ đối với XML nó không có tác dụng gì, chỉ là các thuộc tính bình thường.
Để rõ hơn thì trong bài này chúng ta sẽ tìm hiểu khái niệm về XML Attributes và các quy tắc trong việc tạo ra các XML Attributes.
Để tiện cho việc viết tuts thì mình sẽ gọi XML Attributes là thuộc tính của XML nhé.

1. XML Attribites là gì?

Vậy XML attributes là gì? Đó là những dữ liệu được khai báo báo bên trong thẻ mở theo cú pháp:


1
2
3

<element_name property_name="property_value">

</element_name>

Bạn có thể sử dụng cặp thẻ nháy kép "" hoặc nháy dơn đều được ' '. Tuy nhiên lời khuyên là bạn nên sử dụng cặp nháy kép.
Mỗi thẻ XML (XML element) có thể không có thuộc tính nào hoặc có nhiều thuộc tính tùy vào cách định nghĩa của lập trình viên. 
Ví dụ: Trường hợp có nhiều thuộc tính


1
2
3
4
5
6
7

<?xml version="1.0" encoding="UTF-8"?>
<coders>
    <person skill="PHP Javascript jQuery" master_at="PHP">
        <name>Nguyễn Văn Cường</name>
        <website>Freetuts.net</website>
    </person>
</coders>

Tới đây chắc bạn sẽ có câu hỏi rằng thuộc tính có gì đặc biệt mà người ta lại tạo ra nó? Đã tạo ra ắt phải có tác dụng thôi, bạn có thể sử dụng thuộc tính để thay thế cho các thẻ XML như ví dụ dưới đây:
Cách 1: Sử dụng thuộc tính


1
2
3
4
5
6
7

<?xml version="1.0" encoding="UTF-8"?>
<coders>
    <person skill="PHP Javascript jQuery" master_at="PHP">
        <name>Nguyễn Văn Cường</name>
        <website>Freetuts.net</website>
    </person>
</coders>

Cách 2: Sử dụng thẻ XML


1
2
3
4
5
6
7
8
9

<?xml version="1.0" encoding="UTF-8"?>
<coders>
    <person>
        <master_at>PHP</master_at>
        <skill>PHP Javascript jQuery</skill>
        <name>Nguyễn Văn Cường</name>
        <website>Freetuts.net</website>
    </person>
</coders>

Và còn nhiều công dụng nữa mà trong các bài tìm hiểu về DTD, XSL chúng ta sẽ đề cập tới.

2. XML Attributes vs XML Properties

Như ở ví dụ so sánh cách sử dụng XML Attributes thay thế cho XML Elements ở trên thì bạn đã thấy được sự chuyển đổi đơn giản giữa hai khái niệm này, tuy nhiên chúng ta vẫn còn một số lưu ý nữa mà bạn nên đọc để hiểu thêm.

XML Multi value:

Thứ nhất: Mỗi một thuộc tính XML chỉ có thể chứa một giá trị duy nhất cho dù bạn nhập gì bên trong nó đi nữa thì XML vẫn tính là một giá trị, bởi vì XPath (tìm hiểu sau) sẽ không tính nó là nhiều giá trị như ban nghĩ. 
Thứ hai: Các thuộc tính XML chỉ chứa giá trị dạng text, number chứ không thể chứa một thẻ XML khác.
Từ hai tính chất trên ta thấy khi sử dụng thuộc tính XML thì rất khó mở rộng tài liệu, ví dụ sau này bạn cần bổ sung thông tin là con của thuộc tính nào đó thì không thể làm được, nhưng với element thì hoàn toàn làm được.
Ví dụ: Trường hợp attributes khó nâng cấp và mở rộng


1
2
3
4
5
6

<?xml version="1.0" encoding="UTF-8"?>
<coders>
    <person master_at="PHP" skill="PHP Javascript jQuery"
        name="Nguyễn Văn Cường" website="Freetuts.net">
    </person>
</coders>

Giả sử giờ mình muốn lấy họ của lâp trình viên thì phải xử lý tách chuỗi, Nhưng với cách thiết kế dưới đây thì không cần:


1
2
3
4
5
6
7
8
9
10
11
12
13

<?xml version="1.0" encoding="UTF-8"?>
<coders>
    <person>
        <master_at>PHP</master_at>
        <skill>PHP Javascript jQuery</skill>
        <name>
            <firstname>Cường</firstname>
            <middlename>Văn</middlename>
            <lastname>Nguyễn</lastname>
        </name>
        <website>Freetuts.net</website>
    </person>
</coders>

Vừa dễ dàng mở rộng mà nhìn lại đẹp nữa chứ :D.

Metadata trong XML:

Tới phần này bạn mới thấy Attributes thực sự có công dụng. Chúng ta thường sử dụng Attributes để lưu trữ những thông tin chính như là khóa chính của thẻ XML đó.
Ví dụ:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<?xml version="1.0" encoding="UTF-8"?>
<coders>
    <person id="1">
        <master_at>PHP</master_at>
        <skill>PHP Javascript jQuery</skill>
        <name>
            <firstname>Cường</firstname>
            <middlename>Văn</middlename>
            <lastname>Nguyễn</lastname>
        </name>
        <website>Freetuts.net</website>
    </person>
    <person id="2">
        <master_at>Javascript</master_at>
        <skill>PHP Javascript AngularJS</skill>
        <name>
            <firstname>Tình</firstname>
            <middlename>Thị Thu</middlename>
            <lastname>Vũ</lastname>
        </name>
        <website>Freetuts.net</website>
    </person>
</coders>

Ngoài cách sử dụng thuộc tính ra thì ta cũng có thể tạo thêm một thẻ id để lưu trữ, tuy nhiên lời khuyên cho bạn nên sử dụng thuộc tính cho trường hợp này.

3. Lời kết

Qua bài này chúng ta đã học được kha khá kiến thức về XML rồi đáy, có thể là đủ sử dụng cho những bạn chỉ muốn tìm hiểu cú pháp đơn giản để tạo ra file XML đơn giản trong các ứng dụng web.
Đọc tới bài này có lẽ bạn sẽ liên tưởng và so sánh đến cách lưu trữ trong các hệ quản trị CSDL phải không nào? Nếu vậy thì bài tiếp theo chúng ta sẽ đề cập đến nó nhé.

XML 2

Untitled Document

Bài 02: Cấu trúc cây trong XML
 0 
 Google +0 

  0
Đăng bởi: TheHalfHeart - Vào ngày: 28-11-2015 - Chuyên mục: XML - View: 86
Một tài liệu XML được tạo bởi các thẻ (XML element) và chúng có thể được tổ chức theo một cấu trúc cây thư mục, điều này còn có thể gọi là Nested  Elements trong XML. Vậy cách tổ chức như thế nào để có thể lưu trữ được dữ liệu trong thế giới thực? Chúng ta cùng tìm hiểu vấn đề này nhé.


1. Cấu trúc cây trong XML

Như ở bài tìm hiểu XML là gì mình có giới thiệu sơ lược về cách tạo thẻ Root Node (phần 2). Từ ví dụ đó ta có thể rút ra kết luận rằng các thẻ XML có thể lồng lên nhau, thẻ ngoài ta gọi là thẻ cha và các thể bên trong ta gọi là thẻ con.
Ví dụ: Sơ đồ cấu trúc cây tổ chức lưu trữ thông tin nhân viên trong một công ty
http://freetuts.net/upload/tut_post/images/2015/11/28/514/xml-dom-model.jpg
Với sơ đồ này ta sẽ thực hiện từng bước tạo tài liệu XML như sau:
Bước 1: Thẻ ngoài cùng root là company


1
2
3
4

<?xml version="1.0" encoding="UTF-8"?>
<company>
     
</company>

Bước 2: Bên trong thẻ company có hai thẻ employee.


1
2
3
4
5
6
7
8
9

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <employee>
        
    </employee>
    <employee>
         
    </employee>
</company>

Bước 3: Bên trong thẻ employee đầu tên gồm ba thẻ firstname, lastname và contactno tương đương với ba giá trị như sau:

  • firstname => Tanmay
  • lastname => Patil
  • contactno => 123456789

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <employee>
        <firstname>
            Tanmay
        </firstname>
        <lastname>
            Patil
        </lastname>
        <contactno>
            123456789
        </contactno>
    </employee>
    <employee>
         
    </employee>
</company>

Bước 4: Tương tự cho nội dung bên trong thẻ employee thứ hai.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <employee>
        <firstname>
            Tanmay
        </firstname>
        <lastname>
            Patil
        </lastname>
        <contactno>
            123456789
        </contactno>
    </employee>
    <employee>
        <firstname>
            Taniya
        </firstname>
        <lastname>
            Mishra
        </lastname>
        <contactno>
            123456789
        </contactno>
    </employee>
</company>

Như vậy là ta đã đặc tả xong cấu trúc XML lưu trữ dữ liệu ứng dụng quản lý nhân viên trong công ty.
Câu hỏi đặt ra là nếu ta lưu trữ thêm một nhân viên nữa thì phải làm thế nào? Rất đơn giản ta chỉ việc tạo thêm một thẻ employee và thêm thông tin là được.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <employee>
        <firstname>
            Tanmay
        </firstname>
        <lastname>
            Patil
        </lastname>
        <contactno>
            123456789
        </contactno>
    </employee>
    <employee>
        <firstname>
            Taniya
        </firstname>
        <lastname>
            Mishra
        </lastname>
        <contactno>
            123456789
        </contactno>
    </employee>
    <employee>
        <firstname>
            Cuong
        </firstname>
        <lastname>
            Nguyen
        </lastname>
        <contactno>
            0979306603
        </contactno>
    </employee>
</company>

Quá đơn giản và dễ hiểu phải không các bạn.


2 Cấu trúc cây nhiều cấp trong XML

Lấy ví dụ ở phần thứ nhất và bổ sung thêm yêu cầu sau: Môi nhân viên lưu trữ thêm danh sách người thân của nhân viên đó(chỉ cần lưu trữ tên, mối quan hệ).
Trước tiên ta cần tổ chức XML lưu trữ người thân đã. Giả sử mình sẽ lưu trữ dạng sau:


1
2
3
4
5
6
7
8
9
10
11
12
13
14

<family>
    <person>
        <name>Nguyễn Sơn</name>
        <relationship>Cha</relationship>
    </person>
    <person>
        <name>Lê Thị Sửu</name>
        <relationship>Mẹ</relationship>
    </person>
    <person>
        <name>Nguyễn Văn Trường</name>
        <relationship>Anh trai</relationship>
    </person>
</family>

Ráp vào bài toán thứ nhất ta sẽ có cấu trúc XML sau:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <employee>
        <firstname>
            Tanmay
        </firstname>
        <lastname>
            Patil
        </lastname>
        <contactno>
            123456789
        </contactno>
        <family>
            <person>
                <name>Nguyễn Sơn</name>
                <relationship>Cha</relationship>
            </person>
            <person>
                <name>Lê Thị Sửu</name>
                <relationship>Mẹ</relationship>
            </person>
            <person>
                <name>Nguyễn Văn Trường</name>
                <relationship>Anh trai</relationship>
            </person>
        </family>
    </employee>
</company>

Như vậy mỗi lần thêm nhân viên thì chỉ việc bổ sung thẻ employee và muốn thêm người thân thì chỉ việc bổ sung thẻ person.


3. Lời kết

Nếu bạn đã biết về HTML thì rất dễ hiểu bởi vì HTML được xây dựng dựa vào đặc tả của XML.
Bài này chúng ta đã học cách tạo một cấu trúc cây trong XML và thao tác với element khá nhiều. Tuy nhiên chúng ta chưa học nguyên tắc tạo ra element đó nên trong bài tiếp theo chúng ta sẽ tìm hiểu nguyên tắc tạo elements trong XML, ví dụ cách đặt tên và cách tạo thẻ không có thẻ đóng.

XML 1

Untitled Document

Bài 01: XML là gì? Cú pháp căn bản của XML

  0  


 
Google +0  

   0
Đăng bởi: TheHalfHeart - Vào ngày: 28-11-2015 - Chuyên mục: XML - View: 198
Ngoài cách lưu trữ dữ liệu trong các hệ quản trị CSDL ra thì bạn có thể lưu trữ dữ liệu trong file TXT, file JSON hay file XML đều được. Tuy nhiên với những hệ thống lớn thì bắt buộc ta phải lưu trữ trong hệ quản trị CSDL bởi vì nó cũng cấp những tính năng giúp quản lý dữ liệu tốt hơn. Còn đối với XML hay JSON thì ứng dụng lớn nhất của nó trong lập trình web đó là xây dựng các Service và API, nghĩa là các API đó sẽ trả kết quả về dạng JSON hoặc XML các hệ thống khác có thể hiểu được. Ví dụ để tạo một ứng dụng đặt phòng trên mobile thì bạn phải xây dựng một Service và nhiệm vụ của service đó là trả kết quả danh sách phòng về cho App Mobile, mà với ngôn ngữ lập trình Mobile khác hoàn toàn với PHP hay C# nên ta phải trao đổi dữ liệu thông qua XML hoặc JSON.
Hiện nay người ta hay sử dụng JSON hơn là XML nhưng mình đã có một loạt bài viết về JSON rồi nên trong loạt bài viết này ta sẽ tìm hiểu về XML. Bài đầu tiên này ta sẽ tìm hiểu khái niệm về XML là gì và cách tạo một file XML đơn giản.

1. XML là gì?

XML là viết tắt của từ eXtensible Markup Language, hay còn gọi là ngôn ngữ đánh dấu mở rộng do W3C đề nghị với mục đích tạo ra các ngôn ngữ đánh dấu khác. Đây là một tập hợp con đơn giản có thể mô tả nhiều loại dữ liệu khác nhau nên rất hữu ích trong việc chia sẻ dữ liệu giữa các hệ thống. Ví dụ khi bạn xây dựng một ứng dụng bằng C# và một ứng dụng bằng PHP thì hai ngôn ngữ này không thể hiểu nhau, vì vậy ta sẽ sử dụng XML để trao đổi dữ liệu.
Tất cả những đặc tả dữ liệu XML đều phải tuân theo quy luật và cú pháp của nó nên hầu như các file XML đều rất nghiêm khắc trong việc biên dịch. Tuy nhiên công nghệ này cần phải được xem xét bởi vì trong quá trình thao tác và truyền dữ liệu nó có tỉ lệ sai sót lên tới 5% - 7%. Con số này không cao nhưng cũng rất đáng để cân nhức khi sử dụng.
Điển hình nhất là ngôn ngữ đánh dấu siêu văn bản HTML sử dụng cú pháp của XML để tạo nên và nó có các bộ phần tử và thuộc tính không mềm dẻo nên chỉ có tác dụng trong việc trình bày dữ liệu trên trình duyệt Browser.
Để rõ hơn về khái niệm XML là gì thì bạn nên đọc ở bài viết trên Wiki nhé.

2. Cú pháp của tài liệu XML

Nếu bạn đã học qua HTML rồi thì rất dễ dàng hiểu cú pháp của XML bởi vì HTML được xây dựng dựa trên cú pháp của XML.
File XML sẽ có phần mở rộng là .xml. Tuy nhiên bạn hoàn toàn có thể sử dụng ngôn ngữ lập trình để thay đổi phần mở rộng cho nó (sẽ tìm hiểu sau).

Cú pháp của thẻ XML:

XML được xây dựng dựa vào cấu trúc NODE lồng nhau, mỗi node sẽ có một thẻ mở và một thẻ đóng như sau:


1

<nodename>nội dung</nodename>

Trong đó:

  • <nodename> là thẻ mở, tên của thẻ này do bạn tự định nghĩa.
  • </nodename> là thẻ đóng, tên của thẻ này phải trùng với tên của thẻ mở.
  • content là nội dung của thẻ này

Ví dụ mình lưu trữ domain của mình thì cấu trúc như sau:


1

<domain>freetuts.net</domain>

Bạn hoàn toàn có thể bổ sung các thuộc tính vào các thẻ XML bằng cách sử dụng cú pháp sau:


1

<nodename ten_thuoc_tinh="giá trị">content</nodename>

Ví dụ bạn lưu trữ thông tin domain và chủ sở hữu của nó thì có thể lưu như sau:


1

<domain owner="Nguyễn Văn Cường" email="thehalfheart@gmail.com">freetuts.net</domain>

Khai báo Header (Chỉ thị xử lý):

Trên đầu mỗi file XML bạn phải khai báo một thẻ để thông báo version XML đang sử dụng (thường là version 1.0), và còn có thể chứa các thông tin về mã hóa ký tự hoặc các phụ thuộc bên ngoài khác (sẽ tìm hiểu sau). Giá trị của encoding (kiểu mã hóa ký tự) thuộc một trong các định dạng sau: UTF-8, UTF-16, ISO-10646-UCS-2, ISO-10646-UCS-4, ISO-8859-1 to ISO-8859-9, ISO-2022-JP, Shift_JIS, EUC-JP.
Cú pháp của thẻ chỉ thị xử lý như sau:


1

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

Như vậy với các ví dụ trên thì cấu trúc đúng sẽ phải là:


1
2

<?xml version="1.0" encoding="UTF-8"?>
<domain>freetuts.net</domain>

Và:


1
2

<?xml version="1.0" encoding="UTF-8"?>
<domain owner="Nguyễn Văn Cường" email="thehalfheart@gmail.com">freetuts.net</domain>

Root node:

Mỗi tài liệu XML nên có một thẻ ngoài cùng và ta gọi thẻ này là root node. Thẻ này sẽ khai báo tên chính của tài liệu XML.
Ví dụ mình cần lưu trữ danh sách domain thì có thể viết như sau:


1
2
3
4
5

<?xml version="1.0" encoding="UTF-8"?>
<domains>
    <domain owner="Nguyễn Văn Cường" email="thehalfheart@gmail.com">freetuts.net</domain>
    <domain owner="Nguyễn Văn Cường" email="thehalfheart@gmail.com">qa.freetuts.net</domain>
</domains>

Không có một quy tắc đặt tên nào cả mà quy tắt do lập trình viên đặt ra, tuy nhiên lời khuyên là bạn nên đặt tên sao cho ngữ nghĩa phù hợp với nội dung của file.
Phần này chúng ta sẽ tìm hiểu rõ hơn ở bài tiếp theo.

3. Lời kết

Về khái niệm XML là gì thì bạn nên tham khảo thêm ở trang trên trang W3C, riêng với bài thứ nhất này mục đích là giới thiệu cú pháp căn bản của một tài liệu XML nên mình không viết nhiều. Bài tiếp theo chúng ta sẽ tìm hiểu cấu trúc cây của tài liệu XML.