XML untuk pemula mutlak

HTML dan World Wide Web ada di mana-mana. Sebagai contoh keberadaan mereka di mana-mana, saya akan pergi ke Amerika Tengah untuk Paskah tahun ini, dan jika saya mau, saya akan dapat menjelajahi Web, membaca email saya, dan bahkan melakukan perbankan online dari kafe internet di Antigua Guatemala dan Kota Belize. (Namun, saya tidak bermaksud demikian, karena melakukan hal itu akan memakan waktu jauh dari kencan saya dengan pohon palem dan kelapa yang diisi rum.)

Namun, meskipun HTML ada di mana-mana dan populer, apa yang dapat dilakukannya sangat terbatas. Tidak masalah untuk menyebarkan dokumen informal, tetapi HTML sekarang digunakan untuk melakukan hal-hal yang tidak pernah dirancang untuk itu. Mencoba merancang sistem data tugas berat, fleksibel, dan dapat dioperasikan dari HTML seperti mencoba membangun kapal induk dengan gergaji besi dan besi solder: alat (HTML dan HTTP) tidak sesuai dengan pekerjaan.

Kabar baiknya adalah banyak keterbatasan HTML telah diatasi dalam XML, Extensible Markup Language. XML mudah dipahami oleh siapa saja yang memahami HTML, tetapi XML jauh lebih hebat. Lebih dari sekedar bahasa markup, XML adalah metalanguage - bahasa yang digunakan untuk mendefinisikan bahasa markup baru. Dengan XML, Anda dapat membuat bahasa yang dibuat khusus untuk aplikasi atau domain Anda.

XML akan melengkapi, bukan menggantikan, HTML. Sedangkan HTML digunakan untuk memformat dan menampilkan data, XML mewakili makna kontekstual dari data.

Artikel ini akan menyajikan sejarah bahasa markup dan bagaimana XML muncul. Kami akan melihat contoh data dalam HTML dan secara bertahap beralih ke XML, menunjukkan mengapa ini memberikan cara terbaik untuk merepresentasikan data. Kami akan menjelajahi alasan Anda mungkin perlu menciptakan bahasa markup kustom, dan saya akan mengajari Anda cara melakukannya. Kami akan membahas dasar-dasar notasi XML, dan cara menampilkan XML dengan dua jenis bahasa gaya yang berbeda. Kemudian, kita akan menyelami Model Objek Dokumen, alat yang ampuh untuk memanipulasi dokumen sebagai objek (atau memanipulasi struktur objek sebagai dokumen, bergantung pada bagaimana Anda melihatnya). Kami akan membahas cara menulis program Java yang mengekstrak informasi dari dokumen XML, dengan penunjuk ke program gratis yang berguna untuk bereksperimen dengan konsep baru ini. Akhirnya, kami 'Saya akan melihat perusahaan Internet yang mendasarkan strategi teknologi intinya pada XML dan Java.

Apakah XML untuk Anda?

Meskipun artikel ini ditulis untuk siapa pun yang tertarik dengan XML, artikel ini memiliki hubungan khusus dengan seri JavaWorld di XML JavaBeans. (Lihat Sumber untuk link ke artikel terkait.) Jika Anda telah membaca seri itu dan tidak cukup "mendapatkannya", artikel ini harus menjelaskan bagaimana menggunakan XML dengan kacang. Jika Anda sedang mendapatkan itu, artikel ini berfungsi sebagai pendamping potongan yang sempurna untuk seri XML JavaBeans, karena mencakup topik tersentuh di dalamnya. Dan, jika Anda salah satu dari sedikit orang yang beruntung yang masih memiliki artikel XML JavaBeans untuk dinantikan, saya sarankan Anda membaca artikel ini terlebih dahulu sebagai bahan pengantar.

Catatan tentang Java

Ada begitu banyak aktivitas XML baru-baru ini di dunia komputer sehingga artikel dengan panjang ini hanya dapat membaca sekilas ke permukaan. Namun, inti dari artikel ini adalah memberi Anda konteks yang Anda butuhkan untuk menggunakan XML dalam desain program Java Anda. Artikel ini juga membahas bagaimana XML beroperasi dengan teknologi Web yang ada, karena banyak programmer Java bekerja di lingkungan seperti itu.

XML membuka Internet dan pemrograman Java ke fungsionalitas non-browser yang portabel. XML membebaskan konten Internet dari browser dengan cara yang sama seperti Java membebaskan perilaku program dari platform. XML membuat konten Internet tersedia untuk aplikasi nyata.

Java adalah platform yang sangat baik untuk menggunakan XML, dan XML adalah representasi data yang luar biasa untuk aplikasi Java. Saya akan menunjukkan beberapa kekuatan Java dengan XML saat kita melanjutkan.

Mari kita mulai dengan pelajaran sejarah.

Asal muasal bahasa markup

HTML yang kita semua kenal dan cintai (yah, yang kita tahu, bagaimanapun juga) pada awalnya dirancang oleh Tim Berners-Lee di CERN ( le Conseil Européen pour la Recherche Nucléaire, atau Laboratorium Eropa untuk Fisika Partikel) di Jenewa untuk memungkinkan para ahli fisika ( dan bahkan non-nerd) untuk berkomunikasi satu sama lain. HTML dirilis pada Desember 1990 di dalam CERN, dan tersedia untuk umum pada musim panas 1991 untuk kita semua. CERN dan Berners-Lee memberikan spesifikasi untuk HTML, HTTP, dan URL, dalam tradisi lama berbagi-dan-nikmati Internet.

Berners-Lee mendefinisikan HTML dalam SGML, Standard Generalized Markup Language. SGML, seperti XML, adalah metalanguage - bahasa yang digunakan untuk mendefinisikan bahasa lain. Setiap bahasa yang didefinisikan disebut aplikasi SGML. HTML adalah aplikasi SGML.

SGML muncul dari penelitian yang dilakukan terutama di IBM pada representasi dokumen teks di akhir tahun 60-an. IBM menciptakan GML ("General Markup Language"), bahasa pendahulu SGML, dan pada tahun 1978 American National Standards Institute (ANSI) membuat versi pertama SGML. Standar pertama dirilis pada tahun 1983, dengan standar draf dirilis pada tahun 1985, dan standar pertama diterbitkan pada tahun 1986. Yang cukup menarik, standar SGML pertama diterbitkan menggunakan sistem SGML yang dikembangkan oleh Anders Berglund di CERN, organisasi yang, sebagai kami telah melihat, memberi kami HTML dan Web.

SGML banyak digunakan di industri besar dan pemerintah seperti di perusahaan kedirgantaraan besar, otomotif, dan telekomunikasi. SGML digunakan sebagai standar dokumen di Departemen Pertahanan Amerika Serikat dan Internal Revenue Service. (Untuk pembaca di luar AS, IRS adalah petugas pajak.)

Albert Einstein mengatakan semuanya harus dibuat sesederhana mungkin, dan tidak lebih sederhana. Alasan SGML tidak ditemukan di banyak tempat adalah karena SGML sangat canggih dan kompleks. Dan HTML, yang dapat Anda temukan di mana saja, sangat sederhana; untuk banyak aplikasi, ini terlalu sederhana.

HTML: Semua bentuk dan tanpa substansi

HTML adalah bahasa yang dirancang untuk "berbicara tentang" dokumen: tajuk, judul, teks, font, dan sebagainya. Ini sangat berorientasi pada struktur dokumen dan presentasi.

Memang, seniman dan peretas telah mampu membuat keajaiban dengan alat yang relatif membosankan yang disebut HTML. Tetapi HTML memiliki kelemahan serius yang membuatnya tidak sesuai untuk merancang sistem informasi yang fleksibel, kuat, dan evolusioner. Berikut beberapa keluhan utama:

  • HTML tidak bisa dikembangkan

    Bahasa markup yang dapat diperluas akan memungkinkan pengembang aplikasi untuk menentukan tag kustom untuk situasi khusus aplikasi. Kecuali jika Anda gorila seberat 600 pon (dan mungkin bahkan bukan itu), Anda tidak dapat meminta semua produsen browser untuk menerapkan semua tag markup yang diperlukan untuk aplikasi Anda. Jadi, Anda terjebak dengan apa yang pembuat browser besar, atau W3C (World Wide Web Consortium) akan membiarkan Anda memilikinya. Yang kami butuhkan adalah bahasa yang memungkinkan kami membuat tag markup kami sendiri tanpa harus menghubungi produsen browser.

  • HTML sangat berpusat pada tampilan

    HTML adalah bahasa yang bagus untuk tujuan tampilan, kecuali jika Anda memerlukan banyak kontrol pemformatan atau transformasi yang tepat (dalam hal ini akan terasa bau). HTML mewakili campuran dari struktur logis dokumen (judul, paragraf, dan semacamnya) dengan tag presentasi (tebal, perataan gambar, dan sebagainya). Karena hampir semua tag HTML berkaitan dengan cara menampilkan informasi di browser, HTML tidak berguna untuk aplikasi jaringan umum lainnya - seperti replikasi data atau layanan aplikasi. Kami memerlukan cara untuk menyatukan fungsi umum ini dengan tampilan, sehingga server yang sama yang digunakan untuk menelusuri data juga dapat, misalnya, menjalankan fungsi bisnis perusahaan dan beroperasi dengan sistem lama.

  • HTML biasanya tidak dapat digunakan kembali secara langsung

    Membuat dokumen dalam pengolah kata dan kemudian mengekspornya sebagai HTML agak otomatis tetapi masih memerlukan, paling tidak, beberapa penyesuaian pada keluaran untuk mencapai hasil yang dapat diterima. Jika data dari mana dokumen dibuat berubah, seluruh terjemahan HTML perlu dilakukan ulang. Situs web yang menampilkan cuaca terkini di seluruh dunia, sepanjang waktu, biasanya menangani pemformatan ulang otomatis ini dengan sangat baik. Isi dan gaya presentasi dokumen dipisahkan, karena perancang sistem memahami bahwa isinya (suhu, prakiraan, dan sebagainya) berubah secara konstan. Yang dibutuhkan adalah cara untuk menentukan penyajian data dari segi strukturnya, sehingga ketika data diperbarui, pemformatannya dapat "diaplikasikan kembali" secara konsisten dan mudah.

  • HTML only provides one 'view' of data

    It's difficult to write HTML that displays the same data in different ways based on user requests. Dynamic HTML is a start, but it requires an enormous amount of scripting and isn't a general solution to this problem. (Dynamic HTML is discussed in more detail below.) What we need is a way to get all the information we may want to browse at once, and look at it in various ways on the client.

  • HTML has little or no semantic structure

    Most Web applications would benefit from an ability to represent data by meaning rather than by layout. For example, it can be very difficult to find what you're looking for on the Internet, because there's no indication of the meaning of the data in HTML files (aside from META tags, which are usually misleading). Type

    red

    into a search engine, and you'll get links to Red Skelton, red herring, red snapper, the red scare, Red Letter Day, and probably a page or two of "Books I've Red." HTML has no way to specify what a particular page item means. A more useful markup language would represent information in terms of its meaning. What we need is a language that tells us not how to

    display

    information, but rather, what a given block of information

    is

    so we know what to do with it.

SGML has none of these weaknesses, but in order to be general, it's hair-tearingly complex (at least in its complete form). The language used to format SGML (its "style language"), called DSSSL (Document Style Semantics and Specification Language), is extremely powerful but difficult to use. How do we get a language that's roughly as easy to use as HTML but has most of the power of SGML?

Origins of XML

As the Web exploded in popularity and people all over the world began learning about HTML, they fairly quickly started running into the limitations outlined above. Heavy-metal SGML wonks, who had been working with SGML for years in relative obscurity, suddenly found that everyday people had some understanding of the concept of markup (that is, HTML). SGML experts began to consider the possibility of using SGML on the Web directly, instead of using just one application of it (again, HTML). At the same time, they knew that SGML, while powerful, was simply too complex for most people to use.

In the summer of 1996, Jon Bosak (currently online information technology architect at Sun Microsystems) convinced the W3C to let him form a committee on using SGML on the Web. He created a high-powered team of muckety-mucks from the SGML world. By November of that year, these folks had created the beginnings of a simplified form of SGML that incorporated tried-and-true features of SGML but with reduced complexity. This was, and is, XML.

In March 1997, Bosak released his landmark paper, "XML, Java and the Future of the Web" (see Resources). Now, two years later (a very long time in the life of the Web), Bosak's short paper is still a good, if dated, introduction to why using XML is such an excellent idea.

SGML was created for general document structuring, and HTML was created as an application of SGML for Web documents. XML is a simplification of SGML for general Web use.

An XML conceptual example

All this talk of "inventing your own tags" is pretty foggy: What kind of tags would a developer want to invent and how would the resulting XML be used? In this section, we'll go over an example that compares and contrasts information representation in HTML and XML. In a later section ("XSL: I like your style") we'll go over XML display.

First, we'll take an example of a recipe, and display it as one possible HTML document. Then, we'll redo the example in XML and discuss what that buys us.

HTML example

Take a look at the little chunk of HTML in Listing 1:

   Lime Jello Marshmallow Cottage Cheese Surprise   

Lime Jello Marshmallow Cottage Cheese Surprise

My grandma's favorite (may she rest in peace).

Ingredients

Qty Units Item
1 box lime gelatin
500 g multicolored tiny marshmallows
500 ml cottage cheese
dash Tabasco sauce (optional)

Instructions

  1. Prepare lime gelatin according to package instructions...

Listing 1. Some HTML

(A printable version of this listing can be found at example.html.)

Looking at the HTML code in Listing 1, it's probably clear to just about anyone that this is a recipe for something (something awful, but a recipe nonetheless). In a browser, our HTML produces something like this:

Lime Jello Marshmallow Cottage Cheese Surprise

My grandma's favorite (may she rest in peace).

Ingredients

Qty Units Item
1 box lime gelatin
500 g multicolored tiny marshmallows
500 ml Cottage cheese
  dash Tabasco sauce (optional)

Instructions

  1. Prepare lime gelatin according to package instructions...

