JavaRush /Java Blog /Random-JA /Java における XML: それは何ですか?

Java における XML: それは何ですか?

Random-JA グループに公開済み
こんにちは!今日は、XML と呼ばれる別のデータ形式について説明します。これは非常に重要なトピックです。実際の Java アプリケーションで作業していると、ほぼ確実に XML 関連の問題に遭遇するでしょう。この形式は Java 開発のほぼどこでも使用されます (その理由については後で詳しく説明します)。そのため、講義を「斜めに」読むのではなく、すべてを徹底的に理解し、同時に追加の文献/リンクを学習することをお勧めします :)時間は決して無駄にはなりません。それでは、「何を」と「なぜ」という単純なものから始めましょう。

XML とは何ですか?

XML は eXtensible Markup Language の略です。マークアップ言語の 1 つはすでにご存知かもしれません。Web ページの作成に使用される HTML については聞いたことがあるでしょう :) XML とは - 1HTML と XML は、見た目も似ています。
HTML1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML1
<headline>title</headline>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
HTML2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML2
<chief>title</chief>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
つまり、XML はデータを記述するための言語です。

なぜ XML が必要なのでしょうか?

XML はもともと、インターネットを含むデータのより便利な保存と送信のために発明されました。このタスクにうまく対処できるようにする多くの利点があります。まず、人間にもコンピュータにも読みやすいということです。この XML ファイルが何を説明しているのかを簡単に理解できると思います。
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
コンピュータもこの形式を容易に理解できます。次に、データは単純なテキスト形式で保存されるため、あるコンピュータから別のコンピュータに転送するときに互換性の問題が発生しません。XML は実行可能コードではなく、データ記述言語であることを理解することが重要です。XML を使用してデータを記述した後、このデータを送信/受信/処理できるコードを (Java などで) 記述する必要があります。

XML はどのように機能するのでしょうか?

その主なコンポーネントはタグです。山かっこ内の内容は次のとおりです。
<book>
</book>
開閉タグあります。閉じているものには追加の記号「/」があり、これは上の例で見ることができます。各開始タグには対応する終了タグが必要です。これらは、ファイル内の各要素の説明がどこで始まり、どこで終わるかを示します。タグはネストできる!この本の例では、 <book>タグには 3 つのサブタグ - <title><author><year>があります。これは 1 つのレベルに限定されません。サブタグは独自のサブタグを持つこともできます。この設計はタグ ツリーと呼ばれます。自動車販売店の説明が含まれる XML ファイルの例を使用してツリーを見てみましょう。
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
ここにはトップレベルのタグ<carstore>があります。「ルート」、つまりルートタグとも呼ばれます。<carstore> には 1 つの子タグ <car> があります。<car> には、<model>、<year>、<price> という 3 つの独自の子タグもあります。各タグには属性、つまり追加の重要な情報を含めることができます。この例では、<model> タグには属性「lang」があります。これは、モデルの名前が記述される言語です。
<model lang="en">Scania R 770</model>
このようにして、タイトルが英語で書かれていることを示すことができます。<price> タグには「currency」属性があります。
<price currency="US dollar">150000.00</price>
このようにして、車の価格が米ドルであることを示すことができます。したがって、XML には「自己記述型」構文があります。データを説明するために必要な情報を追加できます。ファイルの先頭に、XML バージョンとデータが書き込まれるエンコーディングを示す行を追加することもできます。これは「prolog」と呼ばれるもので、次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
XML バージョン 1.0 および UTF-8 エンコーディングを使用します。これは必須ではありませんが、たとえば、ファイル内で異なる言語のテキストを使用する場合に便利です。XML は「拡張可能なマークアップ言語」の略であると述べましたが、「拡張可能な」とは何を意味するのでしょうか? これは、オブジェクトやファイルの新しいバージョンを作成するのに最適であることを意味します。たとえば、自動車ショールームでもバイクの販売を始めたいと考えています。同時に、プログラムでは、<carstore> の両方のバージョン、つまり古いバージョン (オートバイなし) と新しいバージョンの両方をサポートする必要があります。古いバージョンは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
そして、これが新しく拡張されたものです:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
非常に簡単かつ単純に、オートバイの説明をファイルに追加しました :) 同時に、オートバイに対して車と同じ子タグを設定する必要はまったくありません。自動車とは異なり、オートバイには <owner> (所有者) という要素があることに注意してください。これによって、コンピュータ (または人間) によるデータの読み取りが妨げられることはありません。

XML と HTML の違い

XML と HTML は見た目が非常に似ていることはすでに述べました。したがって、それらがどのように異なるのかを知ることが非常に重要です。まず、それらはさまざまな目的に使用されます。 HTML - Web ページのマークアップ用。たとえば、Web サイトを作成する必要がある場合、HTML を使用して次のように指定できます。「メニューは右上隅にある必要があります。」あれやこれやのボタンがあるはずです。」つまり、HTML の目的はデータを表示することです。 XML -人間とコンピュータにとって便利な形式で情報を保存および送信するためのファイル。この形式には、このデータをどのように表示するかについての指示は含まれていません。それはプログラム自体のコードに依存します。第二に、両者には主な技術的な違いがあります。HTML タグは事前に定義されています。つまり、見出し (たとえば、ページの先頭にある大きな碑文) を作成するには、HTML では <h1></h1> タグのみが使用されます (小さな見出しの場合は、<h2></h2>、< h3></h3>)。異なるタイトルのタグを使用して HTML で見出しを作成することはできません。XML では事前定義されたタグは使用されません。タグには、<header>、<title>、<idontknow2121> などの任意の名前を付けることができます。

紛争解決

XML が提供する自由度は、いくつかの問題を引き起こす可能性もあります。たとえば、同じエンティティ (マシンなど) を異なる目的のプログラムで使用することができます。たとえば、マシンを説明する XML ファイルがあります。しかし、当社のプログラマー間では事前に合意がありませんでした。そして今、実際の車のデータに加えて、XML にはおもちゃのモデルのデータも含まれています。さらに、それらは同じ属性を持っています。私たちのプログラムは次の XML ファイルを受け取ります。本物の車とおもちゃのモデルをどうやって見分けることができるのでしょうか?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
ここではプレフィックスと名前空間が役に立ちます。私たちのプログラムでは、おもちゃの車と本物の車を区別するために (そして、一般に、あらゆるおもちゃの物と本物のプロトタイプを)、「本物」と「おもちゃ」という 2 つの接頭辞を導入します。
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
これで、プログラムはエンティティを区別できるようになります。おもちゃの接頭辞が付いているものはすべておもちゃとして分類されます :) ただし、まだ終わっていません。プレフィックスを使用するには、それぞれを名前空間として登録する必要があります。実際のところ、「登録」は強力な単語です :) 必要なのは、それぞれに一意の名前を考えることだけです。これはクラスの場合と同様です。クラスには短い名前 ( Cat) と、すべてのパッケージを含む完全な名前 ( zoo.animals.Cat) があります。一意の名前空間を作成するには、通常、URI が使用されます。場合によっては、インターネット アドレスがここで置き換えられ、この名前空間の機能と目的が詳細に説明されます。ただし、これは有効なインターネット アドレスである必要はありません。多くの場合、プロジェクトでは、名前空間の階層を追跡するのに役立つ URI のような文字列が単純に使用されます。以下に例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
もちろん、インターネット上にはhttp://testproject.developersgroup1.companyname/Department2/namespaces/realというアドレスのサイトはありませ ん。しかし、有益な情報があります。「Department2」部門の開発者グループ「developersgroup1」が、 「実際の」名前空間。新しい名前を追加する必要がある場合、または競合の可能性について話し合う必要がある場合は、どこに問い合わせればよいかわかります。この名前空間の説明を含む実際のインターネット アドレスが、名前空間の一意の名前として使用される場合があります。たとえば、それが大企業で、そのプロジェクトが世界中の何百万もの人々によって使用される場合です。しかし、これは常に行われるわけではありません。この問題についてはStackoverflowで議論されています。原則として、名前空間の名前として URI を使用するという要件は厳密ではありません。ランダムな文字列を使用するだけで問題ありません。このオプションも機能します。
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
ただし、URI を使用することには多くの利点があります。詳細については、こちらをご覧ください。

コア XML 標準

XML 標準は、XML ファイルに追加機能を追加する一連の拡張機能です。 XML には多くの標準がありますが、ここでは最も重要な標準だけを取り上げ、 最も有名な XML 標準の 1 つであるAJAXで何ができるかを調べます。Web ページをリロードせずにコンテンツを変更できるようになります。かっこいいね?:) このテクノロジーは、ここで直接試すことができます。 XSLT - XML テキストを他の形式に変換できます。たとえば、XSLT を使用すると、XML を HTML に変換できます。すでに述べたように、XML の目的はデータを表示することではなく、データを記述することです。しかし、XSLT を使用すると、この制限を回避できます。 ここにサンドボックスと実際のサンプルがあり、どのように機能するかを自分の目で確認できます :) XML DOM - XML ファイルから個々の要素を取得、変更、追加、または削除できます。これがどのように機能するかの小さな例を示します。Books.xml ファイルがあります。
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
その中に本が2冊入っています。本にはタイトルなどの要素 <title> があります。ここでは、JavaScript を使用して XML ファイルからすべての書籍タイトルを取得し、その最初のタイトルをコンソールに出力できます。
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
繰り返しになりますが、この例がサンドボックスを使用してどのように機能するかを確認することをお勧めします:) DTD (「ドキュメント タイプ定義」) - XML ファイル内の一部のエンティティに対して許可される要素のリストを定義できます。たとえば、私たちは書店の Web サイトに取り組んでいます。すべての開発チームは、book 要素については、タイトル、著者、年の属性のみを XML ファイルで指定する必要があることに同意しています。しかし、不注意から身を守るにはどうすればよいでしょうか? 非常に簡単!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
ここでは、<book> の有効な属性のリストを定義しました。そこに新しい要素を追加しようとすると、すぐにエラーが発生します。
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
エラー!「ここでは mainhero 要素は許可されません」 他にも多くの XML 標準があります。WC3 Web サイト(「重要な XML 標準」のセクション)で、それぞれについて知り、コードをさらに詳しく調べてみることができます。一般に、XML に関する情報が必要な場合は、そこにほとんどすべてのものが見つかります :) さて、私たちの講義は終わりました。タスクに戻る時間です! :) またね!
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION