Bài 1
Tìm hiu cu trúc và cú pháp ca XML
Đ thy nh hưởng rng ln ca XML trong ngành Công Ngh Thông Tin cn đi
bn ch cn để ý rng XML là lý do ca s hin hu (raison d'être) ca Microsoft .Net.
T WindowsXP tr đi, bên trong đầy dy XML. Microsoft đã đầu tư hơn 3 t đô la M
vào k thut ny, và trong tương lai gn đây tt c phn mm ca Microsoft nếu
không dn nhà (được ported) qua .NET thì ít nht cũng được .NET Enabled (dùng
cho .NET được). Đi song song vi .NET là SQLServer 2000, mt cơ s d liu h tr
XML hoàn toàn.
Có l bn đã nghe qua Web Services. Đó là nhng dch v trên Web ta có th dùng
on-demand , tc là khi nào cn cho chương trình ca mình, bng cách gi nó theo
phương pháp ging ging như gi mt Hàm (Function). Web Services được trin khai
da vào XML và Http, chun dùng để gi các trang Web.
Đim quan trng ca k thut XML là nó không thuc riêng v mt công ty nào, nhưng
là mt tiêu chun được mi người công nhn vì được son ra bi World Wide Web
Consortium - W3C (mt ban son thão vi s hin din ca tt c các dân có máu mt
trên giang h Tin hc) và nhng ai mun đóng góp bng cách trao đổi qua Email. Bn
thân ca XML tuy không có gì khó hiu, nhưng các công c chun được định ra để
làm vic vi XML như Document Object Model - DOM, XPath, XSL, v.v.. thì rt hu
hiu, và chính các chun ny được phát trin không ngng.
Microsoft committed (nht quyết dn thân) vào XML ngay t đầu. Chng nhng có đại
din để làm vic thường trc trong W3C mà còn tích cc đóng góp bng cách gi
nhng đề ngh. V trí ca Microsoft v XML là khi tiêu chun chưa được hoàn thành thì
các sn phm ca Microsoft tuân th (comply) nhng gì có v được đa s công nhn
và khi tiêu chun hoàn thành thì tuân th hoàn toàn.
Cái công c XML sáng giá nht ca Microsoft là ActiveX MSXML. Nó được dùng trong
Visual Basic 6, ASP (Active Server Pages) ca IIS và Internet Explorer t version 5.5.
Hin nay MSXML đã có version 4.0. MSXML parse (đọc và phân tích) và validate
(kim tra s hp l) XML file để cho ta DOM, mt tree ca các Nodes đại din các
thành phn bên trong XML. MSXML cũng giúp ta da vào mt XSL file để transform
(biến th) mt XML file thành mt trang Web (HTML) hay mt XML khác.
XML là gì?
Mt chút lch s
Như tt c chúng ta đu biết, XML là viết tt cho ch eXtensible Markup Language
- nhưng Markup Language (ngôn ng đánh du) là gì?
Trong ngành n loát, để ch th cho th sp ch v cách in mt bài v, tác gi hay ch
bút thường v các vòng tròn trong bn thão và chú thích bng mt ngôn ng đánh du
tương t như tc ký. Ngôn ng y được gi là Markup Language.
XML là mt ngôn ng đánh du tương đối mi vì nó là mt subset (mt phn nh hơn)
ca và đến t (derived from) mt ngôn ng đánh du già dn tên là Standard
Generalized Markup Language (SGML). Ngôn ng HTML cũng da vào SGML, tht
ra nó là mt áp dng ca SGML.
SGML được phát minh bi Ed Mosher, Ray Lorie và Charles F. Goldfarb ca nhóm
IBM research vào năm 1969, khi con người đặt chân lên mt trăng. Lúc đầu nó có tên
là Generalized Markup Language (GML), và được thiết kế để dùng làm meta-
language, mt ngôn ng được dùng để din t các ngôn ng khác - văn phm, ng
vng ca chúng ,.v.v.. Năm 1986, SGML được cơ quan ISO (International Standard
Organisation) thu nhn (adopted) làm tiêu chun để lưu tr và trao đổi d liu. Khi
Tim Berners-Lee trin khai HyperText Markup Language - HTML để dùng cho các
trang Web hi đầu thp niên 1990, ông ta c nhc nh rng HTML là mt áp dng ca
SGML.
Vì SGML rt rc ri, và HTML có nhiu gii hn nên năm 1996 t chc W3C thiết kế
XML. XML version 1.0 được định nghĩa trong h sơ February 1998 W3C
Recommendation, ging như mt Internet Request for Comments (RFC), là mt
"tiêu chun".
T HTML đến XML
Trong mt trang Web, ngôn ng đánh du HTML dùng các cp Tags đ đánh du v
trí đầu và cui ca các mnh d liu để giúp chương trình trình duyt (browser) parse
(ngt khúc để phân tích) trang Web và hin th các phn theo ý ngưi thiết kế trang
Web. Thí d như mt câu HTML dưới đây:
<P align="center">Chào m ng b n đ n thăm ế
<STRONG>Vovisoft</STRONG>Web site
</P>
Câu code HTML trên có cha hai markup Tags, <P> và <STRONG>. Mi cp Tags
gói d liu nó đánh du gia opening Tag và closing Tag. Hai closing Tags đây là
</P> và </STRONG>. Tt c nhng gì nm bên trong mt cp Tags được gi là
Element. Để nói thêm đặc tính ca mt Element, ta có th nhét Attribute như align
trong opening Tag ca Element y dưới dng AttributeName="value", thí d như
align="center".
Vì Tags trong HTML được dùng để format (trình bày) tài liu nên browser cn biết ý
nghĩa ca mi Tag. Mt browser hay HTML parser s thu thp các ch th sau t câu
HTML trên:
1. Bt đầu mt Paragraph mi và đặt Text gia trang (<P
align="center">).
2. Hin th câu Chào mng bn đến thăm
3. Hin th ch Vovisoft cách mnh m
(<STRONG>Vovisoft</STRONG>).
4. Hin th câu Web site
5. Gp đim cui ca Paragraph (</P>)
Để x lý đon code HTML trên, chng nhng browser cn phi xác định v trí các
Tags mà còn phi hiu ý nghĩa ca mi Tag. Vì mi Tag có ý ngĩa riêng ca nó, thí d
P cho Paragraph, STRONG để nhn mnh, thí d như dùng ch đậm (Bold).
Ging như HTML, XML đến t SGML. Nó cũng dùng Tags để encode data. Đim khác
bit chánh gia HTML và XML là trong khi các Tags ca HTML cha ý nghĩa v
formatting (cách trình bày) các d liu, thì các Tags ca XML cha ý nghĩa v cu
trúc ca các d liu. Thí d như mt tài liu đặt hàng (order) XML dưới đây:
<Order OrderNo="1023">
<OrderDate>2002-3-27</OrderDate>
<Customer>Peter Collingwood</Customer>
<Item>
<ProductID>1</ProductID>
<Quantity>5</Quantity>
</Item>
<Item>
<ProductID>4</ProductID>
<Quantity>3</Quantity>
</Item>
</Order>
Tài liu ny ch cha d liu, không nhc nh gì đến cách trình bày. Điu ny có
nghĩa là mt XML parser (chương trình ngt khúc và phân tích) không cn phi hiu ý
nghĩa cũa các Tags. Nó ch cn tìm các Tags và xác định rng đây là mt tài liu XML
hp l. Vì browser không cn phi hiu ý nghĩa ca các Tags, nên ta có th dùng Tag
nào cũng được. Đó là lý do ngưi ta dùng ch eXtensible (m rng thêm được),
nhưng khi dùng ch để viết tt thì li chn X thay vì e, có l vì X nghe có v k bí, hp
dn hơn.
Chúng ta hãy quan sát k hơn cu trúc ca mt XML. Trước hết, Element Order có
Attribute OrderNo vi value 1023. Bên trong Element Order có:
Mt Child (con) Element OrderDate vi value 2002-3-27
Mt Child Element Customer vi value Peter Collingwood.
Hai Child Elements Item, mi Element Item li cha mt Child
Element ProductID và mt Child Element Quantity.
Đôi khi ta để mt Element vi tên đàng hoàng, nhưng không cha mt value, lý do là
ta mun dùng nó như mt Element Nhim ý (Optional), có cũng được, không có cũng
không sao. Cách t nhiên nht là gn cái closing Tag ngay sau opening Tag. Thí d
như Empty (trng rng) Element MiddleInitial trong Element customer dưới đây:
<Customer>
<FirstName>Stephen</FirstName>
<MiddleInitial></MiddleInitial>
<LastName>King</LastName>
</Customer>
Có mt cách khác để biu din Empty Element là b closing Tag và thêm mt du "/"
(slash) cui openning Tag. Ta có th viết li thí d customer như sau:
<Customer>
<FirstName>Stephen</FirstName>
<MiddleInitial/>
<LastName>King</LastName>
</Customer>
Dĩ nhiên Empty Element cũng có th có Attribute như Element PhoneNumber th nhì
dưới đây:
<Customer>
<FirstName>Stephen</FirstName>
<MiddleInitial></MiddleInitial>
<LastName>King</LastName>
<PhoneNumber Location="Home">9847 2635</PhoneNumber>
<PhoneNumber Location="Work"></PhoneNumber>
</Customer>
Biu din Data trong XML
Mt tài liu XML phi well-formed và valid. Mc du hai t ny nghe t t, nhưng
chúng có ý nghĩa khác nhau. Mt XML well-formed là mt XML thích hp cho parser
chế biến. Tc là XML tuân th các lut l v Tag, Element, Attribute , value .v.v.. cha
bên trong để parser có th nhn din và phân bit mi th.
Để ý là mt XML well-formed chưa chc cha đựng nhng d liu hu dng trong
công vic làm ăn. Là well-formed ch có nghĩa là XML có cu trúc đúng. Để hu dng
cho công vic làm ăn, XML chng nhng well-formed mà còn cn phi valid. Mt tài
liu XML valid khi nó cha nhng data cn có trong loi tài liu loi hay class y. Thí
d mt XML đặt hàng có th b đòi hi phi có mt Attribute OrderNo và mt Child
Element Orderdate. Parser validate mt XML bng cách kim tra data trong XML xem
có đúng như định nghĩa trong mt Specification v loi tài liu XML y. Specification
ny có th là mt Document Type Definition (DTD) hay mt Schema.
Chc na ta s nói đến valid, bây gi hãy bàn v well-formed.
To mt tài liu XML well-formed
Để well-formed, mt tài liu XML phi theo đúng các lut sau đây:
1. Phi có mt root (gc) Element duy nht, gi là Document
Element, nó cha tt c các Elements khác trong tài liu.
2. Mi opening Tag phi có mt closing Tag ging như nó.
3. Tags trong XML thì case sensitive, tc là opening Tag và
closing Tag phi được đánh vn y như nhau, ch hoa hay ch
thường.
4. Mi Child Element phi nm trn bên trong Element cha ca nó.
5. Attribute value trong XML phi được gói gia mt cp ngoc kép
hay mt cp apostrophe.
Lut th nht đòi hi mt root Element duy nht, nên tài liu dưới đây không well-
formed vì nó không có mt top level Element:
<Product ProductID="1">Chair</Product>
<Product ProductID="2">Desk</Product>
Mt tài liu XML không có root Element được gi là mt XML fragment (mnh). Để
làm cho nó well-formed ta cn phi thêm mt root Element như dưới đây:
<Catalog>
<Product ProductID="1">Chair</Product>
<Product ProductID="2">Desk</Product>
</Catalog>
Lut th hai nói rng mi opening Tag phi có mt closing Tag ging như nó. Tc là
mi Tag m ra phi đưc đóng li. Empty Element viết cách gn như <MiddleInitial/>
được gi là có Tag t đóng li. Các Tags khác phi có closing Tag. Cái XML dưới đây
không well-formed vì nó có cha mt mt Tag <Item> thiếu closing Tag </Item>:
<Order>