初心者向けのXML

HTMLとワールドワイドウェブはいたるところにあります。彼らのユビキタスの例として、私は今年イースターのために中央アメリカに行きます、そして私が望むなら、私はウェブをサーフィンしたり、私の電子メールを読んだり、そしてインターネットカフェからオンラインバンキングをすることさえできますアンティグアグアテマラとベリーズシティ。(ただし、そうするつもりはありません。ヤシの木とラム酒で満たされたココナッツを使った日付から時間がかかるからです。)

それでも、HTMLの遍在性と人気にもかかわらず、HTMLで実行できることは大幅に制限されています。非公式の文書を広めるのは問題ありませんが、HTMLは現在、設計されたことのないことを行うために使用されています。 HTMLから頑丈で柔軟性があり、相互運用可能なデータシステムを設計しようとすることは、弓のこやはんだごてを使って空母を構築しようとするようなものです。ツール(HTMLとHTTP)はうまくいきません。

幸いなことに、HTMLの制限の多くはXML(Extensible Markup Language)で克服されています。XMLは、HTMLを理解している人なら誰でも簡単に理解できますが、はるかに強力です。XMLは単なるマークアップ言語ではなく、メタ言語つまり新しいマークアップ言語を定義するために使用される言語です。XMLを使用すると、アプリケーションまたはドメイン用に特別に作成された言語を作成できます。

XMLは、HTMLを置き換えるのではなく、補完します。HTMLはデータのフォーマットと表示に使用されますが、XMLはデータのコンテキスト上の意味を表します。

この記事では、マークアップ言語の歴史とXMLがどのようになってきたかを紹介します。 HTMLのサンプルデータを見て、徐々にXMLに移行し、データを表現するための優れた方法を提供する理由を示します。カスタムマークアップ言語を発明する必要がある理由を探り、その方法をお教えします。 XML表記の基本と、2つの異なる種類のスタイル言語でXMLを表示する方法について説明します。次に、ドキュメントをオブジェクトとして操作する(または、オブジェクトの見方によっては、オブジェクト構造をドキュメントとして操作する)ための強力なツールであるドキュメントオブジェクトモデルについて詳しく説明します。 XMLドキュメントから情報を抽出するJavaプログラムの作成方法について、これらの新しい概念の実験に役立つ無料のプログラムへのポインターを使用して説明します。最後に、私たちはコアテクノロジー戦略をXMLとJavaに基づいているインターネット企業を見てみましょう。

XMLはあなたに適していますか?

この記事はXMLに関心のある人を対象としていますが、XMLJavaBeansのJavaWorldシリーズと特別な関係があります。(関連記事へのリンクについては、「参考文献」を参照してください。)そのシリーズを読んでいて、「理解」していない場合は、この記事でBeanでXMLを使用する方法を明確にする必要があります。あなたがいる場合され、それを取得し、それがそのまま、その中のトピックを覆っているため、この記事では、XML JavaBeansのシリーズに最適なコンパニオンピースとして機能します。また、XML JavaBeansの記事をまだ楽しみにしている数少ない幸運な人の場合は、最初に紹介資料として現在の記事を読むことをお勧めします。

Javaについてのメモ

コンピュータの世界では最近のXMLアクティビティが非常に多いため、この長さの記事でさえ表面をすくい取ることができるだけです。それでも、この記事の要点は、Javaプログラムの設計でXMLを使用するために必要なコンテキストを提供することです。この記事では、多くのJavaプログラマーがそのような環境で作業するため、XMLが既存のWebテクノロジーでどのように動作するかについても説明します。

XMLは、インターネットとJavaプログラミングを移植可能な非ブラウザー機能に開放します。XMLは、Javaがプラットフォームからプログラムの動作を解放するのとほぼ同じ方法で、インターネットコンテンツをブラウザから解放します。XMLは、インターネットコンテンツを実際のアプリケーションで利用できるようにします。

JavaはXMLを使用するための優れたプラットフォームであり、XMLはJavaアプリケーションの優れたデータ表現です。XMLを使用したJavaの長所のいくつかを説明します。

歴史のレッスンから始めましょう。

マークアップ言語の起源

私たち全員が知っていて愛しているHTML(とにかく、私たちが知っていることです)は、元々、ジュネーブのCERN(leConseilEuropéenpourlaRechercheNucléaireまたはヨーロッパ素粒子物理学研究所)のTim Berners-Leeによって、物理オタク(そして非オタクでさえ)互いに通信するために。HTMLは1990年12月にCERN内でリリースされ、1991年の夏に残りの人々に公開されました。CERNとBerners-Leeは、インターネットの共有と楽しみという古き良き伝統の中で、HTML、HTTP、およびURLの仕様を提供しました。

Berners-Leeは、標準の一般化マークアップ言語であるSGMLでHTMLを定義しました。 SGMLは、XMLと同様に、メタ言語、つまり他の言語を定義するために使用される言語です。そのように定義された各言語は、SGMLのアプリケーションと呼ばれます。 HTMLはSGMLのアプリケーションです。

SGMLは、主にIBMで60年代後半にテキストドキュメント表現に関して行われた調査から生まれました。 IBMは、SGMLの前身であるGML( "General Markup Language")を作成し、1978年に米国規格協会(ANSI)が最初のバージョンのSGMLを作成しました。最初の標準は1983年にリリースされ、ドラフト標準は1985年にリリースされ、最初の標準は1986年に公開されました。興味深いことに、最初のSGML標準は、CERNのAndersBerglundによって開発されたSGMLシステムを使用して公開されました。私たちが見てきた、HTMLとWebを提供してくれました。

SGMLは、大規模な航空宇宙、自動車、電気通信会社などの大規模な業界や政府で広く使用されています。SGMLは、米国国防総省および内国歳入庁で文書標準として使用されています。(米国以外の読者の場合、IRSは税務担当者です。)

アルバート・アインシュタインは、すべてを可能な限り単純にする必要があり、単純にするべきではないと述べました。SGMLが他の場所で見つからない理由は、SGMLが非常に洗練されていて複雑だからです。そして、どこにでもあるHTMLは非常にシンプルです。多くのアプリケーションにとって、それは単純すぎます。

HTML:すべての形式で実質なし

HTMLは、見出し、タイトル、キャプション、フォントなどのドキュメントについて「話す」ために設計された言語です。これは、ドキュメントの構造とプレゼンテーションを重視しています。

確かに、アーティストやハッカーは、HTMLと呼ばれる比較的鈍いツールを使って奇跡を起こすことができました。しかし、HTMLには重大な欠点があり、柔軟で強力な進化的情報システムの設計には適していません。ここにいくつかの主な不満があります:

  • HTMLは拡張可能ではありません

    拡張可能なマークアップ言語を使用すると、アプリケーション開発者はアプリケーション固有の状況に合わせてカスタムタグを定義できます。あなたが600ポンドのゴリラでない限り(そしておそらくそうではないかもしれませんが)、すべてのブラウザメーカーにアプリケーションに必要なすべてのマークアップタグを実装するように要求することはできません。そのため、大手ブラウザメーカー、またはW3C(World Wide Web Consortium)が提供するものに固執しています。必要なのは、ブラウザの製造元に電話することなく、独自のマークアップタグを作成できる言語です。

  • HTMLは非常に表示中心です

    HTMLは、多くの正確なフォーマットまたは変換制御が必要な場合を除いて、表示目的に適した言語です(この場合、悪臭を放ちます)。HTMLは、ドキュメントの論理構造(タイトル、段落など)とプレゼンテーションタグ(太字、画像の配置など)の組み合わせを表します。ほとんどすべてのHTMLタグはブラウザで情報を表示する方法に関係しているため、HTMLは、データ複製やアプリケーションサービスなどの他の一般的なネットワークアプリケーションには役に立ちません。これらの一般的な機能をディスプレイと統合する方法が必要です。そのため、データの参照に使用されるのと同じサーバーで、たとえば、エンタープライズビジネス機能を実行したり、レガシーシステムと相互運用したりすることもできます。

  • HTMLは通常直接再利用できません

    ワードプロセッサでドキュメントを作成し、HTMLとしてエクスポートすることはある程度自動化されていますが、許容できる結果を得るには、少なくとも出力を微調整する必要があります。ドキュメントの作成元のデータが変更された場合は、HTML翻訳全体をやり直す必要があります。世界中の現在の天気を24時間表示するWebサイトは、通常、この自動再フォーマットを非常にうまく処理します。システム設計者は、コンテンツ(気温、予測など)が絶えず変化することを理解しているため、ドキュメントのコンテンツと表示スタイルは分離されています必要なのは、構造の観点からデータ表示を指定する方法です。これにより、データが更新されたときに、フォーマットを一貫して簡単に「再適用」できます。

  • 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: