Đồ án Xây dựng website giới thiệu và bán hàng trực tuyến

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 đó.

pdf98 trang | Chia sẻ: netpro | Lượt xem: 2204 | Lượt tải: 2download
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:

  • pdfTìm hiểu về xml và xslt web 20 ứng dụng trong thương mại điện tử.pdf