Chatbox

Các bạn vui lòng dùng từ ngữ lịch sự và có văn hóa,sử dụng Tiếng Việt có dấu chuẩn. Chúc các bạn vui vẻ!
09/05/2013 18:05 # 1
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Làm việc với XML


 

XPATH

XPATH được xem giống như câu lệnh query của SQL. Tuy nhiên điểm khác biệt chính là XPATH dùng để truy xuất thông tin từ file XML chứ không phải từ CSDLXPATH được sử dụng như là 1 đường dẫn để đi đến một phần tử hay thuộc tính nào đó trong XML.

           I.      Ưu điểm của XPATH: XPATH có ưu điểm chính:

Ø       Cú pháp đơn giản trong các trường hợp thông dụng

Ø       Trong bất cứ đường dẫn nào của XPATH chúng ta đều có thể đặt điều kiện.

Ø       Tất cả các nút chúng ta đều có cách để xác định duy nhất

      II.      Các dạng nút trong XPATH:

XPATH xem 1 văn bản XML như là cấu trúc dạng cây và tất cả các phần tử trong XML đều được xem như là 1 nút của cấu trúc cây này. Chúng ta 7 dạng nút

Ø       Root: thẻ root

Ø       Element: các thẻ trong XML

Ø       Attribute: thuộc tính của các thẻ

Ø       Text: chuỗi ký tự nội dung trong 1 thẻ, các chuỗi ký tự trong comment, attribute, PI không được xem là text node

Ø       Comment: ghi chú

Ø       Processing Instruction (PI)

Ø       Namespace

Ví dụ chúng ta có file XML như sau:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore>

Trong XML này chúng ta có

Ø       <book> nút root

Ø       <title>,<author>: nút element

Ø       lang=”en”: nút attribute

  III.      Mối quan hệ giữa các nút:

Ø       Parent: Mỗi nút Element và thuộc tính đều có 1 parent. Ví dụ các thẻ title, author, year, price có 1 parent là book

Ø       Children: Mỗi nút có thể có 0 hay nhiều children. Ví dụ bookstore có 1 children là book

Ø       Siblings: là các nút có chung parent. Ví dụ như title, author và sibling của nhau

Ø       Ancestors: parent của nút hay parent của parent của nút

Ø       Descending: child của nút, hay child của child của nút

    IV.      Cú pháp XPATH:

v     Truy xuất đến các nút

Ø       Để truy xuất đến các nút chúng ta dùng 1 trong các cú pháp sau:

Cú pháp

Mô tả

Tên nút

Truy xuất đến tất cả nút con của nút có tên khai báo

/

Truy xuất bắt đầu từ root

//

Truy xuất đến tất cả các nút con ở vị trí bất kỳ của nút hiện hành

.

Truy xuất nút hiện hành

..

Truy xuất nút parent của nút hiện hành

@

Truy xuất thuộc tính

 

Ø       Ví dụ chúng ta có file XML sau:

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

    <book>

                <title lang="eng">Harry Potter</title>

                <price>29.99</price>

    </book>

    <book>

                <title lang="eng">Learning XML</title>

                <price>39.95</price>

    </book>

</bookstore>

v     Các dạng truy xuất bằng XPATH

XPATH

Kết quả

bookstore

Chọn tất cả các nút con của thẻ <bookstore>

/bookstore

Truy xuất thẻ <bookstore>.

Ghi chú: khi chúng ta dùng dấu “/” để bắt đầu 1 XPATH, thì đường dẫn đó sẽ là đường dẫn tuyệt đối

bookstore/book

Chọn hết tất cả các thẻ <book> là thẻ con của thẻ <bookstore> (chỉ dưới 1 cấp)

//book

Chọn hết tất cả các thẻ <book> không quan tâm ở cấp nào, tính từ thẻ root

bookstore//book

Chọn hết tất cả các thẻ <book> là con của thẻ <bookstore> không quan tâm ở cấp nào

//@lang

Chọn hết tất cả các thuộc tính có tên là “lang”

 

v     Truy xuất theo chỉ số:

XPATH

Kết quả

/bookstore/book[1]

Truy xuất thẻ <book> đầu tiên là thẻ con của thẻ <bookstore>.

Lưu ý: đối với trình duyệt IE5 hoặc cao hơn thẻ con đầu tiên bắt đầu từ 0, tuy nhiên theo chuẩn W3C, thẻ con đầu tiên bắt đầu từ 1

/bookstore/book[last()]

Truy xuất thẻ <book> cuối cùng là thẻ con của thẻ <bookstore>

/bookstore/book[position()<3]

Truy xuất 2 thẻ con <book> đầu tiên của thẻ <bookstore>

//title[@lang]

Truy xuất tất cả các thẻ <title> có thuộc tính tên “lang” tính từ root

//title[@lang=”eng”]

Truy xuất tất cả các thẻ <title> có thuộc tính tên “lang” và giá trị của thuộc tính này “eng”

/bookstore/book[price>35.00]

Truy xuất tất cả các thẻ <book> là thẻ con của thẻ bookstore thỏa mãn điều kiện là trong thẻ <book> này có thẻ con <price> và giá trị của <price> là 1 số lớn hơn 35

/bookstore/book[price>35.00]/title

Truy xuất đến tất cả thẻ <title> là thẻ con của thẻ <book> thỏa mãn điều kiện trên

 

v     Các ký tự đại diện:

Ký tự

Ý nghĩa

Ví dụ

Kết quả

*

Tương ứng tất cả các element

/bookstore/*

 

//*

Truy xuất tất cả các element con của thẻ <boookstore>

Truy xuất tất cả các element trong XML

@*

Tương ứng tất cả các thuộc tính

/title[@*]

Truy xuất tất cả các thẻ <title> có bất kỳ thuộc tính nào

node()

Tương ứng nút bất kỳ

//node()

Truy xuất tất cả nút trong XML (Bao gồm element, text, attribute…)

 

Ø       Truy xuất bằng nhiều XPATH: dùng ký tự để liên kết. Ví dụ:

Cú pháp

Kết quả

//book/title |//book/price

truy xuất tất cả các thẻ <title> và thẻ <price> là thẻ con của tất cả các thẻ        <book>

//title | //path

truy xuất tất cả các thẻ <title> và thẻ <price> trong XML

/bookstore/book/title | //price

truy xuất tất cả các thẻ <title> là con của thẻ <book>, thẻ <book> là con của thẻ <bookstore> và tất cả các thẻ <price> trong XML

 

v     Truy xuất theo mối quan hệ các nút:

Ø       Chúng ta có thể truy xuất đến các nút thông qua mối quan hệ của các nút so với nút hiện hành. Sau đây là bảng tên các mối quan hệ và ý nghĩa

Tên mối quan hệ

Ý nghĩa

ancestor

Truy xuất đến các nút “tổ tiên” (nút “cha”, nút “ông nội”…) của nút hiện hành

ancestor-or-self

Như trên nhưng bao gồm luôn nút hiện hành

attribute

Truy xuất đến tất cả các thuộc tính của thẻ hiện hành

child

Truy xuất đến tất cả các nút con của thẻ hiện hành

descendant

Truy xuất đến tất cả các nút “con cháu” của nút hiện hành

descendant-orself

Như trên nhưng bao gồm nút hiện hành

following

Truy xuất đến tất cả các đối tượng phía sau tính từ dấu đóng thẻ của thẻ hiện hành

following-sibling

Truy đến các thẻ “anh em” phía sau của thẻ hiện hành

namespace

Truy xuất đến các nút namespace của nút hiện hành

parent

Truy xuất thẻ cha của thẻ hiện hành

preceding

Truy xuất đến tất cả các đối tượng phía trước thẻ hiện hành

preceding-sibling

Truy xuất thẻ “anh em” phía trước thẻ hiện hành

self

Thẻ hiện hành

 

Ø       Cú pháp truy xuất dựa trên mối quan hệ:

Tên_mối_quan_hệ::Tên_thẻ_cần_truy_xuất[chỉ số]

Ø       Ví dụ:

Ví dụ

Kết quả

child::book

Truy xuất đến tất cả thẻ <book> là con của thẻ hiện hành

attribute::lang

Truy xuất tất cả các thuộc tính “lang” của thẻ hiện hành

child::*

Truy xuất tất cả các thẻ con của thẻ hiện hành

attribute::*

Truy xuất tất cả các thuộc tính của thẻ hiện hành

child::text()

Truy xuất đến tất cả các nút text của thẻ hiện hành

child::node()

Truy xuất tất cả các nút con của nút hiện hành

descendant::book

Truy xuất tất cả các thẻ con cháu của thẻ hiện hành có tên là <book>

ancestor::book

Truy xuất đến tất cả các thẻ tổ tiên có tên là <book> của thẻ hiện hành

ancestor-or-self::book

Truy xuất đến tất cả các thẻ <book> là tổ tiên của thẻ hiện hành và cả thẻ hiện hành nếu nó là thẻ <book>

child::*/child::price

Truy xuất tất cả các thẻ <price> là thẻ cháu của thẻ hiện hành (dưới 2 cấp)

 

         V.      XPATH Expression:

XPATH Expression là những câu lệnh dùng để lấy gía trị từ trong cấu trúc cây của file XML. Thay vỉ chỉ dùngXPATH như là một dạng đường dẫn truy xuất đến các phần tử trong XML, người dùng có thể dùng XPATHExpression để thực hiện các công việc như đếm số phần tử, cộng các giá trị, so sánh giá trị …. XPATHExpression được xem như là 1 lệnh đơn trong các ngôn ngữ lập trình và mỗi lệnh chỉ tính toán 1 giá trị duy nhất

Có 4 dạng Expression trong XPATH Expression:

Ø       Node set: những lệnh dùng để lấy ra 1 tập hợp các nút chưa sắp xếp thỏa mãn 1 điều kiện nào đó

Ø       Boolean: XSLT cho phép tất cả các dạng data đều có thể chuyển thành dạng boolean

Ø       Number: những giá trị dạng số dùng để thực hiện các phép toán đơn giản, chúng ta cũng có thể chuyển đổi string hay boolean thành number khi cần thiết

Ø       String: là chuỗi các ký tự thuộc bảng mã Unicode, các dạng dữ liệu khác đều có thể chuyển sang dạng string qua hàm string().

Ø       Ghi chú: các hàm của XPATH có tiền tố mặc định là fn

v     Các hàm Node set:

Tên

Mô tả

fn:name()
fn:name(nodeset)

Lấy ra tên của node hiện hành hay lấy ra tên của node đầu tiên trong 1 tập hợp node nào đó

fn:local-name()
fn:local-name(nodeset)

Như trên nhưng không có prefix

fn:namespace-uri()
fn:namespace-uri(nodeset)

Lấy ra namespace của node hiện hành hay của node đầu tiên của tập hợp node nào đó

fn:root()
fn:root(node)

Lấy ra thẻ root của node hiện hành hay của 1 nút nào đó

 

v     Các hàm boolean:

Tên hàm

Mô tả

fn:boolean(arg)

Trả về kết quả boolean của 1 số, chuỗi hay 1 tập hợp các nút

fn:not(arg)

Trước tiên sẽ thi hành hàm fn:boolean(arg) như trên sau đó phủ định kết qủa đó

Example: not(true())
Result: false

fn:true()

Trả về giá trị true

Example: true()
Result: true

fn:false()

Trả về giá trị false

Example: false()
Result: false

 

v     Các hàm về số:

Tên

Mô tả

fn:number(arg)

Chuyển đổi chuỗi, boolean hay tập hợp của node thành số

Example: number('100')
Result: 100

fn:abs(num)

Trả về trị tuyệt đối của 1 số

Example: abs(3.14)
Result: 3.14

Example: abs(-3.14)
Result: 3.14

fn:ceiling(num)

Trả về số nguyên nhỏ nhất lớn hơn số “num”

Example: ceiling(3.14)
Result: 4

fn:floor(num)

Trả về số nguyên lớn nhất nhỏ hơn số “num”

Example: floor(3.14)
Result: 3

fn:round(num)

Hàm làm tròn

Example: round(3.14)
Result: 3

 

v     Hàm về chuỗi:

Tên

Mô tả

fn:string(arg)

Chuyển đổi từ số, boolean, tập hợp node thành chuỗi

Example: string(314)
Result: "314"

fn:compare(comp1,comp2)

So sánh 2 chuỗi, trả về -1 nếu comp1<comp2, 0 nếu comp1=comp2, 1 nếu comp1>comp2

Example: compare('ghi', 'ghi')
Result: 0

fn:concat(string,string,...)

Hàm nối chuỗi, phân cách nhau bằng khoảng trắng

Example: concat('XPath ','is ','FUN!')
Result: 'XPath is FUN!'

fn:string-join((string,string,...),sep)

Hàm nối chuỗi nhưng dấu phân cách sẽ được qui định bằng tham số “sep”

Example: string-join(('We', 'are', 'having', 'fun!'), ' ')
Result: ' We are having fun! '

Example: string-join(('We', 'are', 'having', 'fun!'))
Result: 'Wearehavingfun!'

Example:string-join((), 'sep')
Result: ''

fn:substring(string,start,len)
fn:substring(string,start)

Hàm lấy chuỗi con bắt đầu từ “start” với độ dài “len”, nếu không có “len” thì lấy từ “start” đến kết thúc chuỗi. Lưu ý: ký tự đầu tiên có vị trí là 1

Example: substring('Beatles',1,4)
Result: 'Beat'

Example: substring('Beatles',2)
Result: 'eatles'

fn:string-length(string)
fn:string-length()

Lấy độ dài chuỗi “string”, nếu không có tham số “string” sẽ lấy độ dài của nội dung node hiện hành

Example: string-length('Beatles')
Result: 7

fn:translate(string1,string2,string3)

Biến đổi “string1” bằng cách thay thế các ký tự trong “string2” là các ký tự có trong  “string1” bằng các ký tự của “string3”

Example: translate('12:30','30','45')
Result: '12:45'

Example: translate('12:30','03','54')
Result: '12:45'

Example: translate('12:30','0123','abcd')
Result: 'bc:da'

fn:contains(string1,string2)

Trả về giá trị true nếu “string2” là chuỗi con của “string1”

Example: contains('XML','XM')
Result: true

fn:matches(string,pattern)

Trả về true nếu chuỗi “string” đồng dạng với “pattern”

Example: matches("Merano", "ran")
Result: true

fn:replace(string,pattern,replace)

Thay thế các ký tự trong “pattern” của “string” bằng “replace”

Example: replace("Bella Italia", "l", "*")
Result: 'Be**a Ita*ia'

Example: replace("Bella Italia", "l", "")
Result: 'Bea Itaia'

 

Tham khảo từ nguồn

Aptech Courses: XML By Schema

W3School: XPATH Tutorial

Nguồn: http://www.bodua.vn/




 
09/05/2013 18:05 # 2
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Giới thiệu về XML

Bài viết này sẽ lần lượt giới thiệu với bạn một số khái niệm cơ bản trong XML, cách tạo 1 XML trong Netbean và những quy ước cơ bản cần biết khi xây dựng một tài liệu XML

           I.      Lịch sử hình thành XML:

Trước khi XML ra đời đã có nhiều kiểu định dạng văn bản điện tử như GML (Generalized Markup Language) của IBM, SGML (Standard Generalized Markup Language) củaANSI vào năm 1980 và HTML (Hyper Text Markup Language). Tuy nhiên các phương pháp này có nhiều nhược điểm như GML và SGML không thích hợp để truyền dữ liệu trên Web,HTML chủ yếu chú trọng vào việc làm cách nào hiển thị thông tin hơn là chú trọng đến nội dung truyền tải. Chính vì vậy XML (eXtensible Markup Language) được tạo ra để giải quyết các nhược điểm trên. So sánh giữa HTML và XML:

HTML

XML

HTML được thiết kế cho mục đích trình bày dữ liệu

XML được thiết kế cho mục đíc lưu trữ và truyền tải dữ liệu giữa các hệ thống khác nhau

HTML dùng để hiển thị dữ liệu và chú trọng vào việc dữ liệu được hiển thị như thế nào

XML dùng để mô ta dữ liệu và chú trọng vào nội dung của dữ liệu

HTML hiển thị thông tin

XML mô tả thông tin

 

      II.      Đặc trưng của XML:

-   XML là những chữ cái viết tắt của cụm từ eXtensible Markup Language

-   XML dùng để phục vụ cho việc mô tả dữ liệu (thông tin lưu trữ bao gồm những gì, lưu trữ ra sao) để các hệ thống khác nhau có thể đọc và sử dụng những thông tin này một cách thuận tiện

-   Các thẻ (tag) của XML thường không được định nghĩa trước mà chúng được tạo ratheo quy ước của người, (hoặc Chương trình) tạo ra XML theo những quy ước của chính họ

-   XML sử dụng các khai báo kiểu dữ liệu DTD (Document Type Definition) hay lược đồ Schema để mô tả dữ liệu.

  III.      Ưu điểm của XML:

-   Dữ liệu độc lập là ưu điểm chính của XML. Do XML chỉ dùng để mô tả dữ liệu bằng dạng text nên tất cả các chương trình đều có thể đọc được XML.

-   Dễ dàng đọc và phân tích dữ liệu, nhờ ưu điểm này mà XML thường được dùng để trao đổi dữ liệu giữa các hệ thống khác nhau

-   Dễ dàng để tạo 1 file XML

-   Lưu trữ cấu hình cho web site

-   Sử dụng cho phương thức Remote Procedure Calls (RPC) phục vụ web service

    IV.      Cấu trúc của 1 file XML:

Một file XML thông thường bao gồm 2 phần:

-    Document Prolog: lưu trữ metadata của XML gồm 2 phần: khai báo XML và khai báo kiểu dữ liệu trong XML. Phần khai báo XML (XML declararion) bao gồm các thông tin về version của XML, charset, encoding…. Phần khai báo kiểu dữ liệu trong XML (DTD) dùng để khai báo cấu trúc của các thẻ dùng trong XML

-    Root element hay còn gọi là Document Element: chứa tất cả các phần tử và nội dung của nó. 1 phần tử của XML phải có thẻ mở và thẻ đóng

         V.      Tạo XML trong Netbean:

-    Right Click vào tên project chọn New/Other… trong khung Categories ta chọnXML và trong danh sách của Files types, bạn hãy chọn XML Document rồi nhấn vào nút Next:

-   Ở bước thứ 2 chúng ta đặt tên XML và folder lưu trữ XML, nếu Folder để trống thì mặc định sẽ lưu tại Folder của project

-   Ở bước thứ 3 chúng ta sẽ xác định dạng XML cần tạo thông qua 1 trong 3 lựa chọn như hình:

-   Well-formed Document: tạo XML đúng cú pháp

-   DTD-Constrained Document: Tạo XML có khai báo DTD (Document type definition) để mô tả cấu trúc dữ liệu trong XML

-   XML-Schema-Constrained Document: Tạo XML có sử dụng “lược đồ” Schema để kiểm tra tính hợp lệ của XML

-   Ở bài viết này, chúng ta sẽ chọn Well-formed Document và Finish

-   Sau khi Finish, bạn hãy nhập dữ liệu như hình sau:

-   Như quan sát hình trên chúng ta thấy 1 file XML được bắt đầu bằng khai báo:

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

-   <?xml: khai báo để chương trình phân tích XML biết được đây là 1 file xml (Chương trình phân tích XML có thể là trình duyệt, chương trình của bạn hay một ứng dụng có khả năng đọc và phân tích định dạng XML để lấy dữ liệu từ nó)

-   version = “1.0” khai báo version của XML

-   encoding = “UTF-8”: bảng mã dùng trong file XML

    VI.      Well-formed XML Document

Một file XML được xem là đúng cú pháp khi thỏa mãn tất cả các điều kiện sau:

-   Chỉ có duy nhất có một phần tử thuộc cấp cao nhất trong tài liệu, còn gọi là nút gốc (root element)

-   Mỗi một thẻ mở đều phải có thẻ đóng và tên thẻ là phân biệt hoa thường

-   Các thẻ khi đóng phải theo đúng trình tự (mở sau đóng trước)

-   Tên thẻ không nên có khoảng trắng, không nên bắt đầu bằng “xml

-        Các thuộc tính (atributes) của một thẻ luôn luôn tồn tại theo cặp theo quy ước:<tên> = “<giá_trị>”; không nên đặt tên thuộc tính trùng nhau, và giá trị của thuộc tính phải đặt trong cặp dấu nháy kép hay nháy đơn. Tên của thuộc tính (atribute) sẽ theo qui luật đặt tên giống như đối với tên thẻ

-        Các thẻ (tag) trong XML có thể lồng nhau (Thẻ này có thể chứa nhiều thẻ khác ở bên trong)

VII.      Một số thành phần khác trong XML:

1. Comment: như chúng ta đã biết, trong lập trình thì comment chính là dữ liệu do lập trình viên tự tạo ra trong chương trình của mình để lập nên những chú thích cần thiết để sau này khi đọc lại mã lệnh có thể hiểu mã lệnh một cách nhanh nhất. Trong XML cũng vậy, để tạo chú thích cho nội dung trong XML bạn cũng có thể tạo comment theo những quy ước sau

-   Comment trong XML bắt đầu bằng <!-- và kết thúc bằng -->. Một số lưu ý trong Comment:

-   Trong nội dung của comment không nên có ký tự “-“

-   Không nên đặt comment trong 1 thẻ (Thuộc giới hạn mở thẻ … đóng thẻ – quy ước này ám chỉ những “thẻ con” những thẻ chỉ có nội dung mà không chứa các thẻ khác lồng bên trong nó)

-   Không nên đặt comment trước dòng khai báo <?xml….?>

2. Processing Instructions:  Là thông tin dành cho chương trình đang sử dụng file XML. Thành phần này không tuân theo các qui định của XML. Khi XML được đọc, các thông tin của đối tuợng này sẽ được đọc lên và truyền cho application

-        Cú pháp: <?PITarget <instruction>?>

          Trong đó:

-   PITarget: tên của application nhận thông tin của processing instruction

-   Instruction: nội dung sẽ truyền cho PITarget

3. Kiểu dữ liệu: Dữ liệu mô tả giá trị trong các tag thuộc tập tin XML được nhận dạng dưới dạng chuỗi ký tự, trong XML dữ liệu chuỗi được chia làm 2 dạng là CDATA và PCDATA

-   PCDATA (Parsed character data): là dữ liệu sẽ được đọc và phân tích bởi chương trình phân tích XML, trong PCDATA chúng ta không được phép dùng các ký tự đặc biệt có liên quan đến việc xác định các thành tố của XML như <,>,&, …

-   CDATA (Character data): dữ liệu dạng ký tự không được phân tích bởi một XML Parser vì thế có thể chứa bất kỳ các ký tự đặc biệt nào. CDATA luôn phải bắt đầu bằng “<![CDATA[” và kết thúc bằng “]]>

4. Entity:   Do chúng ta không thể sử dụng các ký tự đặc biệt đối với dữ liệu trong XML cho nên XML xây dựng các đối tuợng thay thế cho các ký tự đặc biệt; Các đối tượng này được gọi là các entities:

Entity

Output

&lt;

&gt;

&amp;

&

&apos;

&quot;

 

Bạn có thể tham khảo thêm các entities được phép sử dụng trong XML và HTML tại Wikipedia

5. Attributes:  Khi các thẻ (tag) sử dụng để mô tả cho dữ liệu trong XML cần phải được biểu diễn thông tin nhiều hơn nữa, XML cho phép người tạo có thể sử dụng thuộc tính (attributes) để bổ xung cho việc mô tả dữ liệu chi tiết đối với các thẻ. Ngoài mục đích giúp cho việc mô tả thông tin đầy đủ hơn đối với dữ liệu của các thẻ (tag), thuộc tính còn có tác dụng hỗ trợ cho việc phân biệt giữa các thành tố cùng tên với nhau trong một tập tin XML. Về nguyên tắc, thuộc tính thường phải tồn tại từng cặp mô tả cho tên và giá trị của nó theo quy ước:<attName> = attValue”. Cú pháp đầy đủ mô tả cho 1 tag với attributes đi kèm được mô tả như sau

            <elementName attName1 = “attValue1” attName2=“attValue1” …>
                      …
            </elementName>

Cũng giống như quy ước về đặt tên cho các thẻ (tag) trong XML, tên của thuộc tính (atributes name) cũng phân biệt chữa hoa, thường và luôn bắt đầu bởi ký tự hay dấu ghạch dưới đồng thời không cho phép sử dụng khoảng trắng (white space). Dưới đây là 1 mô tả cho việc sử dụng thuộc tính bên trong 1 tag.

<!-- Mô tả thông tin chi tiết của tag -->
<ban  dai= “2.8m” rong = “1.2m” cao= “0.8m” vatLieu = “gỗ xoan đào”>
            Bàn ăn gia đình
</ban>

Trong ví dụ trên, bạn thấy ta có tag <ban> với các thuộc tính để mô tả chi tiết cho dữ liệu có tên “Bàn ăn gia đình” là dairongcaovatLieu cùng với các giá trị cần thiết. Đây là ví dụ về tag do chúng ta tự định nghĩa, tôi sử dụng 1 ví dụ khác ở dưới đây để minh họa việc sử dụng tag có dùng attributes mà có lẽ hầu như những ai biết về HTML đều đã từng sử dụng

  <a href="http://www.bodua.com" title="BODUA Group" target="_blank">
            Liên kết đến WebSite BODUA Group
 </a>

VIII.      Ứng dụng của XML

Như ý nghĩa chính của một tài liệu XML đã đề cập ở trên, trong thực tế XML thường được sử dụng cho các mục đính như sau:

-          Mô tả cấu hình của 1 WebSIte hay 1 ứng dụng (Điều này là dễ hiểu nếu bạn là 1 tập trình viên ASP.NET, chắc chắn bạn biết tập tin web.config; nếu bạn là người chuyên về xây dựng web application bằng JSP chắc hẳn bạn rất rành về faces-config.xml và web.xml và còn nhiều ứng dụng khác nữa)

-          Cung cấp tin, dữ liệu cho các hệ thống khác nhau để có thể khai thác, sử dụng. Điều này có thể thấy dễ hiểu nhất khi bạn sử dụng tính năng cung cấp RSS của các web site có cung cấp tính năng dạng này như : www.vnExpress.net, www.tuoitre.vn, … để lấy tin tự động như giá vàng, tin thể thao, thời sự, tin thời tiết …

-          Trong 1 tình huống khác, bạn xây dựng 1 ứng dụng cho việc điều khiển và giám sát sản xuất cho 1 công ty XYZ nào đó và công ty mẹ của công ty kia yêu cầu phần mềm giám sát và điều khiển sản xuất của bạn phải cung cấp dữ liệu dạng XML về cho hệ thống chính của họ vào cuối mỗi ngày, bao gồm những thông tin về sản lượng, lượng nguyên liệu đã sử dụng, … để họ thống kê dữ liệu trên toàn hệ thống. Thế là chương trình của bạn phải tạo XML để thông tin của các nhà máy con có thể cung cấp cho hệ thống chính quản lý

Đũa cả – Đũa cùi

www.bodua.com

Tài liệu tham khảo : Giáo trình Aptech

Tài liệu tham khảo thêm về XML tại W3school




 
09/05/2013 18:05 # 3
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

XML Namespaces

           I.      Đặt vấn đề

Như đã trình bày trong bài “Giới thiệu về XML”, chúng ta thấy XML cho phép người tạo ra nó tự đặt tên đối với các thành phần (Elements) và thuộc tính (Attributes) đi kèm theo những quy định riêng của mình. Đây là một ưu điểm lớn của XML giúp cho người tạo ra nó có thể xây dựng và mô tả dữ liệu một cách chủ động, tuy nhiên chúng ta sẽ gặp phải vấn đề khi file XML này được sử dụng chung trên một hệ thống mà dữ liệu của nó được thu thập từ nhiều nguồn khác nhau.

Hãy xem xét tình huống sau:

Một người tạo file XML đặt tên 1 thành phần trong cấu trúc XML của mình là <table> dùng để mô tả đặc điểm của 1 cái bàn với các thuộc tính: length (dài), width (rộng), height (cao),material (vật liệu) …. Một người khác tạo XML khác và đặt tên thành phần trong XML của mình cũng là <table> nhưng dùng để mô tả một bảng dữ liệu với các thuộc tính: width (bề rộng của bảng), height (chiều cao của bảng) …. Vấn đề sẽ xảy ra khi hệ thống tiếp nhận cùng lúc cả 2 file XML này để lấy số liệu, rất khó để phân biệt các cấu trúc dữ liệu của XML trong tình huống này; Chính vì thế một yêu cầu cần thiết được đặt ra là người tạo XML phải mô tả tên thành phần và thuộc tính sao cho những thành phần này phải là duy nhất trong mỗi cấu trúc XML khi có sự tổng hợp thông tin từ nhiều nguồn khác nhau.

XML mô tả thông tin của cái bàn

<table length=”2.5m” width=”1.2m” height=”0.9m”>
  <name> Italian coffee style  </name>
  <material> training oval wood </material>
</table>

XML mô tả thông tin của bảng dữ liệu

<table width=”100%” height=”80%”>
  <tr>
      <td>Orange</td>
      <td>Strawberry</td>
  </tr>
</table>

Hoặc trong 1 ví dụ khác đề cập ở dưới đây, hệ thống của chúng ta thu nhận thông tin về ca sĩ (singer) và lượng đĩa hát (CD) được bán ra từ 2 hệ thống khác nhau, trong đó cấu trúc XML mô tả cho thông tin về đĩa hát (CD) sử dụng cấu trúc tag như sau <name> : mô tả thông tin cho tên của đĩa hát và trong cấu trúc XML mô tả cho thông tin của ca sĩ (singer) thì tag <name> : mô tả cho tên của ca sĩ tương ứng. Cũng giống như ví dụ trước đó, khi cả 2 loại thông tin này được tổng hợp vào trong 1 cấu trúc XML mới tại nơi tiếp nhận thì vấn đề đặt ra là làm sao để phân biệt được tag <name> nào dùng để mô tả cho thông tin của đĩa hát và tag <name> nào dùng để mô tả cho thông tin là tên gọi của ca sĩ ?!.

Để giải quyết vấn đề trên, trong XML hình thành 1 khái niệm và cho phép sử dụng gọi làNamespace nhằm giúp cho việc truy xuất đến các thành phần (Element) một cách tường minh trong những trường hợp có thể gây ra trùng tên trong cùng 1 file XML.

      II.      Định nghĩa Namespace:

-         Namespace là tập hợp các tên dùng để cho phép kết hợp với các thành phần và thuộc tính bên trong một tài liệu XML nhằm giải quyết nguy cơ xung đột về tên của các phần tử khi thông tin được tổng hợp từ nhiều nguồn khác nhau, thông qua Namespace, trình duyệt có thể kết hợp các file XML từ nhiều nguồn khác nhau, có thể truy xuất đến DTD để kiểm tra cấu trúc của XML nhận được có thực sự thích hợp, từ đó xác định được tính hợp lệ của XML tương ứng.

-        Tóm lại Namespace được xem như là 1 kỹ thuật kết hợp một số tên thành phần cùng với thuộc tính thành 1 một nhóm, mỗi nhóm sẽ có 1 tên xác định. Do việc kết hợp giữa 2 thành phần theo cách tên_nhóm:tên_element cho nên sẽ đảm bảo không xảy ra trường hợp trùng tên trong XML. Tên nhóm chính là thành phần “prefix” trong tên mới.

Như vậy, để giải quyết vấn đề đụng độ về tên vừa đề cập ở trên trong 1 cấu trúc XML hợp nhất, ta có thể làm như sau

<p:table length=”2.5m” width=”1.2m” height=”0.9m”>
  <p:name> Italian coffee style  </p:name>
  <p:material> training oval wood </p:material>
</p:table>
<s:table width=”100%” height=”80%”>
  <s:tr>
      <s:td>Orange</s:td>
      <s:td>Strawberry</s:td>
  </s:tr>
</s:table>

Có thể thấy do sử dụng nameSpace dưới dạng prefix kết hợp với tên của thành phần, tất cả các tag khi kết hợp trong cùng 1 cấu trúc ở trên đã được phân biệt một cách rõ ràng

      III.      Cú pháp khai báo Namespace và thuộc tính xmlns

Cú pháp

<nameSpacePrefix:elementName  xmlns:nameSpacePrefix = “URI”>
      …
</nameSpacePrefix:elementName>

Trong đó

-          nameSpacePrefix: chính là phần viết tắt đại diện cho nameSpace được sử dụng như là tiền tố (prefix) cho các tag trong cùng nhóm

-          xmlns: là thuộc tính được sử dụng để khai báo và chỉ ra nameSpace cần thiết sẽ áp dụng trong cấu trúc XML

-          URI (Uniform Resource Identifier): Chính là chuỗi ký tự mô tả cho 1 nguồn tài nguyên nào đó trên Internet

Ứng dụng cú pháp trong khai báo NameSpace

<?xml version=”1.0” encoding=” ISO-8859-1” standalone=”yes”?>
<dataCombination xmlns:p=”http://www.bodua.com/furniture/”
                 xmlns:s=”http://www.bodua.com/statistics/”
      <p:table length=”2.5m” width=”1.2m” height=”0.9m”>
        <p:name> Italian coffee style  </p:name>
        <p:material> training oval wood </p:material>
      </p:table>
      <s:table width=”100%” height=”80%”>
        <s:tr>
           <s:td>Orange</s:td>
           <s:td>Strawberry</s:td>
        </s:tr>
      </s:table>
</dataCombination>

Diễn giải cho việc sử dụng URI trong cú pháp

Vì lý do vẫn có khả năng tiền tố (prefix) có thể trùng nhau trong quá trình xây dựng những cấu trúc XML lớn, cho nên khi khai báo nameSpace thì thành phần prefix thường sẽ được gắn với một URI nào đó. Như lý thuyết đã đề cập ở trên, URI thường là 1 chuỗi ký tự mô tả cho 1 định danh có thực trên internet, thông thường URI phổ biến nhất mà mọi người đều biết đến chính là URL (Uniform Resource Loacation) và đương nhiên các URL thì luôn luôn là duy nhất, chính vì điều này mà nameSpace định nghĩa theo cách này cũng trở thành duy nhất, không thể bị trùng.

-    Dưới đây là 1 minh họa khác về khai báo NameSpace có sử dụng prefix kết hợp vớiURL

-    Hoặc chúng ta có thể khai báo Default Namespaces như sau mà không sử dụngprefix:

-    Tình huống dưới đây chúng tôi muốn giới thiệu đến bạn việc ứng dụng XML nameSpace đối với các tag sử dụng trong 1 tập tin HTML kết hợp với XSLT để chuyển đổi thông tin của XML thành HTML cho trang Web (Ví dụ này sao chép lại từ W3school.com)

Đũa cả – Đũa cùi

www.bodua.com

Tài liệu tham khảo : Giáo trình Aptech

Tài liệu tham khảo thêm về XML tại W3school




 
09/05/2013 18:05 # 4
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

DOM và SAX

Bài viết này sẽ trình bày các mô hình khác nhau để xem 1 tài liệu như mô hình tuyến tính, mô hình cây và mô hình đối tượng. Đồng thời bài viết cũng giới thiệu khái niệm phân tích XML và các kỹ thuật tiêu biểu là DOM vàSAX.

           I.      Các dạng mô hình:

Dữ liệu trong XML có thể được phân tích dựa trên nhiều mô hình khác nhau. Có 3 mô hình chính dùng để phân tích dữ liệu trong XML:

Ø       Mô hình tuyến tính (Linear): theo mô hình này dữ liệu được duyệt theo dạng đường thẳng, mô hình chỉ phù hợp với các dạng dữ liệu tĩnh không có sự thay đổi. Ví dụ như ta muốn tìm thông tin trong 1 cuốn sách trong thư viện chúng ta bắt đầu từ chủ đề của sách, đến tên sách, đến trang thứ mấy của sách và dòng thứ mấy. Tuy nhiên nếu cuốn sách đó được tái bản hay chuyển sang dạng khác thì mô hình này không còn thích hợp

Ø       Mô hình cây (Tree Model): như chúng ta đã biết XML có dạng cấu trúc phân cấp vì thế chúng ta có thể biểu diễn dữ liệu trong XML theo cấu trúc cây. Cấu trúc này có ưu điểm là chúng ta có thể xác định được các mối quan hệ giữa các phần tử với nhau. Ví dụ về mô hình này:

XML:

Cấu trúc cây:

Ø       Mô hình đối tượng: Mô hình đối tượng XML là tập hợp các đối tượng dùng để truy xuất và thao tác với các dữ liệu trong XML. Trong mô hình này dữ liệu cũng được tổ chức thành dạng cấu trúc cây cùng với các nút. Các đối tượng có nhiều thuộc tính và phương thức để chúng ta có thể quét cấu trúc cây XML và các phần tử trong cây.

      II.      Parsers:

1. Khái niệm:

Parser là 1 gói phần mềm, 1 thư viện hay 1 công cụ dùng để trước hết phân tích dữ liệu trong file XML và sau đó chuyển đổi dữ liệu này thành dạng dữ liệu mà các phần mềm khác có thể sử dụng được.

2. Các kỹ thuật phân tích: có 2 kỹ thuật phân tích dữ liệu XML

Ø       Phân tích dựa trên sự kiện: theo kỹ thuật này dữ liệu trong XML sẽ được đọc tuần tự từ trên xuống. Mỗi lần đọc 1 phần của dữ liệu sẽ được đưa vào phân tích ví dụ như 1 elementSimple APIfor XML (SAX) và Streaming API for XML (StAX) được xây dựng trên kỹ thuật này

Ø       Phân tích dựa trên đối tượng: theo kỹ thuật này dữ liệu trong XML sẽ được đọc và phân tích trên bộ nhớ theo sơ đồ cây XMLDocument Object Model (DOM) được xây dựng theo kỹ thuật này.

Ø       Cả 3 kỹ thuật SAXStAX và DOM đều có ưu nhược điểm khác nhau, do đó việc chọn lựa là tùy theo tình huống

DOM:

Ưu điểm

Nhược điểm

ü       Dễ dàng sử dụng

ü       Dễ dàng quét các phần tử trong XML

ü       Có thể truy xuất ngẫu nhiên

ü       Việc phân tích chỉ làm 1 lần

ü       Tốn bộ nhớ

 

SAX, StAX:

Ưu điểm

Nhược điểm

ü       Ít tốn bộ nhớ, StAX dễ làm hơn SAX

ü       Không có công cụ để quét các phần tử trong XML

ü       Không thể truy xuất ngẫu nhiên

ü       Không hỗ trợ namespace, không thể thêm sửa xóa XML

 

  III.      Giới thiệu về DOM:

1. Khái niệm:

Document Object Model là một phương pháp tiếp cận dữ liệu từ XML, trong đó tất cả các thành phần củaXML như thẻthuộc tínhtext… đều được xem như là các đối tượng. Dựa vào các đối tượng này mà chúng ta có thể trích xuất thông tin, thay đổi thông tin hay truy vấn thông tin dựa vào các hàm mà đối tượng cung cấp.

W3C DOM là tiêu chuẩn mà W3School giới thiệu. Tiêu chuẩn này không phụ thuộc vào hệ điều hành hay ngôn ngữ lập trình. W3C DOM được chia làm 3 phần: Core DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản; XML DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản XML; HTML DOM là tập hợp các đối tượng dùng cho cấu trúc 1 văn bản HTML.

2. Các đối tượng trong DOM:

Tất cả các thành phần trong XML đều được xem như là 1 “node”. Trong đó root là document node, các thẻ là element node, thuộc tính là attribute node, text là text node, ghi chú là comment node….

Khi parser đọc XML thành đối tượng DOM trên bộ nhớ chúng ta sẽ có 1 cấu trúc cây với các đối tượng là cácnode và trên cấu trúc này chúng ta sẽ thấy mối quan hệ phân tầng giữa các node. Trên cùng là thẻ root (document node) từ node này chúng ta có thẻ rẻ nhánh đến các tầng thấp hơn của cấu trúc cây cho đến khi chúng ta chạm tới text node là tầng thấp nhất của cấu trúc này.

Mối quan hệ giữa các node được mô tả bằng thuật ngữ “parent” và “child” (cha và con). Thuật ngữ “leafnode” dùng để chỉ các node không có child node. Chúng ta có ví dụ sau mô tả việc chuyển đổi từ XML sang DOM:

Ø       File XML:

Ø       Cấu trúc DOM đọc từ file XML trên:

Do DOM là tiêu chuẩn của W3School không phụ thuộc vào ngôn ngữ lập trình do đó tất cả các ngôn ngữ lập trình đều có thể dùng tiêu chuẩn này để đọc dữ liệu từ XML. Trong phạm vi bài này tôi chỉ giới thiệu khái niệm về DOM, còn ứng dụng ngôn ngữ lập trình để dùng DOM truy xuất nội dung XML tôi sẽ giới thiệu ở bài sau.

    IV.      Giới thiệu về SAX:

Simple API for XML (SAX) là một phương pháp phân tích dữ liệu XML dựa vào sự kiện trong quá trình đọc file XML từ trên xuống dưới. Như vậy để dùng phương pháp này các ngôn ngữ lập trình cần định nghĩa ra cácsự kiện và các hàm tương ứng với từng sự kiện. Khi đó người lập trình sẽ viết class dựa trên các hàm mà ngôn ngữ lập trình cung cấp và dùng class này để phân tích dữ liệu XML. Trong quá trình phân tích, khi gặp sự kiện nào parser sẽ gọi các đoạn code trong hàm tương ứng sự kiện để thực thi. Ví dụ như trong Java, khi parser gặp sự kiện mở thẻ, parser sẽ gọi lại các đoạn code trong hàm “startElement” để thi hành

Một điểm cần lưu ý rằng SAX không ghi nhớ XML như một cấu trúc cây trên bộ nhớ. SAX chỉ xây dựng cấu trúc của nhiệm vụ đang thi hành trên bộ nhớ do đó SAX sẽ thực hiện nhanh hơn và ít tốn tài nguyên hơn

Tham khảo từ nguồn

Aptech Courses: XML By Example

W3School: XML DOM Tutorial




 
09/05/2013 18:05 # 5
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Ví dụ dùng DTD và SAX để validate XML

Trong ví dụ này chúng ta sẽ tạo một file XML có dùng DTD để validation, sau đó chúng ta sẽ dùng SAX để validate XML ứng với DTD.

           I.      Tạo DTD:

Trong ví dụ này chúng ta xây dựng 1 DTD cho file XML lưu trữ thông tin tất cả sách trong 1 thư viện có các yêu cầu sau:

-        Thẻ root: thuVien

-        Trong thẻ root có ít nhất 1 thẻ <sach>

-        Trong thẻ <sach> là các thẻ con theo thứ tự sau: id, ten, tacGia, nhaXuatBan, gia. Trong đó, id, ten, tacGia là những thẻ bắt buộc phải có, nhaXuatBan, gia xuất hiện tối đa 1 lần

-        Trong thẻ <sach> có 2 thuộc tính là theLoai và ngonNgu, trong đó giá trị của thuộc tính thể loại là một trong các giá trị sau:KhoahọcGiảiTríTinHọc, thuộc tính ngonNgu có thể có hoặc không.

-        Khai báo 2 Entity xuất hiện thường xuyên trong XML cho giá trị “Nhà Xuất Bản Trẻ” và “Nhà Xuất Bản Giáo dục

Hình sau là đoạn code cho file DTD:

      II.      Tạo XML:

  III.      Tạo class ErrorHandler:

    IV.      File java:

-         Trong quá trình thi hành nếu có các lỗi xuất hiện chúng ta sẽ có các thông báo như sau:

Tham khảo từ nguồn

Herong's Tutorial Notes On XML Technologies




 
09/05/2013 18:05 # 6
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Ví dụ về SAX

Như giới thiệu trong bài DOM và SAXSAX là một phương pháp phân tích XML dựa trên sự kiện. Quá trình phân tích sẽ đọc XML từ trên xuống, và ứng với mỗi sự kiện parser sẽ gọi hàm tương ứng của sự kiện để thi hành. Trong bài này chúng ta sẽ làm 1 ví dụ dùng SAX phân tích 1 file XML dựa trên API mà Java cung cấp

           I.      Giới thiệu về ContentHandler:

ContentHandler là interface quan trọng nhất của SAX trong JavaInterface này định nghĩa tất cả các hàm tương ứng với từng sự kiện trong quá trình đọc XML. Ví dụ class implements interfaceContentHandler

Như vậy chúng ta thấy trong ví dụ trên là tất cả các hàm mà ContentHandle cung cấp cho tất cả các sự kiện trong quá trình đọc XML. Chúng ta có 1 số hàm quan trong sau:

-         startDocument(): hàm sẽ thực thi khi parser đọc đến dòng mở thẻ root

-         endDocument(): hàm sẽ thực thi khi parser đọc đến dòng đóng thẻ root

-         startElement(): hàm sẽ thực thi khi đọc đến dòng mở 1 thẻ bất kỳ

-         endElement(): hàm sẽ thực thi khi đọc đến dòng đóng thẻ bất kỳ

-         characters(): hàm sẽ thực thi khi đọc đến 1 text bất kỳ trong 1 thẻ nào đó

      II.      Giới thiệu về ErrorHandler:

ErrorHandler là 1 interface dùng để thông báo lỗi trong quá trình phân tích XML. Chúng ta có 3 dạng lỗi khác nhau

-         fatalError: là lỗi chết người không thể cứu chữa. Khi gặp lỗi này quá trình phân tích bắt buộc phải dừng lại. Lỗi này xảy ra trong trường hợp XML bị sai lỗi cú pháp (mở thẻ không đóng thẻ…) hay lỗi dòng khai báo đầu tiên.

-         error: lỗi thông thường, lỗi này xảy ra trong các trường hợp sai validation XML, nếu lỗi này xuất hiện quá trình phân tích có thể tiếp tục, tuy nhiên chúng ta nên dừng lại như fatalError

-         warning: cảnh báo, xảy ra khi DTD khai báo trùng element, khi có cảnh báo chúng ta có thể tiếp tục quá trình phân tích.

-         Sau đây là ví dụ ErrorHandler, ví dụ này sẽ dùng cho các ví dụ tiếp theo

  III.      Giới thiệu về DefaultHandler class:

Như giới thiệu phía trên ContentHandler là 1 interface. Vì là interface nên chúng ta cần khai báo tất cả các hàm của interface dù chúng ta không cần thiết. Vì thế Java cung cấp cho chúng Class DefaultHandlerimplements ContentHandler, chúng ta chỉ cần extends từ class này và override những hàm cần thiết.

    IV.      Ví dụ:

-         Trong ví dụ này chúng ta sẽ tạo 1 file XML như sau

-         Chúng ta tạo 1 java class dùng SAX đọc XML dùng để in ra màn hình ID và Name của từng sinh viên như sau:

-         Trong class này chúng ta sẽ viết code cho sự kiện mở thẻ, khi đó là thẻ <ID> chúng ta xuất ra màn hình dòng ID: idSinhVien, khi đó là thẻ <name> chúng ta in ra màn hình Ten: tenSinhVien. Như vậy chúng ta cần override lại hàm startElement (cho sự kiện mở thẻ) và characters (cho sự kiện text)

-         Để override 1 hàm chúng ta làm như sau: R.C vào màn hình chọn Insert Code, chọn OverrideMethods.. và chọn như hình sau:

-          Sau khi chúng ta Generate, khai báo như hình sau:

-         Sau đó chúng ta viết code cho hàm main như sau:

-         Khi thi hành chúng ta có kết quả sau:

-         Trong trường hợp XML có lỗi chúng ta sẽ thấy thông báo sau:




 
09/05/2013 18:05 # 7
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Ví dụ DOM dùng Java Script

Như đã giới thiệu trong bài DOM và SAX, tất cả các ngôn ngữ lập trình đều có thể dùng DOM để đọc dữ liệu từ file XML. Trong phạm vi bài viết này tôi sẽ minh họa việc dùng DOM bằng Java script.

           I.      Giớu thiệu về Microsoft XML DOM objects:

v      Các Object của Microsoft XML DOM:

Sau đây là bảng các class và interface mà Microsoft cung cấp tương ứng với các đối tượng của W3CDOM:

Tên DOM Object

Interface

Mô tả

DOMDocument

IDOMDocument

Object đại diện root của XML

XMLDOMNode

IXMLDOMNode

Object đại diện cho 1 node của XML tree

XMLDOMNodeList

IXMLDOMNodeList

Tập hợp các node

XMLDOMNamedNodeMap

IXMLDOMNamedNodeMap

Tập hợp các thuộc tính của node

XMLDOMParseError

IXMLDOMParseError

Trả về thông tin của error cuối cùng xuất hiện trong quá trình phân tích

 

      II.      Thuộc tính và hàm của các DOM Object:

1. DOMDocument: đại diện cho thẻ root của XML, là con đường chính để chúng ta truy xuất vào dữ liệu XML

a. Thuộc tính: bảng sau giới thiệu 1 số thuộc tính cơ bản của DOMDocument

Thuộc tính

Mô tả

IE

F

O

async

Qui định có cho phép việc download bất đồng bộ hay không

5

1.5

9

childnodes

Trả về NodeList các thẻ con của document

5

1

9

documentElement

Trả về root node của document

5

1

9

firstChild

Trả về node con đầu tiên của root

5

1

9

lastChild

Trả về node con cuối cùng của root

5

1

9

nodeName

Trả về tên của node (phụ thuộc vào dạng của node)

5

1

9

nodeType

Trả về dạng node (element, attribute, text…)

5

1

9

nodeValue

Gán hay lấy giá trị text cho node

5

1

9

 

b. Các hàm của DOMDocument:

Do các đối tượng khác như elementattributetextcomment… không thể tồn tại ngoài thẻ root, vì thế trong đối tượng DOMDocument sẽ có các hàm dùng để tạo các đối tượng này. Sau đây là bảng giới thiệu một số hàm có trong DOMDocument:

Hàm

Mô tả

IE

F

O

createAttribute(name)

Tạo attribute có tên “name”

6

1

9

createCDATASection()

Tạo CDATA section node

5

1

9

createComment()

Tạo comment node

6

1

9

createElement()

Tạo thẻ mới

5

1

9

createElementNS()

Tạo thẻ mới có namespace

No

1

9

createTextNode()

Tạo text node

5

1

9

getElementById(id)

Trả về thẻ có thuộc tính id=”id”

5

1

9

getElementsByTagName(name)

Trả về NodeList của các thẻ có tên là “name”

5

1

9

renameNode()

Đổi tên thẻ hay attribute

 

 