Listing 2. What the HTML in Listing 1 looks like in a browser

Now, there are a number of advantages to representing this recipe in HTML, as follows:

  • It's fairly readable. The markup may be a little cryptic, but if it's laid out properly it's pretty easy to follow.

  • The HTML can be displayed by just about any HTML browser, even one without graphics capability. That's an important point: The display is browser-independent. If there were a photo of the results of making this recipe (and one certainly hopes there isn't), it would show up in a graphical browser but not in a text browser.

  • You could use a cascading style sheet (CSS -- we'll talk a bit about those below) for general control over formatting.

There's one major problem with HTML as a data format, however. The meaning of the various pieces of data in the document is lost. It's really hard to take general HTML and figure out what the data in the HTML mean. The fact that there's an of this recipe with a (quantity) of 500 ml () of cottage cheese would be very hard to extract from this document in a way that's generally meaningful.

Now, the idea of data in an HTML document meaning something may be a bit hard to grasp. Web pages are fine for the human reader, but if a program is going to process a document, it requires unambiguous definitions of what the tags mean. For instance, the tag in an HTML document encloses the title of the document. That's what the tag means, and it doesn't mean anything else. Similarly, an HTML tag means "table row," but that's of little use if your program is trying to read recipes in order to, say, create a shopping list. How could a program find a list of ingredients from a Web page formatted in HTML?

Sure, you could write a program that grabs the headers out of the document, reads the table column headers, figures out the quantities and units of each ingredient, and so on. The problem is, everyone formats recipes differently. What if you're trying to get this information from, say, the Julia Childs Web site, and she keeps messing around with the formatting? If Julia changes the order of the columns or stops using tables, she'll break your program! (Though it has to be said: If Julia starts publishing recipes like this, she may want to think about changing careers.)

Now, imagine that this recipe page came from data in a database and you'd like to be able to ship this data around. Maybe you'd like to add it to your huge recipe database at home, where you can search and use it however you like. Unfortunately, your input is HTML, so you'll need a program that can read this HTML, figure out what all the "Ingredients," "Instructions," "Units," and so forth are, and then import them to your database. That's a lot of work. Especially since all of that semantic information -- again, the meaning of the data -- existed in that original database but were obscured in the process of being transformed into HTML.

Now, imagine you could invent your own custom language for describing recipes. Instead of describing how the recipe was to be displayed, you'd describe the information structure in the recipe: how each piece of information would relate to the other pieces.

XML example

Let's just make up a markup language for describing recipes, and rewrite our recipe in that language, as in Listing 3.

  Lime Jello Marshmallow Cottage Cheese Surprise  My grandma's favorite (may she rest in peace).    1 lime gelatin   500 multicolored tiny marshmallows   500 Cottage cheese    Tabasco sauce     Prepare lime gelatin according to package instructions     

Listing 3. A custom markup language for recipes

It will come as little surprise to you, being the astute reader you are, that this recipe in its new format is actually an XML document. Maybe the fact that the file started with the odd header


  

gave it away; in fact, every XML file should begin with this header. We've simply invented markup tags that have a particular meaning; for example, "An is a (quantity in specified units) of a single , which is possibly optional." Our XML document describes the information in the recipe in terms of recipes, instead of in terms of how to display the recipe (as in HTML). The semantics, or meaning of the information, is maintained in XML because that's what the tag set was designed to do.

Notes on notation

It's important to get some nomenclature straight. In Figure 1, you see a start tag, which begins an enclosed area of text, known as an Item, according to the tag name. As in HTML, XML tags may include a list of attributes (consisting of an attribute name and an attribute value.) The Item defined by the tag ends with the end tag.

Not every tag encloses text. In HTML, the

tag means "line break" and contains no text. In XML, such elements aren't allowed. Instead, XML has empty tags, denoted by a slash before the final right-angle bracket in the tag. Figure 2 shows an empty tag from our XML recipe. Note that empty tags may have attributes. This empty tag example is standard XML shorthand for .

In addition to these notational differences from HTML, the structural rules of XML are more strict. Every XML document must be well-formed. What does that mean? Read on!

Ooh-la-la! Well-formed XML

The concept of well-formedness comes from mathematics: It's possible to write mathematical expressions that don't mean anything. For example, the expression

2 ( + + 5 (=) 9 > 7

looks (sort of) like math, but it isn't math because it doesn't follow the notational and structural rules for a mathematical expression (not on this planet, at least). In other words, the "expression" above isn't well-formed. Mathematical expressions must be well-formed before you can do anything useful with them, because expressions that aren't well-formed are meaningless.

A well-formed XML document is simply one that follows all of the notational and structural rules for XML. Programs that intend to process XML should reject any input XML that doesn't follow the rules for being well-formed. The most important of these rules are as follows: