Xml cho phép tựdo định nghĩa và đặt tên cho các thẻ. Nếu tài liệu của ta chỉsử
dụng riêng cho một mục đích nào đó và không cần kết hợp vào tài liệu XML khác thì
điều này không thành vấn đề. Tuy nhiên một khi các ứng dụng phát triển, tập định nghĩa
các XML cần sống chung và kết hợp với nhau thì điều này là một vấn đề. Chẳng hạn nếu
tài liệu của ta tự định nghĩa thẻmang tên <Data> chứa dữliệu phục vụcho riêng ứng
dụng của ta. Sau này chúng ta cần tích hợp tài liệu của mình với các ứng dụng khác như
VML hay MathML, chẳng may nếu các ứng dụng này cũng khai báo một phần tửmang
tên <Data> thì sao? Trình phân tích nên hiểu thẻ<Data> của mình hay của VML hay
MathML? Cần phải có sựphân biệt vềphạm vi hay không gian tên (namespace) mà thẻ
có ý nghĩa. Ở đây ta vẫn có thểkết hợp hai thẻ<Data> vào một tài liệu XML duy nhất
nhưng phân biệt chúng bằng không gian tên. Chúng ta dùng một định danh tài nguyên
duy nhất (URI) để đặt cho không gian tên cần truy xuất. Tất cảcác thẻ đi theo không gian
tên phải đặt sau tên miền và dấu hai chấm. Do URI chưa phổdụng nên hiện nay ta vẫn
thường dùng địa chỉURL làm định danh duy nhất cho một không gian tên nào đó.
98 trang |
Chia sẻ: netpro | Lượt xem: 2281 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng website giới thiệu và bán hàng trực tuyến, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
cách
trên được gọi là một tài liệu hợp khuôn dạng.
Tóm lại cấu trúc hình thành nên một tài liệu XML thường bạn tuân theo đó là: tạo
chỉ thị xử lý XML, xây dựng phần tử hoặc thẻ gốc, tạo các phần tử con lồng trong các
phần tử gốc.
Các phần tử bên trong thẻ gốc có thể chứa các thẻ con khác lông sâu nhau nhiều
cấp.
- 16 -
Ở mức cơ bản nhất, tài liệu XML được kết hợp bởi thành phần định dạng
(markup) và dữ liệu ký tự (charater data).
I. Định dạng và dữ liệu ký tự:
Định dạng tài liệu giúp ta tạo nên một cấu trúc. Định dạng bao gồm thẻ bắt đầu, thẻ kết
thúc, các phần tử thẻ rỗng các tham chiếu thực thể, tham chiếu ký tự lời chú thích, phân
đoạn CDATA khai báo kiểu tài liệu và chỉ thị xử lý. Tất cả các dữ liệu còn lại trong tài
liệu XML không phải là định dạng đều được xem là dữ liệu ký tự.
Dưới đây là diễn giải về các định dạng và kiểu dữ liệu ký tự dựa trên nội dung file
hello.xml đã được tạo ra ở trên.
Hello XML
Welcome to XML
Thẻ hay phần tử bắt đầu bắt đầu bằng ký tự bằng quy
tắc này ta có thể thấy trong tài liệu XML trên chúng ta có các phần tử gọi là định dạng
như , , .
Còn lại chuổi văn bản “Hello XML” hay “Welcome to XML” được xem là dữ liệu ký
tự.
Tuy nhiên phần định dạng không cần phải luôn bắt đầu bằng .
Trong trường hợp ta tham chiếu đến một thực thể thì phần định dạng có thể bắt đầu bằng
& và kết thúc bởi ; hoặc trong trường hợp bạn tham chiếu đến một thực thể tham số
- 17 -
(parameter entitis reference) phần định dạng có thể bắt đầu bằng % và kết thúc bởi ;. Một
vài tham chiếu thực thể có thể chuyển sang ký tự định dạng khi trình phân tích diễn dịch.
Ví dụ (< được dịch thành ). Chúng ta sẽ xem xét ví dụ sau
và kết quả như hình 2-1:
Hello <XML>
Welcome to XML
Hình 2-1 Sử dụng thẻ định dạng trong XML
Hình 2-1 thể hiện nội dung của tài liệu XML sử dụng các tham chiếu thực thể đặc biệt.
Các ký tự tham chiếu giúp ta hiển thị và đưa vào dữ liệu ký tự những dấu hiệu đã sử dụng
trong phần định dạng. Ở ví dụ trên nếu ta viết trực tiếp thẻ thì tài liệu của ta rõ
ràng là không hợp khuôn dạng vì không có thẻ đóng tương ứng.
Các ký tự như spacebar, backspace,Tab, ký tự xuống dòng, ký tự thụt dòng đều được xem
là khoảng trắng đối với các trình phân tích XML, ví dụ nội dung tài liệu sau:
- 18 -
Hello XML
Welcome to XML
Bộ phân tích không cần quan tâm đến khoảng trắng hay dấu canh lề định sẵn. Thực sự
nội dung tài liệu trên hoàn toàn tương đương với nội tài liệu dưới đây.
Hello XML
Welcome to XML
II. Phần khởi đầu (Prolog) của tài liệu XML
Phần prolog bắt đầu ngày từ những dòng đầu tiên của tài liệu XML. Chuẩn XML không
yêu cầu phải khai báo phần mở đầu XML. Tuy nhiên ,W3C khuyến khích bạn nên dùng ít
nhất cũng là dòng khai báo phiên bản sử dụng của XML. Nói chung phần khởi đầu của
XML thường chứa các khai báo XML, lời chú thích về tài liệu, chỉ thị xử lý khoảng trắng
và kiểu tư liệu DTD.
<!DOCTYPE Document [
- 19 -
]>
Như Ý
Lý
29/12/2008
Dell
1
15000000
- 20 -
III. Chú thích
Chú thích trong XML tương tự như chú thích trong HTML. Các chú thích để cho
ta hiểu rõ hơn một phần nào đó trong cấu trúc của tài liệu XML. Khi diễn dịch nội dung
tài liệu, các bộ phân tích thường bỏ qua những dòng chú thích. Bắt đầu chú thích bằng
chuỗi ký tự mở . ví dụ
<!DOCTYPE Document [
]>
Hello XML
Welcome to XML
- 21 -
Cần tuân theo một số quy tắc khi thêm dòng chú thích vào tài liệu XML. Chú thích không
được đặt trước các khai báo. Ví dụ sau là một chú thích không hợp lệ:
<!DOCTYPE Document [
]>
Hello XML
Welcome to XML
Không được đặt chú thích vào bên trong phần định dạng như ví dụ sau:
<!DOCTYPE Document [
- 22 -
]>
>
Hello XML
Welcome to XML
Chúng ta không thể dùng chuỗi -- bên trong chú thích. Bởi vì trình phân tích luôn xem
chuỗi -- là dấu hiệu nhận dạng kết thúc của chú thích. Ví dụ sau sử dụng chú thích không
hợp lệ:
<!DOCTYPE Document [
]>
Hello XML
- 23 -
Welcome to
XML
Ích lợi của chú thích còn được dùng để loại bỏ một số phần tử hoặc thẻ của XML không
dùng đến. Miễn là trong nội dung chú thích không được chứa các chú thích khác. Ví dụ
để loại bỏ phần tử khỏi tài liệu ta làm như sau và kết quả như hình 2-2
Hello XML
<!--
Welcome to XML
-->
Hình 2-2 Loại bỏ thẻ Message
IV. Chỉ thị xử lý
- 24 -
Các chỉ thị xử lý được dùng để chỉ dẫn cho bộ phân tích cách xử lý tài liệu XML
trong quá trình phân tích sẽ diễn ra sau này. Những chỉ thì này thường bắt đầu bằng <?
Và kết thúc bằng ?> tương tự như phần khai báo. Tuy nhiên ta không nên sử dụng trùng
lại từ khóa của khai báo những chỉ thị xử lý này rất đặc trưng và hoàn toàn phụ
thuộc vào bộ phân tích xử lý tài liệu XML ở ngữ cảnh xác định. Ví dụ chỉ thị yêu cầu bộ
phân tích kết hợp dữ liệu XML với XSLT.
Hello XML
Welcome to XML-->
V. Thẻ và các phần tử
1. Cấu thành của phần tử (element) và thẻ:
Ta tạo cấu trúc cho tài liệu XML dựa trên các thành phần định dạng (markup).
Những thành phần này bao gồm các phần tử (element). Mỗi phần tử thường bao
gồm một cặp thẻ, thẻ bắt đầu và thẻ kết thúc.Ngoại trừ các phần tử rỗng sẽ được
định nghĩa chỉ bằng một thẻ.
Thẻ bắt đầu còn được gọi là thẻ mở bắt đầu bằng ký tự .
Thẻ kết thúc được gọi là thẻ đóng bắt đầu bằng cặp ký tự </ và kết thúc bằng ký tự
>.
2. Tên thẻ
- 25 -
Đặc tả XML quy định rất rõ về cách đặt tên thẻ có thể bắt đầu bằng các ký tự (_)
hoặc dấu hai chấm (:) các ký tự kế tiếp có thể là ký tự, ký số, gạch chân , gạch nối,
dấu chấm ,dấu hai chấm nhưng không được là khoảng trắng.
Mặc dù đặc tả của XML cho phép nhưng nên tránh dùng dấu hai chấm trong tên
thẻ. Lý do chúng ta sẽ dùng dấu hai chấm để chỉ thị không gian tên (namespace)
của XML.
<CUSTOMER_0)
Lưu ý quan trọng là các bộ phân tích và diễn dịch XML thường phân biệt chữ hoa
và chữ thường cho nên thẻ được xem là khác biệt và độc lập với
thẻ . Tuy nhiên chúng ta không nên đặt tên thẻ như vậy. Thẻ mở và
thẻ đóng phải khớp với nhau như cặp thẻ đóng mở là
hợp lệ trong khi cặp thẻ được xem là bị lỗi do
không có thẻ đóng còn thì không có thẻ mở.
Các tên thẻ sau được xem là không hợp lệ:
3. Phần tử rỗng
- 26 -
Thường thì một phần tử bao gồm một thẻ mở và một thẻ đóng. Giữa thẻ mở
và thẻ đóng có thể chứa dữ liệu ký tự hoặc các cặp thẻ khác. Tuy nhiên, phần tử có
thể có duy nhất một thẻ. Đây là trường hợp thẻ rỗng không kèm theo dữ liệu và do
đó chỉ có duy nhất một thẻ. Thẻ thể hiện phần tử không phải thẻ mở cũng không
phải thẻ đóng. Chúng ta cũng từng quen với thẻ ,.. những thẻ này
được xem là phần tử rỗng bởi chúng không có thẻ đóng tương ứng. Trong XML
các thẻ chỉ đứng một mình tượng trưng cho phần tử rỗng và có dấu đóng thẻ là />
thay cho >. Ví dụ:
4. Phần tử gốc
Tất cả các tài liệu XML được coi là hợp khuôn dạng nếu chứa đựng duy
nhất một phần tử gốc. Phần tử gốc này chứa đựng tất cả các phần tử và cặp thẻ
khác trong tài liệu. phần tử gốc được xem là phần rất quan trọng trong cấu trúc
XML nhất là khi chúng ta nhìn nó ở khía cạnh lập trình. Khi ta bắt đầu phân tích
nội dung tài liệu XML ta phải khởi đầu từ một phần tử gốc, sau đó tiếp tục lần ra
các phần tử chứa dữ liệu khác. Trong file hello.xml phần tử gốc là cặp thẻ
phần tử gốc này do chúng ta tự đặt. Nó là một tên thẻ
bình thường.
5. Thuộc tính
Thuộc tính của các thẻ XML tương tự như các thẻ HTML. Thuộc tính được
kết hợp theo cặp name=value. Thuộc tính cho bạn xác định thêm thông tin và ý
- 27 -
nghĩa của thẻ. Thuộc tính được đặt trong thẻ mở và thẻ rỗng. Để gán trị cho thuộc
tính thường dùng dấu bằng (=). Ví dụ, dưới đây ta gán thuộc tính ProductName
cho phần tử sản phẩm trong product.xml để biết được tên sản phẩm
đó.
3
1
2
12 - 550 ml bottles
10.0000
13
70
25
false
Ta có thể thấy nội dung của tài liệu XML hiển thị trong trình duyệt IE cùng với thuộc
tính của thẻ như hình 2-3.
- 28 -
Hình 2-3 Nội dung tài liệu XML trong trình duyệt.
Rất nhiều tranh luận xoay quanh vấn đề nên chứa dữ liệu của thẻ trong thuộc tính
hay trong vùng dữ liệu giữa thẻ đóng và thẻ mở? Không có quy tắc nào chính xác
cả nhưng ta có thể theo một số hướng dẫn hữu ích sau.
- 29 -
Trước hết thẻ có nhiều thuộc tính sẽ làm cho thẻ và toàn bộ tài liệu trở nên khó
đọc.
Nhìn chung nếu thẻ chứa hơn 4 thuộc tính ta nên ngắt chúng ra thành các
phần tử cấu trúc bao gồm thẻ đóng và thẻ mở. Chúng sẽ dễ đọc và dễ chỉnh sửa
nội dung của tài liệu sau này hơn. Khi thiết lập thuộc tính cho thẻ, cần theo một số
quy tắt đặt tên và gán trị cho thuộc tính như sau.
5.1 Tên thuộc tính
Theo đặc tả XML 1.0 tên của thuộc tính cần tuân theo quy tắc đặt tên
thẻ. Ví dụ sau đây tên thuộc tính được xem như là hợp lệ.
Những thuộc tính sau là không hợp lệ:
5.2 Trị gán cho thuộc tính
Bởi vì phần định dạng luôn là văn bản text cho nên thuộc tính cũng
mang trị text. Ngay cả khi gán một trị số cho thuộc tính, nó cũng chỉ
biểu diễn ở dạng text mà thôi. Ví dụ ta xem số như là một chuỗi và bọc
chúng trong dấu nháy kép như sau:
Điều này cũng có nghĩa khi phân tích và trích xuất giá trị của thuộc tính
chúng ta cũng sẽ nhận về số kiểu chuỗi. nếu ta muốn dùng chuỗi số này
- 30 -
để tính toán, cần sử dụng các hàm chuyên dụng của ngôn ngữ lập trình
để chuyển kiểu chuỗi thành số.
Trong XML giá trị của thuộc tính thường được để trong cặp nháy kép
tuy nhiên nếu giá trị của thuộc tính có dấu nháy kép thì ta có thể sử
dụng dấu nháy đơn để thay thế.
Điều gì xảy ra khi giá trị của thuộc tính chứa dấu nháy đơn và nháy
kép? Ta có thể dùng thực thể định nghĩa của XML là ' (‘) và
"e; (“) cho dấu nháy đơn và kép tương ứng. Ví dụ:
Thuộc tính height thực tế là mạng trị 1’6’’.
5.3 Thuộc tính hữu dụng xml:lang
Nếu sử dụng thuộc tính xml:lang có thể tài liệu của chúng ta trở nên
đáng giá hơn. Thuộc tính này thường được các bộ máy tìm kiếm thông
tin trên mạng (search engine) sử dụng như là dấu hiệu nhận dạng về
ngôn ngữ của dữ liệu. giá trị gán cho thuộc tính này thường là mã quốc
gia chuẩn ISO 639 bao gồm hai ký tự tắt. Ví dụ để trình duyệt hiểu được
nội dung đoạn văn bản thuộc ngôn ngữ Anh ta có thể trình bày dữ liệu
bên trong thẻ với thuộc tính xml:lang như sau:
hello!
Ta cũng có thể dùng mã quốc gia và mã vùng theo chuẩn ISO cho phân
loại ngôn ngữ. Ví dụ có thể phân biệt ngôn ngữ tiếng Anh British và
American bằng thuộc tính thiết lập giá trị sau:
hello!
Hi!
- 31 -
VI. Xây dựng cấu trúc tài liệu hợp khuôn dạng:
Chúng ta đã xem qua cách khai báo phần tử, thẻ, thuộc tính, cách đặt tên
thẻ, tên thuộc tính… Dưới đây là phần tổng kết các quy tắc mà ta cần tuân theo để
xây dựng một tài liệu XML hợp khuôn dạng.
1. Các khai báo XML cần được đặt ở dòng đầu tiên của tài liệu.
2. Tài liệu XML chỉ có một phần tử gốc, các phần tử khác nếu có phải
là con của phần tử gốc.
3. Mọi phần tử XML khác rỗng phải bao gồm đầy đủ thẻ đóng và thẻ
mở.
4. Đóng phần tử rỗng với chuỗi đóng />.
5. Mọi phần tử trong tài liệu XML khác phần tử gốc đều phải nằm giữa
cặp thẻ gốc.
6. Các phần tử lồng nhau phải có thẻ đóng và thẻ mở hợp vị trí.
7. Sử dụng tên thuộc tính là duy nhất.
8. Chỉ nên sử dụng 5 tham chiếu thực thể được định nghĩa trước trong
XML.
& &
< <
> >
' ‘
" “
9. Bọc giá trị thuộc tính bằng cặp dấu nháy.
10. Chỉ nên sử dụng ký tự < và & đối với các thẻ mở và các thực thể.
VII Phân đoạn CDATA:
- 32 -
Như chúng ta thấy việc đặt nội dung dữ liệu trong tài liệu XML bao hàm cả
ký tự đặc biệt như > hay & là quá khó khăn. Chúng ta phải sử dụng các tham chiếu
thay thế. Nếu muốn lưu toàn bộ dữ liệu từ một tài liệu XML khác vào tài liệu
XML của mình thì sao? Nếu ta đặt nội dung dữ liệu XML ngoại vào tài liệu đích
của mình thì tài liệu đích sẽ bị xáo trộn bởi các thẻ nhập vào tài liệu ngoại để khắc
phục điều đó ta làm như thế nào? Chúng ta sử dụng phần tử CDATA để yêu cầu
trình phân tích xem toàn bộ nội dung của tài liệu ngoại như là dữ liệu chứ không
phải là cấu trúc bao gồm các thẻ.
Phân đoạn CDATA cũng là một phần tử nhưng bao gồm chỉ một thẻ. Thẻ
này bắt đầu bằng [!CDATA[ và kết thúc bằng ]]>. Giữa dấu hiệu bắt đầu
[!CDATA[ và kết thúc ]]> là nội dung văn bản bạn muốn trình phân tích không
đụng đến.
Ví dụ:
[<![CDATA[
Hello XML
Welcome to XML
]]>
Phân đoạn CDATA cực kỳ hữu dụng. Tất cả dữ liệu của ta sẽ được lưu trọn
vẹn mà không sợ xung đột với các thẻ hay ký tự đặc biệt của XML. Tuy nhiên, cần
phải tránh dùng ký tự nhận dạng nơi kết dữ liệu ]]> bên trong phân đoạn CDATA.
Ví dụ sau được xem là không hợp lệ:
- 33 -
[<![CDATA[
Hello XML]]>
Welcome to XML
]]>
Chúng ta xem xét một ví dụ về cách đưa javascript vào phân đoạn CDATA:
Hello XML
Welcome to XML
<![CDATA[
var a;
a=5;
if(a<0)
document.writeln("xin chào bạn")
else
document.writeln("số 5 lớn hơn 0")
- 34 -
]]>
Welcome java script
VIII . Không gian tên (namespace)
Xml cho phép tự do định nghĩa và đặt tên cho các thẻ. Nếu tài liệu của ta chỉ sử
dụng riêng cho một mục đích nào đó và không cần kết hợp vào tài liệu XML khác thì
điều này không thành vấn đề. Tuy nhiên một khi các ứng dụng phát triển, tập định nghĩa
các XML cần sống chung và kết hợp với nhau thì điều này là một vấn đề. Chẳng hạn nếu
tài liệu của ta tự định nghĩa thẻ mang tên chứa dữ liệu phục vụ cho riêng ứng
dụng của ta. Sau này chúng ta cần tích hợp tài liệu của mình với các ứng dụng khác như
VML hay MathML, chẳng may nếu các ứng dụng này cũng khai báo một phần tử mang
tên thì sao? Trình phân tích nên hiểu thẻ của mình hay của VML hay
MathML? Cần phải có sự phân biệt về phạm vi hay không gian tên (namespace) mà thẻ
có ý nghĩa. Ở đây ta vẫn có thể kết hợp hai thẻ vào một tài liệu XML duy nhất
nhưng phân biệt chúng bằng không gian tên. Chúng ta dùng một định danh tài nguyên
duy nhất (URI) để đặt cho không gian tên cần truy xuất. Tất cả các thẻ đi theo không gian
tên phải đặt sau tên miền và dấu hai chấm. Do URI chưa phổ dụng nên hiện nay ta vẫn
thường dùng địa chỉ URL làm định danh duy nhất cho một không gian tên nào đó.
1. Tạo không gian tên
Tài liệu dưới đây là một thư viện sách. Chúng ta bắt đầu bằng phần tử gốc với
tên thẻ là , bên trong thẻ gốc chứa các phần tử sách và tựa
sách như sau:
- 35 -
XML Tutorial
Để đưa định nghĩa không gian tên cho các thẻ, ta đưa thuộc tính xmlns:prefix
vào phần tử gốc. prefix là tên miền hay không gian tên mà ta muốn chỉ định.
Mỗi không gian tên cần mang một định danh URIs duy nhất. Ở đây chúng ta sử
dụng địa chỉ Web URLs thay cho URIs. Địa chỉ URLs được xem là duy nhất
đối với mọi tài nguyên trên Internet. Không gian tên NhuY được tạo ra cho thư
viện sau:
XML Tutorial
Sau khi tạo ra không gian tên phuongduy, áp dụng tên này cho tất cả các thẻ
nào trong tài liệu XML mà ta muốn chúng duy nhất và độc quyền thuộc về
phuongduy.
Ví dụ:
- 36 -
XML Tutorial
Tiếp theo nếu ta cần tham khảo đến các tựa sách của Amazon thì sao? Tài liệu
XML của Amazon chắc chắn sẽ có phần tử thẻ mang tên vậy để an
toàn chúng ta cần tạo ra không gian tên cho Amazon như sau:
<Library xmlns:phuongduy=""
xmlns:amazon="">
XML Tutorial
XML Tutorial
2. Không gian tên cục bộ (local namespace)
Chúng ta không chỉ có thể đặt thuộc tính xmlns ở phần tử gốc thuộc tính này
có thể đặt ở bất kỳ thẻ nào. Trong ví dụ dưới đây ta di chuyển việc định nghĩa
không gian tên amazon đến nơi mà nó bắt đầu sử dụng.
- 37 -
XML Tutorial
>
XML Tutorial
Chương III: ĐỊNH NGHĨA KIỂU TƯ LIỆU (DTD) &
KIỂM TRA TÍNH HỢP LỆ (VALID) CỦA XML
I.Định nghĩa kiểu tư liệu DTD là gì?
Ở phần trước chúng ta đã tìm hiểu về cú pháp và cách xây dựng một tài liệu XML
hợp khuôn dạng (well-formed). Tuy nhiên tài liệu XML còn được kiểm tra bởi một
quy định nữa đó là tính hợp lệ (valid) mà ở phần đầu ta đã đề cập đến.
Khi định nghĩa thẻ XML, ta tùy ý quyết định cách sử dụng chúng ví dụ như phần tử
chỉ chứa hai phần tử con là và .
Một tài liệu XML được xem là hợp lệ và có giá trị khi toàn bộ các phần tử trong
tài liệu được định nghĩa kiểu (type definition) mà nó sẽ chứa. Việc định nghĩa kiểu dữ
liệu cho các phần tử thẻ còn được gọi là kiểu định nghĩa tư liệu (DTD Document
Type Definition). Vi dụ:
<!DOCTYPE Document [
- 38 -
]>
Hello XML
Welcome to XML
Theo ví dụ trên, rõ ràng chưa cần xem qua nội dung tài liệu chúng ta cũng biết
được ý nghĩa và cấu trúc của toàn bộ tài liệu. Chẳng hạn Document được định
nghĩa ( bằng khai báo <!DOCTYPE) là phần tử thẻ gốc. Phần tử gốc chứa các
phần tử con như Greeting, Message hai phần tử còn này dùng chứa dữ liệu
(#PCDATA).
Ở ví dụ này chúng ta cần lưu ý đến phần tử thật sự về mặt
kỹ thuật mà nói, đây không hoàn toàn là một phần tử. Đây chỉ là phần chỉ thị bắt
đầu khai báo kiểu tư liệu DTD, cú pháp định nghĩa và khai báo kiểu tư liệu cho
các phần tử thẻ tổng quát như sau:
Trong đó DTD là các định nghĩa cho phần tử trong tài liệu. DTD có thể là
định nghĩa nội (internal) hoặc ngoại (external). Trong trường hợp này chúng ta sử
dụng định nghĩa kiểu dữ liệu nội.
<!DOCTYPE Document [
- 39 -
]>
Định nghĩa DTD cần theo cú pháp quy định của tổ chức XML W3C. Trong ví dụ
trên chúng ta định nghĩa thành phần DTD bằng chỉ thị khai báo . Với khai
báo này ta có thể cho biết một phần tử trong tài liệu sẽ mang dữ liệu text #PCDATA hoặc
sẽ chứa các phần tử con khác.
Phần tử Document là phần tử dùng chứa hai phần tử con Greeting và Message. Hai phần
tử này được định nghĩa chứa dữ liệu bằng văn bản và được khai báo:
Định nghĩa #PCDATA cho phép chứa các dữ liệu văn bản thuần túy không thuộc phần
định dạng.
Hơn nữa dựa vào khai báo đầu tiên của định nghĩa chúng ta có thể biết được thêm thông
tin rằng Document là phần tử gốc (root).
II. Khai báo và định nghĩa kiểu dữ liệu DTD
Ta dùng thẻ khai báo để bắt đầu kiểu định nghĩa tư liệu cho các
phần tử XML. Có nhiều mẫu khai báo mà chúng ta có thể sử dụng :
- 40 -
Phần khai báo định nghĩa kiểu tư liệu thường đặt ở phần khởi đầu của tài liệu XML. Ví
dụ chúng ta khai báo kiểu tư liệu trong hello.xml như sau
<!DOCTYPE Document [
]>
Tiếp đến ta định nghĩa kiểu tư liệu cho phần tử thẻ bên trong cặp dấu vuông [] ở đây các
phần tử được định nghĩa đều nằm trọn vẹn bên trong tài liệu, cho nên chúng được gọi là
là các phần tử được định nghĩa nội (internal). Lưu ý là chỉ thị standalone=”yes” cho biết
tài liệu XML của ta không phụ thuộc vào các tài liệu khác.
<!DOCTYPE Document [
]>
1.Khai báo
Khai báo được dùng để bắt đầu định nghĩa kiểu tư liệu DTD cho
một phần tử. Cú pháp khai báo:
- 41 -
Trong đó Name là tên của phần tử muốn định nghĩa; Content_Model có thể là
EMPTY hay ANY hoặc trộn lẫn cả hai nội dung.
Ví dụ sau cho ta thấy cách sử dụng định nghĩa DTD cho các phần tử thẻ. Các biểu
thức diễn đạt dưới đây còn gọi là tham chiếu thực thể theo tham số.
Ở ví dụ này chúng ta khai báo phần tử Document theo mô hình nội dung
(Content_Model) lưu trữ là ANY vậy ANY là gì?
2. Any
Khi khai báo một phần tử mang mô hình nội dung ANY có nghĩa là phần tử
khai báo có thể chứa bất kỳ nội dung nào bạn định nghĩa kể cả mọi phần tử khác.
Nếu một phần tử được khai báo là ANY thì trình phân tích sẽ không kiểm tra cú
pháp xác định tính hợp lệ của nội dung phần tử. Lý do là phần tử có thể chứa mọi
kiểu cho phép,không cần kiểm tra chi tiết nội dung bên trong của phần tử. Để cụ
thể hơn một phần tử có thể giới hạn nội dung mà nó thể hiện thay vì ANY. Chúng
ta có thể cụ thể hóa nội dung của phần tử thông qua khai báo danh sách các phần
tử con.
3. Danh sách các phần tử con
Chúng ta khai báo các phần tử con trong cặp ngoặc đơn của tư liệu DTD.
Ví dụ:
- 42 -
<!DOCTYPE Document [
]>
Dấu * cho biết Document có thể chứa số phần tử Student không giới hạn.
Tài liệu khi đó có thể thêm vào phần tử thẻ như sau:
<!DOCTYPE Document [
]>
Như ví dụ trên ta thấy tài liệu vẫn chưa hợp lệ do ta chưa khai báo phần tử Student.
Chúng ta cần khai báo phần tử Student sẽ chứa kiểu dữ liệu gì.
Ví dụ:
- 43 -
<!DOCTYPE Document [
]>
4. Làm việc với nhiều phần tử con
Khi muốn khai báo một phần tử con có khả năng chứa nhiều phần tử con khác,
thông thường ta phải lặp lại khai báo . Ví dụ trong tài liệu của ta
thẻ gốc chứa hai phần tử Student trong khi khai báo
chỉ định nghĩa có một trình phần tích sẽ báo lỗi.
Ví dụ:
<!DOCTYPE Document [
]>
Lý Như Ý
Hồ Thạnh Trung
- 44 -
Vậy để khắc phục vấn đề này chúng ta làm như thế nào ?
Chúng ta sử dụng các ký tự đại diện cho phép làm việc khai báo và sử dụng nhiều
phần tử con. Như chúng ta thấy ở ví dụ trên ta có sử dụng dấu * yêu cầu cho phép
Document chứa được mọi phần tử Student.
Dưới đây là một số nguyên tắc sử dụng ký tự đại diện có thể áp dụng khi khai báo
và định nghĩa DTD.
Giả sử a và b là hai phần tử con muốn khai báo và định nghĩa ta có cú pháp như
bảng 3-1 sau:
a* Không có hoặc có nhiều phần tử con giống nhau
a+ Có một hoặc nhiều phần tử con giống nhau
a? Phần tử a hoặc không có phần tử nào cả
a,b Phần tử a tiếp đến là phần tử b
a|b Phần tử a hoặc b nhưng không được cả hai
(expression) Tập các phần tử expression trong cặp ngoặc sẽ ảnh hưởng bởi ký
tự đại diện *,+ hoặc ?
Bảng 3-1 Những ký tự đại diện có thể áp dụng
III. Định nghĩa DTD ngoại:
Chúng ta có thể định nghĩa DTD cho phần tử thẻ dựa trên các tham chiếu đã được
định nghĩa sẳn từ các tài liệu XML trước đó.
- 45 -
Sử dụng định nghĩa DTD tham chiếu ngoại khiến cho các ứng dụng XML của bạn
có thể dễ dàng chia sẽ và dùng chung với các ứng dụng khác. Thực tế, đây là cách mà hầu
hết các ứng dụng XML đều hỗ trợ. Có hai cách chỉ định một phần tử DTD tham chiếu
ngoại: tham chiếu ngoại riêng (private DTD) và tham chiếu ngoại chung (Public DTD).
Những định nghĩa DTD tham chiếu ngoại riêng được sử dụng cho một nhóm
người và mang tính cá nhân chúng không được dùng cho mục đích phân phối chung.
Khai báo và định nghĩa phần tử DTD tham chiếu ngoại riêng bằng cách sử dụng khóa
SYSTEM trong chỉ thị khai báo như ví dụ sau:
Như Ý
Lý
29/12/2008
Dell
1
15000000
- 46 -
Ở ví dụ này ta sử dụng tham chiếu ngoại cho nên ta phải đổi lại chỉ thị
standalone=”no”. Bộ phân tích và kiểm tra sẽ hiểu rằng các phần tử mà ta định nghĩa
kiểu DTD sử dụng trong tài liệu này sẽ được khai báo từ một nơi nào đó bên ngoài tài
liệu của chính. Trong chỉ thị định nghĩa chúng ta cho biết các phần tử
DTD được định nghĩa chứa trong file order.dtd thuộc tính SYSTEM cho biết định nghĩa
tham chiếu được xem là riêng tư.
Nội dung của file order.dtd như sau:
IV. Tham chiếu DTD dùng chung:
Thay cho từ khóa SYSTEM bạn dùng từ khóa PUBLIC. Khi ta đặt từ khóa
PUBLIC vào chỉ thị khai báo, các thẻ DTD của ta có khả năng dùng làm
- 47 -
tham chiếu ngoại dùng chung và liên kết với nhiều tài liệu. Tuy nhiên để sử dụng được từ
khóa PUBLIC cần phải tạo ra một định danh chung hình thức (FPI Formal Public
Identifier) và tuân theo một số quy tắc áp dụng cho FPI sau:
Đối với DTD do ta định nghĩa thì trường đầu tiên sẽ là ký tự chấm {.} còn đối với
chuẩn hình thức trường này sẽ tự tham chiếu đến chuẩn của nó ví dụ
ISO/IEC:13449:2000.
Trường thứ hai phải nắm giữ tên nhóm hoặc của người sẽ chịu trách nhiệm bảo
trình và nâng cấp các định nghĩa DTD. Trong trường hợp này ta phải sử dụng tên mang
tính duy nhất (unique) và có thể dễ dàng định danh ra nhóm của bạn.
Trường thứ ba phải chỉ định kiểu của tài liệu được mô tả, thường thì trường này kèm
theo một số định danh duy nhất nào đó. Phần này bao gồm cả phiên bản mà ta cập nhật.
Trường thứ tư chỉ định ngôn ngữ mà định nghía DTD của ta sử dụng.
Các trường trong định danh FPI phải cách nhau bằng cặp sổ trái (//).
Ví dụ:
<!DOCTYPE Document PUBLIC ".//phuongduy//Order XML version 1.0//EN"
"order.dtd">
Như Ý
Ly
29/12/2008
- 48 -
Dell
1
15000000
V. Sử dụng tham chiếu nội và tham chiếu ngoại
Thực tế có thể sử dụng chung hai loại tham chiếu nội và ngoại trong cùng tài liệu
XML vào cùng một thời điểm.
Nếu một phần tử được định nghĩa ở hai nơi tức là trong tài liệu cục bộ và trong file
tham chiếu ngoại thì sao? Phần tử ở đâu sẽ được ưu tiên hơn? Về mặt lý thuyết nếu một
phần tử hay thuộc tính được định nghĩa ở hai nơi thì định nghĩa nội (cục bộ) sẽ được ưu
tiên hơn. Mặc dù vậy thực tế hiện nay hầu hết các trình kiểm tra đều thông báo lỗi và
dừng quá trình phân tích khi phát hiện có hai định nghĩa DTD nội và ngoại trùng nhau.
Chương IV : LƯỢC ĐỒ XML (Schema)
Chúng ta thấy việc sử dụng v
Các file đính kèm theo tài liệu này:
- Tìm hiểu về xml và xslt web 20 ứng dụng trong thương mại điện tử.pdf