Page 1 of 12 Làm vic vi XML trên Android Mc : Trung bình Michael Galpin, Kin trúc s phn mm, Ludi Labs 08 01 2010 Android là mt h iu hành ngu n m, hin i và là SDK cho các thit b di ng Vi h iu hành này, bn có th to ra các ng dng di ng rt mnh iu này thm chí còn tr nên hp dn hn na khi các ng dng ca bn có th truy cp các dch v Web, có ngha là bn cn s dng ngôn ng ca Web là: XML Trong bài vit này, bn s thy nhiu la chn khác nhau làm vic vi XML trên Android và cách s dng chúng xây dng các ng dng Android ca chính bn Bt u Trong bài vit này, bn hc cách xây dng các ng dng Android có th làm vic vi XML t Internet Các ng dng Android c vit bng ngôn ng lp trình Java, do vy mà kinh nghim làm vic vi công ngh Java là iu cn phi có phát trin cho Android, bn s cn n Android SDK Toàn b mã trình c trình bày trong bài vit này s làm vic vi bt k phiên bn nào ca Android SDK, nhng phiên bn SDK 15_pre ã c s dng phát trin mã trình Bn có th phát trin các ng dng Android ch vi SDK và mt trình biên tp vn bn là, nhng s d# dàng hn nhiu nu s dng Android Developer Tools (ADT), là mt trình b$ sung Eclipse %i vi bài vit này, phiên bn 09 ca ADT ã c dùng vi Eclipse 342, mt phiên bn Java Xem Tài nguyên ly các liên kt dn n tt c các cng c này XML trên Android Nn tng Android là mt nn tng phát trin di ng mã ngu n m Nó giúp bn truy cp vào tt c các khía cnh ca thit b di ng mà nó chy trên ó, t các ha cp thp, n phn cng nh là thit b camera trên in thoi Vi rt nhiu th có th s dng Android, có th bn s t h&i ti sao bn cn phin n XML ó không phi vì làm vic vi XML rt thú v; mà là nó ang làm vic vi nhng th mà nó kích hot XML th'ng c dùng nh là mt nh dng d liu trên Internet Nu bn mu%n truy cp d liu t Internet, các kh nng có th là d liu s dng XML Nu bn mu%n gi d liu n mt dch v Web, có th bn c(ng cn gi c d liu XML Nói ng)n gn là nu ng dng Android ca bn thúc *y Internet, thì có th bn s cn phi làm vic vi XML Tht may m)n là bn có rt nhiu la chn có s+n làm vic vi XML trên Android Các trình phân tích XML Mt trong nhn u im ln nht ca nn tng Android chính là vic nó thúc *y ngôn ng lp trình Java Android SDK không hoàn toàn cung cp s+n mi th cho Môi tr'ng Th'i gian chy Java (JRE) chu*n ca bn, nhng nó li h, tr mt phn rt áng k cho nó Nn tng Java ã và ang h, tr rt nhiu cách khác nhau làm vic vi XML trong th'i gian nht nh, và hu ht các API có liên quan n XML ca Java u c h, tr y trên Android Ví d, Simple API ca Java cho XML (SAX) và Document Object Model (DOM) hin u có s+n trên Android Nhiu nm qua, c hai API này là mt phn ca công ngh Java Sn ph*m Streaming API mi ây cho XML (StAX) hin cha có trong Android Tuy nhiên, Android li cung cp mt th vin tng ng v m-t chc nng iu Các t vit tt thông dng API: Application programming interface (Giao din lp trình ng dng) RSS: Really Simple Syndication (Giao thc tp hp thông tin n gin) SDK: Software Developers Kit (B dng c cho nhà phát trin phm mm)
Page 2 of 12 cu%i cùng là Java XML Binding API c(ng không có s+n trong Android Ch)c ch)n có th thc hin API này trong Android Tuy nhiên, nó li có xu hng là mt API n-ng ký, vi rt nhiu th hin khác nhau thuc các lp khác nhau th'ng cn vic trình bày mt tài liu XML Do vy mà nó không lý tng l)m cho mt môi tr'ng b ràng buc chng hn nh thit b cm tay mà Android c thit k chy trên ó Trong các phn tip theo, bn s ly mt ngu n XML n gin có s+n trên Internet, và xem cách phân tích ngu n ó nh th nào trong phm vi mt ng dng Android s dng các UI: User interface (Giao din ng'i dùng) URL: Universal Resource Locator (a ch tài nguyên) XML: Extensible Markup Language (Ngôn ng ánh du m rng) API khác nhau c nh)c n trêntrc tiên, hãy xem các phn cn thit ca ng dng n gin s s dng XML t Internet Trình c tin Android /ng dng s ly im tin RSS t trang nhà phát trin Android ph$ bin Androidster và phân tách nó thành mt danh sách các %i tng Java n gin mà bn có th s dng quay li Android ListView (xem Ti v ly mã ngu n) ây là hot ng a hình thái c$ in tc là các thc thi khác nhau (các thut toán phân tích XML khác nhau) cung cp hot ng gi%ng nhau Ví d 1 cho bn thy bn có th mô hình hóa iu này d# dàng nh th nào trong mã trình Java s dng mt giao din Ví d 1 giao din trình phân tích im tin XML Trong Ví d 2, lp Message là mt POJO (Plain Old Java Object) c$ in miêu t mt cu trúc d liu Ví d 2 Message POJO # $% &'())*'+ $%,***-//001, $ 2' $ % 33 $ 4+2' 4 2'*5 4 '*5 $ % &'())*' 4 % $ 334 4 674,88, 9+,8, 4+&'())*' 4 *5 4 '*5 $ $ 33
Page 3 of 12 44# 33 ; & 33 33 ) 4 4 ++ < 33-4 ) Message, trong Ví d 2, th'ng rt d# làm Nó *n i mt vài trng thái bên trong ca mình bng cách cho phép truy cp ngày tháng và các liên kt nh các chu,i n gin, trong khi th hin chúng nh các %i tng c s)p xp mt cách rõ ràng (mt javautildate và mt javaneturl) Nó là mt Value Object (%i tng Giá tr) c$ in, do vy nó thc thi equals() và hashcode() da trên trng thái bên trong ca nó Nó c(ng thc hin giao din Comparable vì th bn có th s dng nó s)p xp (theo ngày tháng) Thc t, d liu c phân loi t im tin, do vy mà iu này không cn thit M,i thc thi trình phân tích s cn a mt URL n im tin Androidster và s dng cái này m mt kt n%i HTTP n trang Androidster Hot ng ph$ bin này c mô hình hóa mt cách t nhiên trong mã trình Java s dng lp c s tru tng nh trong Ví d 3 Ví d 3 Lp trình phân tích im tin c bn = 334> $ 2=?%()*+,%, $ %*$#'@)@&A+,, $ @AB+,, $ )@)*+,, $ @)*+,, 2'2 = $ 2 42 +2' 2 4 2'*5 4 '*5 @$ @$ 2 # @$ 4 @&*5 4 '*5 Lp c s lu tr feedurl và s dng nó m javaioinputstream Nu có bt k sai sót nào, n gin nó th mt RuntimeException, sao cho ng dng dng hot ng mt cách nhanh chóng Lp c s c(ng xác nh mt vài hng s% n gin cho tên các th0 Ví d 4 trình bày mt s% ni dung mu t im tin, qua ó bn có th thy c ý ngha ca các th0 này Ví d 4 im tin XML mu C5 +,<8,+,2)DE,C 6DD +,# <FG,DD +,G8,
Page 4 of 12 4?3?3 4033 3?43 =%$-<H( G88H<H0IJ0IK98<883=% # <FG3 $$E888'( -%>-)& 4 7 3 4033 3?3DE888DD D D D5DD D4D 3 4 4 $4 ( (DD44$E888 3 %)4-<L( G88H8F0<E0K<98<883% 3 ( #24/ M3 4033 3?3 DDD D4D4 M3 ( 4 4-4( 44 3 %)-<I( G88H8I0<J0G<98<883% 3 34 3 Nh bn có th thy t mu trong Ví d 4, mt ITEM tng ng vi mt th hin Message Các nút con ca mc chn (TITLE, LINK và vv) tng ng các -c tính ca th hin Message Vì bn bit im tin trông nh th nào r i và có s+n tt c các phn ph$ bin, hãy xem làm th nào phân tách im tin này s dng các công ngh khác nhau có s+n trên Android Bn s b)t u vi SAX S dng SAX Trong môi tr'ng Java, bn có th th'ng xuyên s dng SAX API khi bn mu%n có mt trình phân tích nhanh và mu%n hn ch t%i a vic s dng (footprint) b nh ng dng ca bn iu ó khin cho cho nó rt phù hp cho thit b di ng chy Android Bn có th s dng SAX API nh là t môi tr'ng Java, mà không cn n nhng thay $i -c bit cn thit chy trên AndroidVí d 5 trình bày mt thc thi SAX ca giao din FeedParser Ví d 5 Thc thi SAX $5 5= $5 $ 2 2 $(> +$(> @ $(> + $(> '/ 4 +'/
Page 5 of 12 4@$ -4 4 4 *5 4 '*5 Nu trc ây bn ã s dng SAX, thì cái này trông c(ng khá quen thuc Nh vi bt k thc thi SAX nào, phn ln các chi tit u nm trong trình x lý SAX Trình x lý nhn các s kin t trình phân tích SAX khi nó chy nhanh qua tài liu XML Trong tr'ng hp này, bn va to ra mt lp mi gi là RssHandler và ng ký nó nh là mt trình x lý cho trình phân tích, nh trong Ví d 6 Ví d 6 Trình x lý SAX = N '/ 5%/ $ = 4 4 4 OP4- -4 4 $(>*5 4 4- -4 4- -4 * $ -$ A-$ 4 $(>*5 * -A- 4 6+ A;@ # )@)* ) $ A;@ # @AB $ A;@ # %*$#'@)@&A % $ A;@ # 2=?%()* % $ A;@ # @)* 4 8 % 4 $(>*5 % +( +$ = * $ -$ A-$ - ( 4 $(>*5 * -A-- A;@ # @)* 4 + Lp RssHandler m rng lp orgxmlsaxhelpersdefaulthandler Lp này cung cp các thc thi m-c nh, không thao tác cho tt c các phng thc tng t các s kin c to ra bi trình phân tích SAX iu này cho phép các lp con ch ghi chèn lên các phng thc khi cn thit RssHandler có mt API b$ sung, getmessages Cái này tr v danh sách các %i tng Message mà trình x lý thu thp c khi nó nhn các s kin t trình phân tích SAX Nó có hai bin trong khác, mt là currentmessage cho th hin Message ang c phân tích, và mt là bin StringBuilder gi là builder lu tr d liu ký t t các nút vn bn Các bin này u c
Page 6 of 12 b)t u khi phng thc startdocument c dn ra khi trình phân tích gi s kin tng ng cho trình x lý Hãy xem phng thc startelement trong Ví d 6 Phng thc này c gi m,i khi b)t g-p th0 m trong tài liu XML Bn ch cn quan tâm khi nào th0 ó là th0 ITEM Trong tr'ng hp ó, bn to ra mt Message mi Bây gi' hãy nhìn vào phng thc characters Phng thc này c gi ra khi b)t g-p d liu ký t t các nút vn bn D liu d# dàng c thêm vào bin builder Cu%i cùng hãy xem phng thc endelement Phng thc này c gi ra khi b)t g-p th0 kt thúc %i vi các th0 tng ng vi các -c tính ca mt Message, gi%ng nh TITLE và LINK, -c tính thích hp c thit -t trên currentmessage s dng d liu t bin builder Nu th0 kt thúc là mt ITEM, thì currentmessage thêm vào danh sách Messages ây là s phân tích SAX rt in hình; ây không có gì là duy nht %i vi Android Vì th nu bn bit cách vit mt trình phân tích SAX Java, thì bn bit cách vit mt trình phân tích SAX Android Tuy nhiên, Android SDK có b$ sung thêm mt s% tính nng thun tin vào SAX Phân tích SAX d dàng hn Android SDK có cha mt lp tin ích c gi là androidutilxml Ví d 7 trình bày cách cài -t mt trình phân tích SAX vi cùng lp tin ích nh th Ví d 7 Trình phân tích SAX Android ( $5 5= ( $5 $ 2 2 '/ 4 +'/ > 4@$ ->*2)?E-4 4 *5 4 '*5 4 Lu ý là lp này vn s dng trình x lý SAX chu*n, vì n gin bn ã s dng li RssHandler nh trong Ví d 7 trên Vic có th s dng li trình x lý SAX rt t%t, nhng nó vn có ôi chút phc tp v mã trình Bn có tng tng, nu bn phi phân tích mt tài liu XML phc tp hn rt nhiu, trình phân tích có th tr thành mnh t màu m1 cho các l,i Ví d, hãy xem li phng thc endelement trong Ví d 6 Lu ý cách phng thc này kim tra nh th nào nu currentmessage có giá tr không trc khi nó c% cài -t các thuc tính? Bây gi' hãy nhìn vào XML mu trong Ví d 4 Lu ý rng có các th0 TITLE và LINK nm ngoài các th0 ITEM ó là lý do ti sao kim tra giá tr không c a vào Nu không thì th0 TITLE u tiên có th gây ra mt NullPointerException Android bao g m c bin th SAX API ca chính nó (xem Ví d 8) loi b& yêu cu bn phi vit trình x lý SAX ca chính bn Ví d 8 Trình phân tích SAX Android n gin ( $5 5= ( $5 $ 2 2 + '* +'*,, +( *4+ #4,4, *+4#4 @)* ** **
Page 7 of 12 #4 )@)**)5* *)5* $ ) #4 @AB*)5* *)5* $ #4 %*$#'@)@&A*)5* *)5* $ % #4 2=?%()**)5* *)5* $ % > 4@$ ->*2)?E- #/ 4 *5 4 '*5 Nh ã ha, mã phân tích SAX mi không s dng trình x lý SAX Thay vào ó nó s dng các lp t gói androidsax trong SDK Các lp này cho phép bn mô hình hóa cu trúc ca tài liu XML ca bn và thêm mt trình nghe s kin nu cn Trong mã trình trên, bn khai báo rng tài liu ca bn s có mt phn t g%c có tên rss và rng phn t này s có ba phn t con là channel Tip n bn nói rng channel s có ba phn t con c gi là ITEM và bn b)t u g)n các trình nghe %i vi m,i trình nghe, bn ã s dng mt lp bên trong vô danh ã thc hin giao din bn quan tâm (ho-c EndElementListner ho-c EndTextElementListener) Chú ý không cn phi theo dõi d liu ký t Vic này không ch n gin hn mà thc s còn hiu qu hn Cu%i cùng, khi bn gi dn phng thc tin ích Xmlparse, bây gi' bn a vào trình x lý c to ra t phn t g%c Toàn b mã trình trên trong Ví d 8 thuc loi tùy chn Nu bn thy thoi mái vi mã trình phân tích SAX chu*n trong môi tr'ng Java, thì bn có th tích vào ó Nu bn mu%n th các trình bao bc tin li do Android SDK cung cp, bn c(ng có th s dng nó Nu bn không mu%n s dng SAX thì sao ây? Vn còn có mt vài la chon khác La chn u tiên bn s thy ó là DOM Làm vi c DOM DOM phân tích trên Android c h, tr hoàn toàn Nó làm vic chính xác nh khi nó làm vic trong mã trình Java mà bn s chy trên máy tính bàn ho-c trên mt máy ch Ví d 9 trình bày mt thc thi da trên DOM ca giao din trình phân tích Ví d 9 Thc thi da trên DOM ca mt trình phân tích im tin % 5= % $ 2 2 %= +%= @ +( %= + %= %+ 4@$ * +%* A+ *=)A @)* +84 99 +
Page 8 of 12 A+ A +#4A +8 4 99 A + $ + AA ;@ # )@)* ) #4 AQ ;@ # @AB #4 AQ ;@ # %*$#'@)@&A $ = 5+$ = A4 + #4A +84 4 99 5 4 AQ % 5$ ;@ # 2=?%()* % #4 AQ 4 *5 4 '*5 Gi%ng nh ví d SAX u tiên, không có gì là c th %i vi Android v mã trình này Trình phân tích DOM c tt c các tài liu XML vào b nh r i sau ó cho phép bn s dng các DOM API chy ngang qua cây XML, truy vn d liu mà bn mu%n ây là mã trình rt d# làm, và, trong mt s% cách, còn n gin hn c các thc thi da trên SAX Tuy nhiên, thông th'ng DOM tiêu t%n nhiu b nh hn vì trc tiên mi th u c c vào b nh iu này có th là mt vn trên thit b di ng chy Android, nhng nó có th áp ng c trong mt vài tr'ng hp s dng nht nh mà dung lng tài liu XML s không bao gi' quá ln Có th iu này ng ý rng các nhà phát trin Android ã oán rng trình phân tích SAX s ph$ bin hn rt nhiu trên các ng dng Android, do ó các tin ích b$ sung c cung cp cho nó Mt loi trình phân tích XML khác c(ng có trên Android, và ó là trình phân tích kéo Trình phân tích kéo XML Nh ã cp trong các phn trc, Android không cung cp h, tr cho StAX API ca Java Tuy nhiên Android li i kèm vi mt trình phân tích kéo làm vic tng t nh StAX Nó cho phép mã ng dng ca bn kéo ho-c tìm kim các s kin t trình phân tích, trái ngc vi trình phân tích SAX t ng *y các s kin cho trình x lý Ví d 10 miêu t mt thc thi trình phân tích kéo ca mt giao din trình phân tích im tin Ví d 10 Thc thi da trên trình phân tích kéo > 5= > $ 2 2 + > +> 33D4 4 @ 4@$ - )+ *) + + 4 )6+> *A%?%*A)RR6 $ + 4 ) > $)(')?%*A)0 +( > $)(')?)(S0 + A ;@ # @)* + 6+
Page 9 of 12 ;@ # @AB 5)5 ;@ # %*$#'@)@&A % 5)5 ;@ # 2=?%()* % 5)5 ;@ # )@)* ) 5)5 > *A%?)(S0 + A ;@ # @)*RR 6+ ;@ # #/(AA* + )+ 5 4 *5 4 '*5 Trình phân tích kéo làm vic tng t nh trình phân tích SAX Nó có các s kin tng t (phn t b)t u, phn t kt thúc) nhng bn phi kéo t chúng (parsernext()) Các s kin c gi i di dng các mã s%, vì th bn có th s dng mt case-switch n gin Chú ý, thay vì nghe cho n khi kt thúc các phn t nh trong phân tích SAX, vi trình phân tích kéo, tht d# dàng tin hành hu ht các x lý ngay t u Trong mã trình trong Ví d 10, khi mt phn t b)t u, bn có th gi dn parsernexttext() kéo tt c d liu ký t t tài liu XML iu này mang n mt s n gin hóa t%t cho phân tích SAX C(ng cn chú ý rng bn -t mt c' (bin boolean done) nhn bit khi nào bn n phn kt thúc ni dung mà bn quan tâm iu này cho phép bn sm tm dng vic c tài liu XML, vì bn bit rng mã trình s không quan tâm n phn còn li ca tài liu iu này có th rt hu ích, -c bit nu bn ch cn mt phn nh& tài liu ang c truy cp Bn có th gim áng k th'i gian phân tích bng cách dng vic phân tích càng sm càng t%t Hn na, kiu t%i u hóa này -c bit quan trng trên thit b di ng ni t%c kt n%i có th chm Trình phân tích kéo có mt vài u im v hiu nng c(ng nh u im s dng d# dàng C(ng có th s dng nó vit XML To XML n tn bây gi', tôi vn ã và ang tp trung phân tích XML t Internet Tuy nhiên, thnh thong ng dng ca bn cn gi XML ti mt máy ch xa Hin nhiên bn có th s dng mt StringBuilder ho-c cái gì ó tng t to ra mt chu,i XML Mt thay th khác na b)t ngu n t trình phân tích kéo trong Ví d 11 Ví d 11 Vit XML bng trình phân tích kéo $ > >$ M M +>$ M $ 7 +$ 7 M & M %,2)DE,- M ),,-,, M,,-,,-$ & M 0 M ),,-,, M,,-,,-% M ),,-,, M 5 ) M ),,-,, M ),,-,, M 5 *5 M ),,-,, M ),,-,,
Page 10 of 12 M 5 % M ),,-,, M ),,-,, M ),,-,, M % $ 4 *5 4 '*5 Lp XmlSerializer là mt phn trong gói gi%ng nh XmlPullParser c dùng trong phn trc Thay vì kéo vào các s kin, nó *y chúng ra n mt lu ng ho-c mt b ghi Trong tr'ng hp này, nó d# dàng *y chúng sang mt th hin javaiostringwriter Nó cung cp mt API n gin cùng vi các phng thc b)t u và kt thúc mt tài liu, x lý các phn t và thêm vn bn ho-c các thuc tính ây có th là mt la chn thay th khá t%t cho vic s dng mt StringBuilder, vì d# dàng m bo XML ca bn chu*n xác Tng kt Loi ng dng nào bn mu%n xây dng cho các thit b Android? Dù là loi nào i na, nu nó cn làm vic vi d liu t Internet, thì có th nó cn phi làm vic vi XML Trong bài vit này, bn ã thy rng Android c tích hp i cùng vi rt nhiu công c x lý XML Bn có th chn ly mt trong các công c ó nh là công-c-la-chn ca bn, ho-c bn có th la chn cn c vào tr'ng hp s dng Thông th'ng s la chn an toàn là chn cùng vi SAX, và Android cung cp cho bn c cách truyn th%ng thc hin SAX và mt trình bao bc tin li khéo léo trên c SAX Nu tài liu ca bn nh&, thì có l DOM là cách n gin hn nên theo Nu tài liu ca bn ln, nhng bn ch cn mt phn tài liu, thì trình phân tích kéo XML có l là cách hiu qu hn nên theo Cu%i cùng, vit XML, gói trình phân tích kéo c(ng cung cp mt cách thun tin làm vic ó Vì th, cái mà XML ca bn cn có là gì i na, thì Android SDK vn có cho bn Ti v Tên Kích thc Ph ng thc ti AndroidXmlzip 70KB HTTP Thông tin v phng thc ti Tài nguyên Hc tp Develop Android applications with Eclipse (Frank Ableson,developerWorks, 02/2008): Cách d# dàng nht phát trin các ng dng Android là s dng Eclipse Hãy tìm hiu tt c iu này trong bài hng dn này Using integrated packages: Codehaus' Woodstox (Michael Galpin, developerworks, 07/2007): Dành cho so sánh khác ca SAX, DOM, và trình phân tích kéo, hãy c bài vit này StAX'ing up XML, Part 2: Pull parsing and events (Peter Nehrer, developerworks, December 2006): Cái nhìn sâu hn v trình phân tích kéo XML Understanding SAX (Nicholas Chase, developerworks, 07/2003): Tr thành chuyên gia v phân tích SAX vi bài hng dn này
Page 11 of 12 Understanding DOM (Nicholas Chase, developerworks, 03/2007): hiu thêm v trình phân tích, hãy c bài hng dn này Tài liu Android SDK: Tìm hiu b công c này phát trin và sa l,i mã ng dng và thit k mt UI ng dng Open Handset Alliance: Tìm kim nhà tài tr cho Android, mt nhóm 47 công ty công ngh và di ng làm vic *y nhanh t%c $i mi trong công ngh di ng Chng ch XML ca IBM: Tìm hiu xem làm th nào mà bn có th tr thành mt Nhà phát trin có chng ch IBM trong XML và các công ngh liên quan Th vin k2 thut XML: Xem khu vc developerworks XML ni có rt nhiu các bài vit chuyên môn và các m3o nh&, bài hng dn, các tiêu chu*n và Sách & IBM Các s kin k2 thut WebdeveloperWorks và web qung bá: Làm quen vi công ngh trong các phiên này developerworks podcast: Nghe các bài ph&ng vn thú v và các cuc tho lun dành cho các nhà phát trin phn mm Ly sn phm và công ngh Android SDK: Ti v, truy cp tham chiu API, và nhn tin tc mi nht v Android t trang web chính thc ca các nhà phát trin Android D án Mã ngu n M Android: Ly mã ngu n m cho Android Eclipse IDE: Ly phiên bn mi nht và cho nó hot ng Các phiên bn ánh giá sn ph*m IBM: Ti v ho-c s dng các bn th nghim trc tuyn trong IBM SOA Sandbox và b)t u s dng các công c phát trin ng dng và các sn ph*m phn mm trung gian t DB2, Lotus, Rational, Tivoli, và WebSphere Tho lun Tham gia di#n àn tho lun Các di#n àn tho lun v XML: Tham gia mt s% cuc tho lun v XML developerworks blogs: c các blog này và tham gia vào cng ng developerworks ôi nét v tác gi Michael Galpin ã phát trin phn mm Java mt cách chuyên nghip t nm 1998 Ông hin ang làm vic cho ebay Ông ã có bng v toán hc ca Vin Công ngh California IBM, logo IBM, ibmcom, DB2, developerworks, Lotus, Rational, Tivoli, và WebSphere là các thng hiu ho-c thgn
Page 12 of 12 hiu ã c ng ký ca International Business Machines Corporation ti M2 và các qu%c gia khác Các thng hiu này và các iu khon c ng ký thng hiu IBM xut hin ln u tiên trong bài vit này i kèm vi biu tng phù hp ( ho-c ), ch ra rng ây là các thng hiu ã c ng ký ti M2 ho-c thuc s hu hp pháp ca IBM khi bài vit này c phát hành Các thng hiu này c(ng có th c ng ký ho-c là thng hiu hp pháp ti các qu%c gia khác Hãy xem danh sách hin có v các thng hiu IBM Adobe, logo Adobe, PostScript, và logo PostScript ho-c là thng hiu c ng ký ho-c là thng hiu ca Adobe Systems Incorporated ti M2 và/ho-c các qu%c gia khác Java và tt c các thng hiu da trên Java u là thng hiu ca Sun Microsystems, Inc ti M2 và/ho-c các qu%c ga khác Các tên dch v, công ty ho-c sn ph*m khác có th là thng hiu ho-c dch v ca các công ty khác Tên ca công ty, sn ph*m hay dch v có th là nhãn hiu ng ký ho-c nhãn hiu dch v ca ng'i khác