No

 

2. XMLDOMNode:

Một node có thể là bất cứ đối tượng nào của XML như elementattributetextcomment…. Khi làm việc với node, chúng ta có thể dùng các thuộc tính và hàm do class XMLDOMNode cung cấp tuy nhiên chúng ta cần phải chú ý đến thực tế các node này là đối tượng nào khi dùng các thuộc tính và hàm. Ví dụ như text cũng là node nhưng không thể có thẻ con, vì thế nếu ta thêm node con vàonode dạng text sẽ bị báo lỗi.

a. Thuộc tính: sau đây là bảng giới thiệu các thuộc tính của XMLDOMNode

Tên thuộc tính

Mô tả

IE

F

O

childNodes

Trả về NodeList tất cả node con của node hiện hành

5

1

9

firstChild

Trả về node con đầu tiên

5

1

9

lastChild

Trả về node con cuối cùng

5

1

9

nextSibling

Trả về node “em” của node hiện hành

5

1

9

nodeName

Trả về tên node phụ thuộc vào dạng node

5

1

9

nodeType

Returns the type of a node

5

1

9

ownerDocument

Trả về root node

5

1

9

parentNode

Trả về node cha

5

1

9

Prefix

Gán hay trả về prefix của node

No

1

9

previousSibling

Trả về node “anh” của node hiện hành

5

1

9

textContent

Gán hay trả về text nội dung của node (Phụ thuộc dạng node)

No

1

No

 

b. Các hàm của XMLDOMNode: sau đây là bảng giới thiệu các hàm của XMLDOMNode

Tên hàm

Mô tả

IE

F

O

appendChild()            

Thêm node con vào cuối danh sách node con của node hiện hành

5

1

9

hasAttributes()

Kiểm tra xem node có attribute nào hay không

No

1

9

hasChildNodes()

Kiểm tra xem node có node con nào hay không

5

1

9

insertBefore()

Thêm node con mới vào trước node con nào đó

5

1

9

removeChild()

Xóa node con nào đó

5

1

9

replaceChild()

Thay thế node con nào đó

5

1

9

 

3. XMLDOMNodeList: tập hợp các node có thứ tự, các node trong trong list có thể truy xuất thông qua vị trí (Bắt đầu từ 0)

a. Thuộc tính:

Ø       length: độ dài list

b. Hàm:

Ø       item(): trả về node vị trí thứ n trong list

4. XMLDOMNodeMap: tập hợp các node không có thứ tự, các node trong map được truy xuất dựa vào tênnode, hay vị trí

a. Thuộc tính:

Ø       length: độ dài list

b. Hàm:

Tên hàm

Mô tả

IE

F

O

getNamedItem(name)

Trả về node có tên “name”

5

1

9

Item()

Trả về node thứ n

5

1

9

removeNamedItem(name)

Xóa node tên “name”

6

1

9

setNamedItem(name)

Gán giá trị cho node tên “name”

 

 

9

 

5. XMLDOMParseError: là đối tượng dùng để truy xuất thông tin về lỗi xuất hiện trong quá trình phân tíchXML. Đối tượng này không phải là chuẩn của W3C. Các thuộc tính của XMLDOMParseError:

Ø       errorCode: trả về số của error

Ø       filepos: trả về vị trí ký tự của ký tự bị lỗi trong XML

Ø       line: trả về vị trí của dòng bị lỗi trong XML

Ø       reason: chi tiết nguyên nhân của error

Ø       srcText: nguyên văn dòng bị lỗi trong XML

  III.      Ví dụ về DOM bằng javascript:

Chúng ta làm ví dụ đơn giản là tạo file XML, tạo file HTML dùng javascript đọc XML, hiển thị nội dungXML, chèn thêm thẻ mới và hiển thị lại như sau:

v      File XML:

v      Chúng ta tạo File HTML như sau:

v      Sau khi tạo root node chúng ta xuất nội dung của file XML như sau:

v      Sau đó chúng ta tạo child mới và add vào root:

v      Khi thi hành chúng ta có kết quả sau:

v      Sau khi thêm node:

Tham khảo từ nguồn

Aptech Courses: XML By Example

W3School: XML DOM Tutorial




 
09/05/2013 18:05 # 8
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

XSL và XSLT

Bài viết này mô tả kỹ thuật chuyển đổi XML sang một file XML khác, chuyển đổi sang HTML hay một dạng văn bản dạng text khác. Đồng thời bài viết này cũng hướng dẫn các bạn cách tạo 1 file XSLT thông qua các thành phần của XSLT

           I.      Giới thiệu về Extensible Stylesheet Language (XSL):

XSL là một dạng ngôn ngữ dựa trên nền tảng XML để tạo ra stylesheet nhằm mục đích định dạng nội dungXML cho nhiều mục đích hiển thị khác nhau, đồng thời XSL còn có khả năng chuyển đổi XML thành dạng định dạng khác. XSL bao gồm 3 phần:

Ø       XSL Transformation (XSLT): là một ngôn ngữ dạng XML dùng để chuyển đổi XML thành định dạng khác như HTML

Ø       XML Path Language (X-Path): là một ngôn ngữ dùng để truy xuất các thành phần trong XML

Ø       XSL Formatting Object (XSL-FO): là ngôn ngữ dùng để định dạng XML

      II.      Quá trình chuyển đổi XML bằng XSLT:

Dưới đây là hình mô tả quá trình chuyển đổi XML thông qua XSLT và công cụ chuyển đổi

Ø       XML và XSLT là nguyên liệu đầu vào cho công cụ chuyển đổi (hay còn gọi là XSL processor). Kết quả của quá trình chuyển đổi này là một cấu trúc dạng cây với các nút là các element của XML đã được chuyển đổi thành các dạng text và thuộc tính do XSL qui định.

Quá trình chuyển đổi XML có 2 bước chính:

Ø       Bước 1: XSL processor chuyển đổi văn bản XML thành cấu trúc dạng cây

Ø       Bước 2: XSL processor bắt đầu áp dụng các khuôn mẫu (template) được khai báo trong XSLT cho cấu trúc cây trên. Quá trình này bắt đầu từ thẻ root và đến các thẻ con, khi tìm thấy thẻ có khai báo template trong XSLT, XSL processor sẽ áp dụng template này cho thẻ đó và kết quả thu được cũng là một cấu trúc cây nhưng dữ liệu đã được chuyển đổi

  III.      Cấu trúc và cú pháp XSLT:

Ø       Cấu trúc XSLT giống như cấu trúc XML. File XSLT là file có phần mở rộng là .xsl. Khi muốn khai báo XSLT trong XML chúng ta dùng cú pháp sau:

<?xml-stylesheet type="text/xsl" href="uri"?>

Ø       Cú pháp thẻ root của 1 file XSLT:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

……..

</xsl:stylesheet>

Ø       Trong đó thẻ <xsl:stylesheet> là thẻ root cho tất cả các file XSLT

      IV.      Top Level XSLT Element:

Top Level XSLT Element là các thẻ con của thẻ <xsl:stylesheet> bao gồm các thẻ sau:

Ø       xsl:attribute-set: dùng để thêm các thuộc tính định dạng

Ø       xsl:import: dùng để import nội dung của một XSLT khác vào XSLT hiện hành

Ø       xsl:namespace-alias: khai báo namespace thay thế namespace của XML

Ø       xsl:output: khai báo định dạng của output, element này có nhiều thuộc tính, quan trọng nhất là thuộc tính method là định dạng XML, HTML hay text

Ø       xsl:template: khai báo template cho các element trong XML

Ø       xsl:variable: khai báo hoặc gán giá trị cho biến dùng trong XSLT

         V.      Làm việc với XSLT:

1. <xsl:template>: là thành phần chính của XSLT, dùng để khai báo các luật dùng để chuyển đổi các element tương ứng với thuộc tính “match” của thẻ này. Cú pháp khai báo <xsl:template>

<xsl:template match=”pattern” mode=”mode” name=”name” priority=”number”>

….

</xsl:template>

Trong đó:

Ø       match: khai báo element nào sẽ áp dụng template này nếu không có thuộc tính này bắt buộc phải có thuộc tính name dùng để khai báo tên của template

Ø       mode: cho phép các các nút giống nhau sẽ được áp dụng nhiều hơn 1 lần

Ø       name: dùng để khai báo tên của template, nếu không có thuộc tính này thì phải có thuộc tính match

Ø       priority: là một số nguyên dùng để khai báo cấp độ của 1 template trong trường hợp có nhiều template cho 1 element, template cấp độ cao hơn sẽ được áp dụng

2. <xsl:apply-templates>: dùng để áp dụng một template cho element hiện hành hay áp dụng cho các element con của element hiện hành. Cú pháp:

Ø       <xsl:apply-templates select=”tên của element”/>. Trong đó thuộc tính select dùng để khai báo tên element áp dụng template. Nếu thuộc tính này không được khai báo thì mặc định sẽ chọn tất cả các thẻ con của thẻ hiện hành

3. <xsl:value-of>: dùng để lấy nội dung của thẻ hiện hành và xuất giá trị này ra output. Cú pháp:

<xsl:value-of select=”expression” disable-output-escaping=”yes|no”/>. Trong đó

Ø       select: dùng để khai báo tên của Element cần lấy giá trị

Ø       disable-output-escaping: giá trị hoặc yes hoặc no, dùng để khai báo các ký tự đặc biệt sẽ được hiển thị như thế nào, nếu giá trị là “yes” các ký tự đặc biệt sẽ được xuất ra output đúng như định dạng ban đầu, nếu là “no” các ký tự này sẽ được thay thế (ví dụ như < tương đương &lt;)

4. <xsl:for-each> dùng để khai báo vòng lặp cho tập hợp các element giống nhau. Cú pháp:

<xsl:for-each select=”expression”>

…….

</xsl:for-each>

5. <xsl:text>: dùng để thêm 1 chuỗi ký tự vào output. Cú pháp

<xsl:text disable-output-escaping=”yes|no”>

text

</xsl:text>

Chúng ta làm ví dụ cho các thành phần XSLT bên trên. Trong ví dụ này chúng ta tạo 1 file XML dùng để lưu trữ thông tin điểm thi của 1 lớp bao gồm mã lớp, mã môn, và danh sách sinh viên bao gồm mã sinh viên, họ, tên và điểm thi như sau:

Ø       Yêu cầu dùng XSLT chuyển đổi file XML trên thành HTML có dạng sau:

Tạo XSLT:

Ø       R.C vào tên project chọn New/Other… chọn Category XML, chọn XSL StyleSheet

Ø       Nhập tên file XSLT và Finish

Ø       Chúng ta tiến hành nhập liệu theo các bước sau:

Ở dòng 5 chúng ta khai báo định dạng của output là html thông thẻ <xsl:output>

Ø       Tiếp theo chúng ta tạo template cho thẻ root thông qua thẻ <xsl:template match=”/”>, trong đó giá trị “/” đại diện cho thẻ root. Như vậy chúng ta đã khai báo xong các tiêu đề đầu trang

Ø       Tiếp theo chúng ta tạo table thể hiện danh sách sinh viên cùng điểm thi như sau:

Ø       Sau khi hoàn thành chúng ta thêm dòng sau ở file XML, dưới thẻ root:

<?xml-stylesheet type="text/xsl" href="danhSachSV.xsl"?>

Ø       Để chuyển đổi file XML thành HTML thông qua XSLT chúng ta R.C vào file XML và chọn XSLTranformation

Ø       Chúng ta có thể tăng thêm tính hiệu quả của việc chuyển đổi thông qua một số thẻ XSLT sau:

6. Thêm số thứ tự: thẻ <xsl:number format=”string”  value=”expression”/>

Ø       Ví dụ: thêm dòng sau vào trong thẻ <tr> bên trong thẻ <xsl:for-each>

<td><xsl:number value="position()" format="1"/></td>

Trong đó value=”position()”: lấy vị trí của thẻ hiện hành trong list, format=”1”: xuất ra output vị trí này bắt đầu từ 1

7. Kiểm tra dữ liệu thỏa mãn điều kiện nào đó hay không:

<xsl:if test=”expression”>…</xsl:if>

Hoặc dùng:

<xsl:choose>

       <xsl:when test=”expression>

                   ….

       </xsl:when>

       …………….

       <xsl:otherwise>

                   ………

       </xsl:otherwise>

</xsl:choose>

Ø       Ví dụ: chúng ta sẽ thêm vào bảng trên cột Kết quả nếu điểm thi >= 40 : Đậu, <40: Rớt. Chúng ta thêm đoạn code sau vào file XSLT:

<td><xsl:if test="diem &lt; 40">Rớt</xsl:if>

        <xsl:if test="diem &gt;= 40">Đậu</xsl:if>

</td>

Ø       Chúng ta thay đổi màu nền cho cột điểm thành màu đỏ cho những sinh viên có điểm rớt:

<xsl:choose>

            <xsl:when test="diem &lt; 40">

                     <td bgcolor="red"><xsl:value-of select="diem"/></td>

              </xsl:when>

              <xsl:otherwise>

                      <td><xsl:value-of select="diem"/></td>

               </xsl:otherwise>

</xsl:choose>

8. Chúng ta có thể sắp xếp lại thông tin thông qua thẻ <xsl:sort>. Cú pháp:

<xsl:sort case-order=”upper-first | lower-first” data-type=”number | qname | text”order=”ascending | descending” select=”expression”/>

Ø       Ví dụ chúng ta sắp xếp danh sách sinh viên theo tên tăng dần. Chúng ta thêm dòng sau sau dòng <xsl:for-each>:

<xsl:sort data-type="text" order="ascending" select="ten"/>

Ø       Kết quả sau khi điều chỉnh như sau:

Ø       Bài tập tham khảo: các bạn có thể chỉnh sửa XSLT này để nắm vững các thẻ cơ bản của XSLT như sau: thêm cột xếp loại: Giỏi, khá, trung bình, kém, sắp xếp giảm dần theo điểm. Các bạn có thể dùng thẻ <xsl:apply-templates> cho các thẻ con của thẻ <sinhVien>

Tham khảo từ nguồn

Aptech Courses: XML By Example

W3School: XSLT Tutorial




 
09/05/2013 18:05 # 9
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Style Sheet

Như đã giới thiệu trong các bài trước, ưu điểm lớn nhất của XML là tách rời phần nội dung và phần hiển thị nội dung. Do đó nếu chúng ta muốn hiển thị nội dung chứa trong XML chúng ta cần phải có các phươp pháp để thể hiện, đó chính là Style Sheet.

           I.      Các dạng Style Sheet:

Ø       Chúng ta có nhiều dạng Style Sheet có thể dùng để hiển thị thông tin trong file XML. Tuy nhiên có 2 phương pháp được sử dụng nhiều nhất đó là CSS và XSLT:

Ø       Cascading Style Sheet (CSS): là phương pháp dùng để thể hiện thông tin trong HTML và XMLthông qua khai báo các thuộc tính về vị trí, màu sắc, khoảng cách giữa các dữ liệu….

Ø       Extensible Style Sheet (XSLT): là phương pháp dùng để thể hiện thông tin trong XML, chúng ta có thể sử dụng XSLT để chuyển đổi XML sang dạng file khác.

Ø       Trong phạm vi bài viết này chúng ta chỉ làm quen phương pháp CSS.

      II.      Ưu điểm của CSS: CSS có 3 ưu điểm chính sau

Ø       Khi chúng ta muốn thay đổi cách thể hiện dữ liệu chúng ta chỉ cần thay đổi tại một nơi

Ø       Không phụ thuộc vào thiết bị

Ø       Có thể tái sử dụng

          III.      Cú pháp khai báo CSS: chúng ta khai báo CSS theo theo cú pháp cơ bản sau

Trong đó:

Ø       selector: tên thẻ trong file XML

Ø       property: tên thuộc tín trong CSS

Ø       value: giá trị gán cho property

Cú pháp khai báo selector:

Ø       Khai báo CSS cho 1 thẻ: tên thẻ

Ø       Khai báo CSS cho nhiều thẻ: tên thẻ 1, tên thẻ 2,…

Ø       Khai báo CSS cho tất cả các thẻ: *

Ø       Khai báo CSS cho attribute id: #giá trị attribute id

Sau khi chúng ta tạo CSS file, để có thể sử dụng CSS để hiển thị XML chúng ta cần khai báo dòng sau ở file XML (Trước dòng khai báo thẻ root)

<?xml-stylesheet type="text/css" href="uri"?>

    IV.      Một số Property cơ bản của CSS:

a. Màu sắc: dưới đây là bảng giá trị màu chúng ta có thể dùng để khai báo cho màu nền hay màu chữ

b. Font chữ: Sau đây là bảng tên các thuộc tính liên quan đến font chữ

c. Margin: chúng ta có 4 dạng margin: margin-left, margin-right, margin-top, margin-bottom dùng để khai báo các khoảng cách ở 4 vị trí xung quanh khu vực hiển thị element

d. Border: dùng để khai báo đường viền xung quanh khu vực hiển thị element

e. Padding: dùng để khai báo khoảng cách giữa text và đường bao quanh element

f. Đơn vị dùng trong CSS:

g. Khai báo vị trí trong CSS:

Trong đó thuộc tính position chúng ta có thể khai báo các giá trị sau:

Ø       static: đây là giá trị mặc định của position, vị trí này không bị ảnh hưởng bởi top, left, left, right

Ø       fixed: vị trí cố định của element so với màn hình, vị trí này không thay đổi khi kéo thenh trượt lên xuống

Ø       relative: khai báo vị trí tương đối của element so với vị trí static

Ø       absolute: khai báo vị trí tương đối của element so với element cha đầu tiên có khai báo position khác với static, nếu không có thì sẽ lấy là thẻ <html>

v     Ví dụ position:

CSS file:

root {

    display: block;

}

tdLeft

{   display: block;

    position:relative;

    left:-20px;

}

 

tdRight

{   display: block;

    position:relative;

    left:20px;

}

td

{   display: block;

    position:absolute;

    left:100px;

    top:150px;

}

paFixed

{   display: block;

    position:fixed;

    top:30px;

    right:5px;

}

XML File:

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

<?xml-stylesheet type="text/css" href="CSSExample.css"?>

<root>

    <td>Tiêu đề cách lề trái 100px, đỉnh 150px</td>

    <tdLeft>Vị trí relative cách vị trí mặc định -20px về phía trái</tdLeft>

    <tdRight>Vị trí relative cách vị trí mặc định 20px về phía phải</tdRight>

    <paFixed>Vị trí fixed cách đỉnh 30px, cách lề phải 5px</paFixed>

</root>

Kết quả:

h. Thuộc tính display: dùng để khai báo nội dung của thẻ nằm trong 1 đoạn mới

Cú pháp: display: value, trong đó value là 1 trong 3 giá trị sau

Ø       none: không hiển thị nội dung

Ø       inline: giá trị mặc định, xuất hiện nội dung trên cùng dòng

Ø       block: nội dung xuất hiện trên 1 đoạn văn riêng biệt

i. Canh lề Text:

Chúng ta có 2 cú pháp khai báo canh lề text:

Ø       text-align: left (default), right, center, justify

Ø       text-indent: value khoảng cách của text và  đường canh lề, value có thể là 1 số hay %

         V.      Ví dụ hiển thị XML với CSS:

Ø       Trong ví dụ này chúng ta tạo 1 fiel XML dùng để lưu trữ thông tin các DVD trong cửa hàng DVDOnline theo Category. Thông tin DVD bao gồm <ten>, <daoDien>, <xuatXu>, <gia>

Ø       Chúng ta sẽ tạo CSS để hiển thị XML như sau:

Ø       Kết quả thu được:

Tham khảo từ nguồn

Aptech Courses: XML By Example

W3C: CSS Tutorial




 
09/05/2013 19:05 # 10
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Ví dụ Schema

Trong ví dụ này chúng ta làm quen một ví dụ về Schema cho file XML chứa dữ liệu về hộ khẩu của một thành phố.

           I.      Phân tích:

a. Nội dung: Trong hộ khẩu của từng nhà chúng ta cần lưu các thông tin sau:

Ø       Thông tin về căn nhà bao gồm: số nhà, tên đường, phường (xã), quận (huyện), thành phố (Tỉnh)

Ø       Thông tin về các thành viên trong nhà bao gồm: chủ hộthành viên. Trong đó chủ hộ cần lưu các thông tin sau: số CMNDhọtêngiới tínhngày sinhnguyên quán, các thành viên ngoài các thông tin như chủ hộ, chúng ta cần lưu thêm thông tin về mối quan hệ với chủ hộ.

b. Dữ liệu:

Ø       Số nhà: chuỗi tối đa 20 ký tự

Ø       Tên đường, phường (Xã), quận (huyện), thành phố (tỉnh): chuỗi tối đa 50 ký tự

Ø       Số CMND: 9 ký tự số

Ø       Họ: chuỗi tối đa 15 ký tự

Ø       Tên: tối đa 35 ký tự

Ø       Giới tính: Nam hay nữ

Ø       Ngày sinh: kiểu ngày tháng

Ø       Nguyên quán: chuỗi tối đa 30 ký tự

Ø       Quan hệ: chuỗi tối đa 30 ký tự

      II.      Tạo Schema:

Ø       R.C vào tên project chọn New/Other…, chọn Category XML, chọn XML Schema, đặt tên file là hoKhau và finish

Bước đầu tiên chúng ta tạo các Complex Type cho các dạng dữ liệu cần cho Schema như diaChi, thongTinThanhVien như sau:

Ø       R.C vào Complex Type chọn AddComplex Type, nhập tên diaChi

 

Trong địa chỉ lần lượt khai báo các Element như soNhaduongphuongquanthanhPho theo cách sau:

Ø       Chuyển qua thẻ Schema, R.C vào Complex Type diaChi, chọn AddSequence

Ø       Sau đó R.C vào sequence chọn AddElement:

Ø       Nhập tên Element ở dòng Name và chọn Inline Simple Type như hình

Ø       Tiếp tục cho Element duong, tuy nhiên ở phần Element <phuong> chúng ta sẽ cho phép lựa chọn hoặc Element <phuong> hoặc Element <xa> -> R.C vào sequence chọn AddChoice, R.C vào choice chọn Add/Element và làm như trên

Ø       Chúng ta áp dụng phương pháp tương tự cho Element quan(huyen) và thanhPho(tinh).

Ø       Sau đó chúng ta khai báo độ dài chuỗi cho các Element vừa tạo -> R.C vào simpleType chọn Properties

Ø       Nhập độ dài chuỗi như hình sau:

Ø       Sau khi chúng ta hoàn thành qua cửa sổ Design chúng ta thấy hình sau:

Bước tiếp theo chúng ta khai báo Complex Type cho thongTinThanhVien, ở Complex Type này có 1 số điểm chú ý sau:

Ø       <soCMND> chỉ ký tự số, khai báo như hình sau:

Ø       Tương tự chúng ta khai báo chiều dài tối đa cho <ho>, <ten>, <nguyenQuan>, đối với<gioiTinh> chúng ta khai báo tập giá trị cho thẻ này như sau:

Ø        Đối với thẻ <ngaySinh> chúng ta khai báo dạng date

Bước cuối cùng chúng ta khai báo các Element cho XML

Ø       Khai báo thẻ root là <DSHoKhau> là complex type, trong thẻ root là list các thẻ con <hoKhau>, điều chỉnh Max Occurs là unbounded, trong hộ khẩu là các thẻ con <nha> kiểu diaChi,<chuHo> kieu thanhVien, <cacThanhVien> kiểu thanhVien + thẻ <quanHeChuHo>, trong đó các thành viên Max Occurs là unbounded

Ø       Sau khi hoàn thành chúng ta sẽ thu kết quả sau:

Tham khảo từ nguồn

Aptech Courses: XML By Example

W3C: Schema Tutorial




 
09/05/2013 19:05 # 11
trananhtien
Cấp độ: 2 - Kỹ năng: 2

Kinh nghiệm: 12/20 (60%)
Kĩ năng: 3/20 (15%)
Ngày gia nhập: 15/08/2012
Bài gởi: 22
Được cảm ơn: 13
Phản hồi: Làm việc với XML


 

Document Type Definition (DTDs)

Trong bài này chúng ta sẽ làm quen khái niệm DTDs như khai báo DOCTYPE, khai báo Element và cách tạoDTDs trong file XML, validation XML bằng DTDs

           I.      DTDs là gì:

Loại tài liệu Definition (DTD) là một tập hợp các tờ khai đánh dấu để xác định một loại tài liệu cho các ngôn ngữ đánh dấu như: SGMLXMLHTMLDTD là một tiền thân của lược đồ XML Schema và có chức năng tương tự, mặc dù khả năng khác nhau.

DTD sử dụng một cú pháp ngắn gọn khai báo chính xác những yếu tố và tài liệu tham khảo có thể xuất hiện ở đâu trong tài liệu XMLDTD cũng khai báo các thực thể (Entity) có thể được sử dụng trong tài liệu XML.

      II.      Tại sao lại sử dụng DTDs:

Ø       Với một DTD, mỗi tập tin XML của bạn có thể thực hiện một mô tả của định dạng riêng của mình.

Ø       Với một DTD, các nhóm độc lập của người dân có thể đồng ý sử dụng một DTD tiêu chuẩn cho việc trao đổi dữ liệu.

Ø       Ứng dụng của bạn có thể sử dụng một tiêu chuẩn DTD để xác minh rằng các dữ liệu bạn nhận được từ bên ngoài là hợp lệ.

Ø       Bạn cũng có thể sử dụng một DTD để xác minh dữ liệu của riêng bạn.

     III.      Cấu trúc DTD và các bước tạo DTD:

a. Cấu trúc DTDs bao gồm có 3 phần:

Ø       Khai báo Element: khai báo Element gồm có tên của Element và nội dung của Element

Ø       Khai báo Attribute: khai báo Attribute thuộc Element nào, tên Attribute, kiểu dữ liệu củaAttribute và giá trị mặc định của Attribute

Ø       Khai báo Entity: khai báo tên của Entity, giá trị của Entity hay vị trí của giá trị Entity

b. Tạo DTD bao gồm 6 bước:

Ø       Khai báo tất cả các element có trong XML

Ø       Khai báo các element con cho từng element nếu có

Ø       Xác định thứ tự xuất hiện của các element

Ø       Khai báo tất cả thuộc tính của từng element nếu có

Ø       Khai báo kiểu dữ liệu và giá trị mặc định cho thuộc tính

Ø       Khai báo các Entity nếu có

      IV.      Kiểu DTDs:

Ø       DTDs có 2 dạng tùy thuộc vào vị trí đặt DTDs: bên trong file XML hay ở file .dtd bên ngoài. Hai dạng có cách khai báo DTD khác nhau như hình sau:

Ø       Hình bên trái là DTD khai báo trong file XML. Cú pháp khai báo:

<!DOCTYPE tên thẻ root [các thành phần trong thẻ root]>

Ø       Hình bên phải là DTD khai báo ngoài file XML, chỉ có nội dung bên trong thẻ root

         V.      Các dạng khai báo trong DTD:

a. Khai báo Element:

Ø      Element rỗng:

<!ELEMENT element-name EMPTY>

Ø       Element chứa text dạng parsed character

<!ELEMENT element-name (#PCDATA)>

Ø       Element chứa text dạng bất kỳ:

<!ELEMENT element-name ANY>

Ø       Element với các thẻ con, tuần tự:

<!ELEMENT element-name (child1,child2,...)>

v      Khai báo số lần xuất hiện của các thẻ con:

Ø       Chỉ có tên thẻ con: xuất hiện duy nhất 1 lần

Ø       +: phải xuất hiện tối thiểu 1 lần

Ø       *: xuất hiện 0 hay nhiều lần

Ø       ?: xuất hiện 0 hay 1 lần

Ø       Child1|child2: hoặc child1 xuất hiện hoặc child2 xuất hiện

b. Khai báo Attribute:

<!ATTLIST element-name attribute-name attribute-type default-value>

v     Default value có thể là 1 trong các giá trị sau:

Ø       value: giá trị mặc định. Ví dụ:

DTD:
<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0"> (“0” là giá trị mặc định)

Valid XML:
<square width="100" />

Ø      #REQUIRED: bắt buộc phải có giá trị. Ví dụ:

DTD:
<!ATTLIST person number CDATA #REQUIRED>

Valid XML:
<person number="5677" />

Invalid XML:
<person />

Ø       #IMPLIED: có thể có hoặc không attribute này. Ví dụ:

DTD:
<!ATTLIST contact fax CDATA #IMPLIED>

Valid XML:
<contact fax="555-667788" />

Valid XML:
<contact />

Ø       #FIXED: giá trị attribute là hằng số, ví dụ:

DTD:
<!ATTLIST sender company CDATA #FIXED "Microsoft">

Valid XML:
<sender company="Microsoft" />

Invalid XML:
<sender company="W3Schools" />

Ø       Khai báo tập giá trị cho attribute:

DTD:
<!ATTLIST payment type (check|cash) "cash">

XML example:
<payment type="check" />
hay
<payment type="cash" />

      VI.      Ví dụ DTD:

Trong ví dụ này chúng ta xây dựng 1 DTD cho file XML lưu trữ thông tin tất cả sách trong 1 thư viện có các yêu cầu sau:

Ø       Thẻ root: thuVien

Ø       Trong thẻ root có ít nhất 1 thẻ <sach>

Ø       Trong thẻ <sach> là các thẻ con theo thứ tự sau: id, ten, tacGia, nhaXuatBan, gia. Trong đó, id, ten, tacGia là những thẻ bắt buộc phải có, nhaXuatBan, gia xuất hiện tối đa 1 lần

Ø       Trong thẻ <sach> có 2 thuộc tính là theLoai và ngonNgu, trong đó giá trị của thuộc tính thể loại là một trong các giá trị sau: KhoahọcGiảiTríTinHọc, thuộc tính ngonNgu có thể có hoặc không.

Ø       Khai báo 2 Entity xuất hiện thường xuyên trong XML cho giá trị “Nhà Xuất Bản Trẻ” và “Nhà Xuất Bản Giáo dục

Ø       Để kiểm tra tính đúng đắng của dữ liệu trong XML bằng DTD chúng ta có thể R.C vào XML chọn Validation XML, nếu dữ liệu là hợp lệ chúng ta sẽ thấy thông báo:

Ø       Ngược lại sẽ có thông báo:

 

Tham khảo từ nguồn:

Aptech Course i7: XML By Example

W3school: DTD Tutorial




 
Copyright© Đại học Duy Tân 2010 - 2024