Tìm hiểu về xml và xslt web 2.0 ứng dụng trong thương mại điện tử

PHẦN I: TỔNG QUAN I. Xu hướng chung: Ngày nay, thương mại điện tử đã trở nên rất phổ biến.Với ưu điểm là tiết kiệm chi phí marketing cũng như tạo sự thuận lợi cho người dùng có nhu cầu trang bị đồ dùng cho mình. Thương mại điện tử hầu như hiện diện ở khắp nơi trên thế giới đặc biệt là ở những quốc gia có nền kinh tế phát triển. Tại Việt Nam những năm gần đây thì các doanh nghiệp vừa và nhỏ hầu như đều tiếp thị sản phẩm của mình cũng như bán hàng trực tuyến trên internet. II. Hình thức thương mại điện tử: 1. Khách hàng từ một máy tính tại một nơi nào đó, điền những thông tin thanh toán và địa chỉ liên hệ vào đơn đặt hàng (Order Form) của Website bán hàng (còn gọi là Website thương mại điện tử). Doanh nghiệp nhận được yêu cầu mua hàng hoá hay dịch vụ của khách hàng và phản hồi xác nhận tóm tắt lại những thông tin cần thiết những mặt hàng đã chọn, địa chỉ giao nhận và số phiếu đặt hàng . 2. Khách hàng kiểm tra lại các thông tin và kích (click) vào nút (button) "đặt hàng", từ bàn phím hay chuột (mouse) của máy tính, để gởi thông tin trả về cho doanh nghiệp. 3. Doanh nghiệp nhận và lưu trữ thông tin đặt hàng đồng thời chuyển tiếp thông tin thanh toán (số thẻ tín dụng, ngày đáo hạn, chủ thẻ .) đã được mã hoá đến máy chủ (Server, thiết bị xử lý dữ liệu) của Trung tâm cung cấp dịch vụ xử lý thẻ trên mạng Internet. Với quá trình mã hóa các thông tin thanh toán của khách hàng được bảo mật an toàn nhằm chống gian lận trong các giao dịch (chẳng hạn doanh nghiệp sẽ không biết được thông tin về thẻ tín dụng của khách hàng). 4. Khi Trung tâm Xử lý thẻ tín dụng nhận được thông tin thanh toán, sẽ giải mã thông tin và xử lý giao dịch đằng sau bức tường lửa (FireWall) và tách rời mạng Internet (off the Internet), nhằm mục đích bảo mật tuyệt đối cho các giao dịch thương mại, định dạng lại giao dịch và chuyển tiếp thông tin thanh toán đến ngân hàng của doanh nghiệp (Acquirer) theo một đường dây thuê bao riêng (một đường truyền số liệu riêng biệt). 5. Ngân hàng của doanh nghiệp gởi thông điệp điện tử yêu cầu thanh toán (authorization request) đến Ngân hàng hoặc Công ty cung cấp thẻ tín dụng của khách hàng (Issuer). Và tổ chức tài chính này sẽ phản hồi là đồng ý hoặc từ chối thanh toán đến trung tâm xử lý thẻ tín dụng trên mạng Internet. 6. Trung tâm xử lý thẻ tín dụng trên Internet sẽ tiếp tục chuyển tiếp những thông tin phản hồi trên đến doanh nghiệp, và tùy theo đó doanh nghiệp thông báo cho khách hàng được rõ là đơn đặt hàng sẽ được thực hiện hay không. 7. Toàn bộ thời gian thực hiện một giao dịch qua mạng từ bước 1 -> bước 6 được xử lý trong khoảng 15 - 20 giây. III. Lý do và mục tiêu của đề tài: Như chúng ta thấy thương mại điện tử ngày trở nên phổ biến và cùng với những lợi ích mà thương mại điện tử đem lại cho doanh nghiệp và người dùng như : 1. Thương mại điện tử (TMĐT) giúp cho các doanh nghiệp nắm được thông tin phong phú về thị trường và đối tác. 2. TMĐT giúp giảm chi phí sản xuất. 3. TMĐT giúp giảm chi phí bán hàng và tiếp thị. 4. TMĐT qua Internet giúp người tiêu dùng và các doanh nghiệp giảm đáng kể thời gian và chi phí giao dịch. 5. Tạo điều kiện sớm tiếp cận nền kinh tế số hóa. Nhận thức rõ về những lợi ích mà thương mại điện tử đem lại nên em quyết định tìm hiểu và nghiên cứu xây dựng một website giơi thiệu và bán sản phẩm trực tuyến trên internet. IV. Cấu trúc báo cáo: Từ những mục tiêu và lợi ích trên em đã thực hiện các công việc và kết quả các công việc được thể hiện trong báo cáo luận văn này theo cấu trúc sau: Báo cáo luận văn gôm 3 phần: Phần I .Tổng quan: Xu hướng thương mại điện tử hiện nay nêu lên nhu cầu thực tế và lý do thực hiện đề tài . Phần II. Tìm hiểu về XML và XSLT Chương I. Tìm hiểu về XML và XSLT: Giới thiệu về ngôn ngữ XML đồng thời cũng giới thiệu sơ lược về hợp khuôn dạng (Well-formed) và tính hợp lệ (validation). Chương II. Xây dựng tài liệu XML hợp khuôn dạng: Giới thiệu cụ thể cấu trúc bên trong của một tài liệu XML. Chương III. Định nghĩa kiểu tư liệu DTD và kiểm tra tính hợp lệ cảu tài liệu XML: Giới thiệu về cách định nghĩa và khai báo các phần tử (Element) được sử dụng trong tài liệu XML để tạo nên một tài liệu có cấu trúc dạng cây. Chương IV. Lược đồ XML (Schema XML) : Giới thiệu về chức năng của lược đồ XML và sự cần thiết của lược đồ XML Chương V: Sử dụng XSLT để transform dữ liệu XML: Giới thiệu về XSLT và các lệnh cũng như cấu trúc của một file XSLT. Chương VI. Chương trình ứng dụng: Xây dựng website giới thiệu và bán hàng trực tuyến.

