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.
98 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3462 | Lượt tải: 0
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:
- Tìm hiểu về xml và xslt web 20 ứng dụng trong thương mại điện tử.pdf