pdf98 trang | Chia sẻ: lvcdongnoi | Lượt xem: 3483 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tìm hiểu về xml và xslt web 2.0 ứng dụng trong thương mại điện tử, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ta sử dụng cách thứ hai sử dụng file xsl để chỉ cho trình duyệt hiểu những thẻ ta đặt ra. Đây là toàn bộ nội dung file hello.xslt. - 8 - <xsl:stylesheet version="1.0" xmlns:xsl="" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result- prefixes="msxsl" > Cũng như CSS chúng ta cũng cho file xml tham chiếu tới file xsl Hello XML Welcome to XML Chúng ta sẽ tìm hiểu về XSLT ở những phần sau. Sau khi đưa file xslt vào thì file xml được hiển thị trên trình duyệt như hình 1-2: - 9 - Hình 1-2 Tài liệu XML được hiển thị kết với XSLT trong IE 7.0 V. Điều tuyệt diệu về XML XML trở nên phổ biến có rất nhiều nguyên do và chúng ta sẽ xem xét các nguyên do này trong phần tổng quát dưới đây. Điểm quan trọng nhất là XML cho phép dễ dàng xử lý chuyển tải và trao đổi dữ liệu rất nhiều ứng dụng và tài liệu người dùng với các định dạng khác nhau. 1. Dễ dàng trao đổi dữ liệu Nếu ta làm việc với máy tính trong một thời gian dài chúng ta sẽ thấy xung quanh ta có rất nhiều loại file. Chuyển đổi dữ liệu giữa chúng là một vấn đề nan giải mặc dù đã có không ít trình ứng dụng hỗ trợ. Ví dụ .doc, .xsl,.mdb vv.vv Trong XML dữ liệu và định dạng được lưu ở dạng text và chúng ta có thể dễ dàng cấu hình cũng như thay đổi chúng bằng các trình soạn thảo XML chuyên nghiệp để soạn thảo nội dung XML. Tuy nhiên thì trường hợp đơn giản bạn có thể dùng trình soạn thảo - 10 - Notepad trong window để chỉnh sữa file xml. Dữ liệu và các thẻ trong XML cũng không mã hóa theo một thuật giải đòi hỏi bản quyền nào cả. 2. Tùy biến ngôn ngữ định dạng Ta có thể tạo ra các ngôn ngữ định dạng tùy biến dựa trên XML, đây là một trong những khả năng mạnh nhất của XML. Hàng trăm ngôn ngữ định dạng chuyên dụng dựa trên XML ra đời như: Ngôn ngữ văn phòng về kỹ thuật nghiệp vụ ngân hàng (BITS Banking Industry Technology Secretariat) Trao đổi dữ liệu tài chính (IFX Financial Exchange) Hệ thống thanh toán qua Internet của nghiệp vụ ngân hàng (BIPS Banking Internet Payment System). Định dạng trao đổi viễn thông (TIM Telecommunication Interchanged Markup). Thư viện kinh doanh thông dụng (CBL Common Business Library). Khởi đầu XML kinh doanh điện tử (ebXML). Ngôn ngữ định dạng dữ liệu sản phẩm (PDML Product Data Markup Language) Giao thức trao đổi thông tin tài chính (FIX Financial Information eXchange protocol). Một vài ngôn ngữ định dạng tùy biến như ngôn ngữ định dạng trong lĩnh vực hóa học (CML Chemical Markup Language) cho phép bạn biểu diễn các công thức hóa hóa và hóa trị của phân tử ở dạng đồ họa. Tương tự hãy tưởng tượng thật tiện lợi nếu XML có thể diễn đạt được thông tin các ảnh đồ họa của những thiết kế mô hình nhà và trình duyệt sẽ hiển thị lên toàn bộ ngôi nhà của bạn dựa vào XML. - 11 - Chúng ta không chỉ có thể tạo ra một tập ngôn ngữ con dựa vào XML mà còn có thể mở rộng chúng. Thí dụ như nếu một người hay một nhóm nào đó đã tạo ra ngôn ngữ định dạng con của XML ta sử dụng và cảm thấy thiếu một số thẻ. Ta có thể thêm vào các thẻ khác, mà theo đó giúp ta thực hiện diễn đạt cũng như lưu trữ dễ dàng hơn. Thực tế thì điều đó đang diễn ra với XHTML. 3. Dữ liệu có cấu trúc và tích hợp: Một khía cạnh mạnh mẽ khác của XML là không chỉ cho phép bạn lưu dữ liệu vào file XML dựa trên thẻ con mà còn tổ chức dữ liệu theo cấu trúc. XML cho phép các phần tử thẻ tích hợp với nhau tạo nên một cấu trúc dữ liệu phân cấp hoàn chỉnh. Điều này cực kỳ quan trọng khi bạn cần đến khả năng định nghĩa dữ liệu có cấu trúc. Ví dụ ta muốn mô ta một cấu trúc lớp học ta có thể định nghĩa lớp học theo XML như sau: XML in the real world! XML 29/12/2008 Như Ý Lý - 12 - Thạnh Trung Hồ Ta vừa thiết lập thông tin về một lớp hội thảo bằng XML. Có hai sinh viên đưa vào buổi hội thảo này. Với mỗi phần tử sinh viên cần kèm theo thông tin về họ và tên bằng thẻ và . được xem là một bảng dữ liệu đồng nhất không thể chen ngang thẻ vào bên trong nội dung thẻ được. Điều này sẽ làm cho tài liệu không có ý nghĩa. Chúng ta sẽ tìm hiểu về “Tìm hiểu tài liệu XML hợp khuôn dạng” ở phần sau. Tuy nhiên trong chương đầu tiên chúng ta sẽ được thấy cái tổng quát của tài XML có hợp khuôn dạng (well-formed) và kiểm tra tài liệu có hợp lệ (valid) hay không. 4. Tài liệu XML hợp khuôn dạng (Well-formed) Tài liệu hợp khuôn dạng là gì? Để hợp khuôn dạng, một tài liệu XML cần phải tuân theo quy tắc cú pháp thiết lập cho XML bởi tổ chức quốc tế W3C. Các quy tắc này được nêu ra trong đặc tả XML 1.0. Trước hết để hiểu được tài liệu khuôn dạng hợp lệ chúng ta hay nhìn vào những tài liệu không hợp khuôn dạng. Đây là tài liệu mà có các thẻ được đặt không sắp xếp theo một trật tự nào cả lồng và đan chéo lẫn nhau. Bao gồm nhiều phần tử cùng làm thẻ gốc. Tài liệu có thẻ mở mà không có thẻ đóng… Ví dụ: - 13 - Hello XML Welcome to XML Nếu là các thẻ HTML thì không có vấn đề gì cả. Trình duyệt vẫn hiểu và hiển thị đúng nhưng đối với XML thì bạn sẽ bị trình duyệt bắt lỗi chỉ ra đúng vị trí không hợp khuôn dạng của tài liệu. 5. Tài liệu XML hợp lệ (Valid document) Hầu hết các trình duyệt trước hết kiểm tra xem tài liệu XML của bạn có hợp khuông dạng không đã. Tiếp theo một vài trình duyệt có thể kiểm tra thêm tính hớp lệ của tài liệu. Một tài liệu XML được gọi là hợp lệ khi nó là tài liệu được kết hợp với định nghĩa kiểu tư liệu (Document Type Definition DTD) và tuân theo chuẩn DTD. Các định nghĩa DTD nhằm xác định cú pháp đúng đắn cho tài liệu. DTD có thể được chứa trong một file tách biệt hoặc chứa ngay trong chính tài liệu. DTD sử dụng phần tử hay thẻ . Dưới đây là một ví dụ về định nghĩa kiểu tư liệu DTD được chúng ta thêm vào file tài liệu XML hello.xml. <!DOCTYPE Document [ - 14 - ]> Hello XML Welcome to XML Chúng ta sẽ tìm hiểu chi tiết về DTD ở phẩn sau. Nhưng ở đây ta có thể thấy DTD chỉ định rằng bạn có thể có hai thẻ Greeting và Message được định nghĩa là các thẻ có thể mạng theo dữ liệu văn bản. Chúng ta đã có cái nhìn tổng quan về tài liệu XML như: làm thế nào để hiển thị nội dung XML với bảng định kiểu CSS,XSLT. Tài liệu XML hợp khuôn dạng và hợp lệ là gì. Tại sao phải kiểm tra cú pháp của XML nghiêm ngặt. Mặc dù vậy, đó chỉ là một phần mà bạn thấy qua về XML. Rất nhiều tài liệu XML được dùng cho mục đích không phải hiển thị trên trình duyệt, XML được dùng để chứa dữ liệu, phục vụ mọi nhu cầu của chương trình ứng dụng. Tuy không cần hiển thị nội dung XML dựa vào CSS hay XSL nhưng chúng ta phải biết cách phân tích (Parse) nội dung tài liệu XML rút trích ra nội dung trong thẻ. Xml có thể dùng để mô tả và biểu diên một cơ sở dữ liệu hoàn chỉnh. Chương II: I. XÂY DỰNG TÀI LIỆU XML HỢP KHUÔN DẠNG Trong HTML có khoảng 100 thẻ (tag) đã được định nghĩa. Trình duyệt có thể kiểm tra các thẻ này và hiển thị nội dung tài liệu trong khuôn khổ các thẻ quy định trước. Trái lại, với XML bạn hoàn toàn tự do định nghĩa các thẻ nên bạn phải có trách nhiệm với chúng. Với XML bạn tự định nghĩa thẻ và tùy ý quyết định mục đích sử dụng của thẻ. Mặc dù được tự do định nghĩa nhưng các thẻ XML phải tuân theo một quy tắc định nghĩa bắt buộc. Nếu ta không theo những quy tắc này khi định nghĩa thẻ các bộ phân tích cú pháp XML sẽ không chịu làm việc với tài liệu của chúng ta. Như đề cập ở trên tài liệu XML của chúng ta phải thỏa mãn hai điều kiện đó là hợp khuôn dạng và hợp lệ. Tài liệu được coi là hợp khuôn dạng khi theo đúng các bước thiết kế và xây dựng XML do W3C - 15 - đưa ra. Nói chung ta phải theo cú pháp khi khai báo thẻ XML và tuân theo cách đặt các thẻ XML theo một trật tự có thể phân tích được bởi các bộ phân tích (Parse). Chúng ta băt đầu xây dựng một tài liệu XML hợp khuôn dạng Hide your heart Bonnie Tyler UK CBS Records 9.90 1988 Lưu tài liệu XML này với tập tin catalog.xml. như bạn thấy đó tập tin catalog.xml ngày càng phát triển kích thước dữ liệu sẽ phình to ra. Mặc dù vậy, cho dù có phình to ra đến đâu nhưng nếu bạn tiếp tục tao ra thẻ và thêm dữ liệu vào theo đúng cách trên thì tất cả các trình phân tích đều đọc được nội dung tài liệu của ta. Tài liệu XML thiết kế theo 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à khai báo DTD rất phức tạp do đó tổ chức W3C đã đưa ra một giải pháp tổng quát hóa DTD hơn đó là khai báo và định nghĩa các phần tử trong tài liệu XML theo lược đồ XML (XML Schema). Thực sự thì lược đồ XML không đơn giản hơn DTD nhưng nó mạnh hơn và chính xác hơn. Để kiểm tra tính hợp lệ của các định nghĩa DTD trong tài liệu ta dùng bộ kiểm tra - 49 - validator, để kiểm tra tính hợp lệ của các khai báo theo lược đồ XML ta dùng bộ kiểm tra cú pháp lược đồ (schema checker). Chúng ta bắt đầu tìm hiểu về schema XML thông qua ví dụ đơn giản sau đây: Như Ý Thạnh Trung Lập trình XML Lưu tài liệu này với tập tinh laptrinh.xml. Làm thế nào kết hợp lược đồ XML để trình duyệt hiểu. để thực hiện yêu cầu này cần chỉ định một không gian tên mặc định cho tài liệu bằng khai báo thuộc tính xmlns tại phần tử gốc cùng với thông tin về file chứa lược đồ x-schema như sau : Như Ý Thạnh Trung Lập trình XML Nội dung file hello.xsd <xs:schema name="hello" - 50 - targetNamespace="" elementFormDefault="qualified" xmlns="" xmlns:mstns="" xmlns:xs=""> I.Khai báo các phần tử và kiểu dữ liệu: Điểm cơ bản nhất để hiểu lược đồ XML đó là khái niệm sử dụng kiểu giản đơn và kiểu phức hợp trong khai báo kiểu cho các phần tử XML. Để chỉ định kiểu cho một phần tử ta phải đảm bảo kiểu phải được định nghĩa trước đó. Kiểu phức hợp là kiểu chứa các phần tử con trong nó hoặc chứa trong thuộc tính trong khi kiểu giản đơn thì không. Kiểu giản đơn là kiểu nội tại đã được định nghĩa sẵn và ta có thể dùng nó tự do trong lược đồ XML. Dưới đây là bảng liệt kể các kiểu giản đơn. Binary Kiểu dữ liệu nhị phân boolean Kiểu lý luận byte Kiểu byte century Kiểu thế kỷ (ví dụ 21) date Kiểu ngày - 51 - decimal Kiểu thập phân double Kiểu số thực 64 bits ENTITY Kiểu thực thể ENTITIES Kiểu đa thực thể ID Kiểu định danh int,integer Kiểu số nguyên IDREF Kiểu tham chiếu định danh NOTATION Kiểu ghi chú NMTOKEN Kiểu token đơn NMTOKENS Kiểu đa token month Kiểu tháng String Kiểu chuỗi Bảng 4-1 Bảng liệt kê các kiểu dữ liệu đơn giản Thực ra thì còn rất nhiều kiểu nữa chúng ta có thể tham khảo tại trang web Tạo một kiểu phức hợp mới trong lược đồ bằng cách dùng phần tử khai báo . Một định nghĩa về kiểu phức hợp bản thân nó thường chứa các khai báo phần tử con, tham chiếu đến các phần tử khác và khai báo thuộc tính. Khai báo phần tử bằng chỉ thị khai báo và khai báo thuộc tính bằng chỉ thị . Cũng tương tự như DTD khai báo phần tử sẽ chỉ định cú pháp của phần tử trong lược đồ ta có thể chỉ định kiểu cho phần tử thậm chí còn có thể chỉ định kiểu cho thuộc tính. - 52 - Chỉ định số lần xuất hiện của các phần tử: MinOccurs Chỉ định phần tử đó xuất hiện hoặc không xuất hiện ít nhất MaxOccurs Chỉ định phần tử đó xuất hiện tối đa là bao nhiêu lần Bảng 4-2 Chỉ số xuất hiện của các phần tử (element) Nếu như không chỉ định MinOccurs và MaxOccurs thì mặc định MinOccurs =1 còn MaxOccrus không giới hạn. Điều này có nghĩa là phải có ít nhất một phần tử xuất hiện. II.Chỉ định ràng buộc và trị mặc định cho thuộc tính Thuộc tính không có kiểu phức hợp chúng ta chỉ có thể khai báo thuộc tính giản đơn nhưng thay vào đó ta có thể chỉ định các ràng buộc cho thuộc tính. Các ràng buộc cho thuộc tính thể hiện ở bảng sau: required Thuộc tính cần phải hiện hữu trong thẻ và phải được gán trị optional Thuộc tính có thể có hoặc không và giá trị gán cho thuộc tính là không bắt buộc fixed Giá trị thuộc tính phải được gán cố định và không được thay đổi như đã gán trong lược đồ. default Nếu thuộc tính không gán trị thì giá trị định nghĩa trong lược đồ là giá - 53 - trị mặc định của thuộc tính prohibited Không cho phép thuộc tính xuất hiện Bảng 4-3 Các ràng buộc giá trị cho thuộc tính. Chương V: SỬ DỤNG XSL TRANSFORM TÀI LIỆU XML Như chúng ta đã tìm hiểu, XML là ngôn ngữ định dạng thiên về mô tả cấu trúc dữ liệu và định nghĩa ngôn ngữ. Bản thân dữ liệu XML tự nó không thể hiện định dạng cho tài liệu như HTML. Chúng ta phải có cách nào đó chuyển dữ liệu XML thành tài liệu xem được bởi người dùng. Để làm được điều này ngoài cách sử dụng CSS,DOM,DSO,SAX chúng ta còn sử dụng ngôn ngữ chuyển dịch tổng quát hơn đó là XSLT (Extendsion Style Language). XSLT là ngôn ngữ định kiểu mở rộng. Tương tự CSS, XSLT thực hiện nhiệm vụ biến đổi dữ liệu của XML để hiển thị cho phía người dùng cuối một tài liệu đã định dạng tương tự HTML. Nhiệm vụ của XSLT là trích rút dữ liệu XML đưa vào khuôn dạng HTML. Một tài liệu của XSLT phải được viết theo đúng cú pháp và hợp khuôn dạng với quy tắc XML. Chúng ta xem xét ví dụ sau để xem XSLT rút trích dữ liệu XML như thế nào và kết quả được hiển thị như hình 6-1. Hide your heart - 54 - Bonnie Tyler UK CBS Records 9.90 1988 Lưu file này với tập tin catalog.xml và đây là tập tin catalog.xslt. <xsl:stylesheet version="1.0" xmlns:xsl=""> My CD Collection Title Artist - 55 - Price - 56 - hình 5-1 Sử dụng XSLT để rút trích tài liệu XML - 57 - I. Tạo tài liệu XSLT 1. Tài liệu XSLT yêu cầu tiếp nhận dữ liệu XML theo cấu trúc cây, thực hiện biến đổi và cho ra một tài liệu định dạng cũng theo cấu trúc hình cây khác. Ở gốc độ tài liệu XSLT, dữ liệu đầu vào là một tập hợp các nút (node) có 7 loại nút mà bộ xử lý XSL có thể nhận dạng và chuyển dịch là: Gốc tài liệu (root document) Nơi khởi đầu của tài liệu cần chuyển dịch. Thuộc tính (Atribute) Nắm giữ thuộc tính của phần tử thẻ, giá trị thuộc tính đã loại bỏ dấu bao chuỗi. Chú thích (Comment) Nắm giữ dữ liệu của chuỗi văn bản chú thích Phần tử (Element) Bao gồm thẻ tên của phần tử và tập các phần tử con giữa thẻ đóng và thẻ mở nếu có Không gian tên (Namespace) Nằm giữa chuỗi định danh URI của không gian tên Chỉ thị xử lý (Processing instruction) Nắm giữ nội dung chuỗi chỉ thị xử lý đã loại bỏ hai ký tự định dạng Văn bản (text) Dữ liệu thuần text nằm giữa thẻ đóng và thẻ mở II. Các phần tử (Element) của XSLT: 1. Element XSL định nghĩa một số lệnh chế biến (processing commands) để trích dữ liệu ra từ một tài liệu XML và hòa nó vào một hồ sơ kết quả. Cái lệnh căn bản và hữu dụng nhất trong số này là lệnh value-of. Lệnh value-of chọn trị số (value) của một - 58 - Element hay Attribute nào đó trong XML và hòa nó với hồ sơ output. Lệnh value-of có dạng một XML Element trong XSL. Nó dùng một Attribute tên select có value là một XPath Location Path để trích ra một Node. Kết quả là value của (value-of) Node ấy. bây giờ ta có thể trình bày dữ liệu của XML với lệnh value-of như sau: <xsl:stylesheet version=”1.0” xmlns:xsl=””> My CD Collection Title Artist - 59 - hình 5-2 Rút trích dữ liệu XML sử dụng element 2. Element - 60 - Trong một tài liệu XML, có thể có nhiều Elements mang cùng một tên để nói đến một danh sách những thứ tương tự. Thí dụ trong tài liệu đặt hàng có hai Element Item để diễn tả hai món hàng được đặt. Hầu hết ngôn ngữ lập trình cho ta phương tiện để áp dụng cùng một cách chế biến cho mọi món trong nhóm. Như trong Visual Basic ta có FOR loop hay DO loop để iterate qua từng món trong bộ. Trong XSL cũng thế, bạn có thể dùng lệnh for-each để đi lần lượt qua từng Element trong nhóm, bằng cách dùng Attribute select để chỉ định những nodes mà bạn muốn làm việc. Thí dụ: <xsl:stylesheet version="1.0" xmlns:xsl=""> My CD Collection Title Artist - 61 - - 62 - hình 5-3 Rút trích dữ liệu XML sử dụng element 3. Các câu lệnh điều kiện - 63 - Element Cú pháp sử dụng: ... ...some output if the expression is true... ... Thí dụ: <xsl:stylesheet version="1.0" xmlns:xsl=""> My CD Collection Title Artist - 64 - - 65 - Hình 5-4 Rút trích dữ liệu XML sử dụng điều kiện if. Chương VI: Chương Trình Ứng Dụng I. Phân tích thiết kế - 66 - 1. Thiết kế cơ sở dữ liệu: 1.1 Mô hình thiết kế: a. ERD Phisical: Hình 6-1 Mô hình ERD Phisycal b.ERD Logical - 67 - Hình 6-2 Mô hình ERD Logical c. Mô hình Diargam - 68 - Hình 6.3 Mô hình Diagram 1. 2 Mô tả các bảng: a. Account table: STT Thuộc tính Loại Kiểu dữ liệu MGT Ràng buộc Ý nghĩa 1 Col_account _id Khóa chính long Tự tăng Id tài khoản 2 Col_fullname nvarch Not null Họ và tên - 69 - ar người dùng 3 Col_usernam e nvarch ar Not null & không trùng Tên đăng nhập 4 Col_pass nvarch ar Not null Mật khẩu người dùng 5 Col_email nvarch ar Not null phải có dạng abc@phuongduy.com Địa chỉ email 6 Col_address nvarch ar Not null Địa chỉ người dùng 7 Col_phone nvarch ar Not null Số điện thoại người dùng 8 Col_date_of_ birth nvarch ar Ngày sinh b. Category table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa - 70 - 1 Col_category_id Khóa chính long Tự tăng Mã danh mục 2 Col_lang nvarchar (vie or eng) Ngôn ngữ 3 Col_name nvarchar Not null Tên danh mục 4 Col_visible Bit Not null Kích hoạt danh mục đó 5 Col_index long >0 Not null Vị trí danh mục 6 Col_parent long >0 Thuộc danh mục nào C. Permission table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa - 71 - 1 Col_permmision_id Khóa chính long Tự tăng ID 2 Col_page_id Khóa ngoại long Id trang 3 Col_edit int [0 1] Quyền được sửa 4 Col_add int [0 1] Quyền được thêm 5 Col_del int [0 1] Quyền được xóa 6 Col_full int [0 1] Toàn quyền 7 Col_user_id Khóa ngoại Id quản trị d. Product table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa 1 Col_product_id Khóa chính long Tự tăng Mã sản phẩm - 72 - 2 Col_uid nvarchar Không trùng Sử dụng để update lại giá 3 Col_name nvarchar Not null Tên sản phẩm 4 Col_unit nvarchar Not null Đơn vị sản phẩm 5 Col_unit_currency nvarchar Not null Đơn vị tiền tệ 6 Col_category_id Khóa ngoại long Id danh mục 7 Col_lang nvarchar Not null Ngôn ngữ 8 Col_description ntext Not null Mô tả sản phẩm 9 Col_detail ntext Chi tiết sản phẩm 10 Col_hot long Sản phẩm được mua nhiều - 73 - nhất 11 Col_visible bit Sản phẩm kích hoạt chưa 12 Col_index long >0 Not null Vị trí sản phẩm 13 Col_Picture nvarchar Not null Hình sản phẩm 14 Col_price double Not null Giá e. Price Product table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa 1 Col_id Khóa chính long Id của bảng 2 Col_product_id Khóa ngoaij nvarchar Lấy uid của sản phẩm Uid sản phẩm 3 Col_price double >0 Not null Giá sản phẩm - 74 - 4 Col_date datetime Not null Ngày cập nhật lại giá f. Product news table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa 1 Col_product_news_id Khóa chính long Tự tăng Mã tin tức 2 Col_content ntext Không trùng Chi tiết tin 3 Col_short_content ntext Not null Sơ lược tin tức 4 Col_category_id Khóa ngoại long Id danh mục 5 Col_lang nvarchar Not null Ngôn ngữ 6 Col_hot long Tin được đọc nhiều nhất 7 Col_visible bit Tin kích hoạt chưa - 75 - 8 Col_index long >0 Not null Vị trí tin 9 Col_Picture nvarchar Not null Hình tin tức g. Shopping cart table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa 1 Col_shopping_cart_id Khóa chính long Tự tăng Id giỏ hàng 2 Col_uid nvarchar Không trùng & tự sinh Dùng để sử dụng cho giỏ hàng 3 Col_account_id Khóa ngoại long Giỏ hàng này của ai 4 Col_total double >0 Not null Tổng giá trị của giỏ hảng đóa 5 Col_lang nvarchar Not null Ngôn - 76 - ngữ 6 Col_pay_form nvarchar Not null Hình thức thanh toán 7 Col_date datetime Not null Ngày đặt hàng 8 Col_close bit Not null Thanh toán chưa h. Shopping Cart Item table: STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa 1 Col_shopping_cart_id Khóa chính nvarchar Lấy giá trị uid của giỏ hàng Uid giỏ hàng 2 Col_product_id Khoá chính long Id sản phẩm 3 Col_quantity Int >0 Số lượng sản - 77 - phẩm 4 Col_price double >0 Giá sản phẩm i. User table STT Thuộc tính Loại Kiểu dữ liệu Miền giá trị Ràng buộc Ý nghĩa 1 Col_user_id Khóa chính long Tự tăng Id 2 Col_fullname nvarchar Not null Họ và tên 3 Col_username nvarchar Not null Tên đăng nhập 4 Col_pass nvarchar Not null Mật khẩu 5 Col_email nvarchar Not null kiểm tra email hợp lệ Địa chỉ email 6 Col_address nvarchar Not null Địa chỉ người quản trị - 78 - 7 Col_phone nvarchar Not null Số điện thoại người quản trị 8 Col_date_of_birth nvarchar Ngày sinh 9 Col_sex int Giới tính 2. Mô hình UML: 2.1 Usecase Diagram: a. usecase hệ thống: - 79 - Hình 6-4 Usecase hệ thống b.Admin Usecase: - 80 - Hình 6-5 Usecase diagram admin c.Usecase User: - 81 - Hình 6-6 Usecase diagram user d.Shoppingcart usecase: - 82 - Hình 6-7 ShoppingCart Usecase 2.2 Sequences Diagram: a. Sequence diagram đăng nhập: - 83 - Hình 6-8 Sequence Diagram đăng nhập. b. Sequences Diagram Đăng ký: - 84 - Hình 6-9 Sequence diagram đăng ký c. Shopping Cart Sequence diagram: Khách hàng chọn sản phẩm sau đó nếu khách hàng muốn mua tiếp thì click vào nút tiếp tục mua hàng nếu khách hàng chọn thanh toán thì hệ thông kiểm tra khách hàng có đăng nhập chưa nếu khách hàng đã đăng nhập rùi thì hệ thống sẽ cập nhật giỏ hàng của khách hàng và ngược lại thì hệ thống yêu cầu khách hàng phải đăng nhập nếu chưa là thành viên thì có thể click vào nút đăng ký. - 85 - Hình 6-10 Shopping Cart Sequence diagram 2.3 Class diagram: - 86 - a. System Class diagram : Hình 6-11 System class diagram - 87 - b.Class diagram Shopping cart: Hình 6-12 Class diagram shoppingcart c. Class diagram Login: - 88 - Hình 6-13 Class Diagram Login II. Giao diện website: 1.Trang quản lý người dùng: Cho phép người quản trị thêm mới, cập nhật và xóa user. Chức năng thêm user chỉ thành công khi nhập đầy đủ thông tin cũng như vượt qua các ràng buộc ví dụ như email phải có dạng abc@yahoo.com - 89 - hình 6-14 Quản lý người dùng 2. Trang đăng nhập: Người quản trị hay user được phép thêm thông tin cũng như cập nhật sản phẩm, tin tức thì bắt buộc người đó phải đăng nhập. - 90 - hình 6-15 Đăng nhập 3.Trang quản lý sản phẩm: Hình 6-16 Quản lý sản phẩm - 91 - Cho phép người quản trị cập nhật cũng như thêm mới một sản phẩm. 4. Trang quản lý tin tức: Hình 6-17 Quản lý tin tức Cho phép người quản trị thêm mới cũng như cập nhật lại tin tức. 5.Trang quản lý danh mục: - 92 - Hình 6-18 Quản lý danh mục Cho phép người quản trị thêm mới cũng như cập nhât lại danh mục sản phẩm. 6. Quản lý giỏ hàng khách hàng: Hình 6-19 Quản lý giỏ hàng khách hàng 7.Cập nhật giá sản phẩm: - 93 - Hình 6-20 Cập nhật giá sản phẩm Người quản trị chọn sản phẩm sau đó update lại giá cho sản phẩm đó. 8.Trang chủ: - 94 - Hình 6-21 Trang chủ Giới thiệu sản phẩm các mặt hàng đang có trên thị trường cũng như cho phép người dùng sử dụng những chức như xem chi tiêt mặt hàng đó hoặc là đặt hàng…. 9.Trang tin tức - 95 - Hình 6-22 Trang tin tức Cho phép người dùng đọc tin tức về nhưng sản phẩm trên thị trường. 10.Trang đăng ký thành viên - 96 - Hình 6-23 Đăng ký thành viên Người dùng được phép đăng ký làm thành viên để đặt hàng và mua hàng trực tuyến. 11.Chi tiết sản phẩm: - 97 - Hình 6-24 Chi tiết sản phẩm 12.Chi tiết tin tức: hình 6-25 Chi tiết tin tức - 98 - Chương VII. Tổng Kết II. Kết Luận: Sau thời gian tìm hiểu và viết chương trình ứng dụng đề tài đã đạt được những điều sau: Xây dựng được một dịch vụ bán hàng tự động. Có kiến thức cơ bản về nền tảng XML và XSLT cũng như công nghệ Web 2.0. Có kiến thức cơ bản về thương mại điện tử. III. Hướng phát triển: Thêm tính năng thanh toán tự động thông qua thẻ tín dụng hoặc ATM. Gửi mail đến người dùng trên internet (hiện tại chỉ gửi được mail cục bộ (POP3) do chưa có mail server). Hoàn thiện thêm các chức năng cũng như giao diện dễ cho người sử dụng. IV. Tài liệu tham khảo 1. XML nền tảng và xây dựng – Tác giả Nguyễn Phương Lan – Nhà Xuất bản giáo dục 2001. 2. 3. 4. 5. ajax/Controls/Examples/Default/DefaultCS.aspx.

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
Luận văn liên quan