web-dev-qa-db-ja.com

XMLが「言語」と正確に呼ばれるのはなぜですか?

XMLの名前にLが付いているのはなぜかと思っていました。

XML自体は何も「行いません」。言語ではなく、単なるデータ保存形式です!言語は物事を「行う」。

XMLを「実行」して、適切な言語に変換する方法は、ルート要素にxmlns属性を追加することです。それからはじめて、それが何であるかを環境に伝えます。
1つの例はXHTMLです。それはアクティブで、リンク、ハイパーテキスト、スタイルなどがあり、すべてxmlnsによってトリガーされます。それがなければ、XHTMLファイルはマークアップノードの単なるデータの集まりです。

では、なぜXMLは言語と呼ばれるのでしょうか。それは何も説明しておらず、解釈もしていません。

編集:多分私の質問はもっと広範だったはずです。答えは現在「XMLはSGMLにちなんで名付けられたため、GMLなどにちなんで名付けられたから」という疑問があったはずですが、なぜマークアップ言語(XMLなど)は言語と呼ばれるのでしょうか。

ああ、そしてWRTの近い投票:いいえ、私はXについて質問していません。Lについて質問しています!

107
Mr Lister

本当の答えは、レイモンド[〜#〜] l [〜#〜]という男がデザイナーの中にいたため、XMLの名前にはLが含まれています1970年代にIBMで最初の「マークアップ言語」の。開発者は言語の名前を見つける必要があったので、[〜#〜] gml [〜#〜]を選択しました。開発者(Goldfarb、Mosher、およびLorie)。次に、 backronymGeneralized Markup Languageを作成しました。

これは後にSGML(Standardized General Markup Language)として標準化され、XMLが作成されたとき、開発者はML-postfixを保持してSGMLとの家族関係を示すことを望み、Xを前に追加しました彼らはそれがクールに見えたと思ったので。 (実際には意味がありませんが、XMLは拡張可能な言語を定義できるメタ言語ですが、XML自体は実際には拡張可能ではありません。)

2番目の質問については、XMLを合法的に言語と呼ぶことができるかどうかです。

計算で処理できる構造化されたテキスト(またはバイナリ)形式は、言語と呼ぶことができます。言語はそれ自体何も「実行」しませんが、一部のソフトウェアはその言語で入力を処理し、それに基づいて何かを「実行」する場合があります。

XMLは真の「ストレージフォーマット」ですが、テキストストレージフォーマットは言語と呼ぶことができ、これらの用語は相互に排他的ではありません。

プログラミング言語は言語のサブセットです。例えば。 HTMLとCSSは言語ではなくプログラミング言語ですが、JavaScriptは実際のプログラミング言語です。とはいえ、プログラミング言語の正式な定義もありません。また、視点に応じて、データ形式またはプログラミング言語のいずれかと呼ばれる可能性のある言語の大きな灰色ゾーンがあります。

これを考えると、XMLは明らかに言語です。 プログラミング言語ではありませんが、XSLTなどのプログラミング言語を定義するために使用できます。

名前空間についてのあなたのポイントは無関係です。名前空間はXMLのオプション機能であり、XML語彙のセマンティクスを変更しません。フォーマットに複数の語彙が含まれている場合は、要素名を明確にする必要があります。


編集:reinierpostは、あなたが質問に対して私が理解したものとは異なる何かを意味している可能性があることを指摘しました。おそらく、XHTML、RSS、XSLTなどの特定の語彙は、要素と属性を特定のセマンティクスに関連付けるため、言語であることを意味しますが、XML標準自体は特定の要素と属性のセマンティクスを定義していないため、「実際の言語」。

これに対する私の答えは、XML doesが構文とセマンティクスの両方を定義するということです。それは、それを異なるレベルで定義するだけです。たとえば、要素と属性の構文、およびそれらの処理方法に関するルールを定義します。 XMLは「メタ言語」であり、これはまだ一種の言語です(メタデータがまだデータであるように!)。例として [〜#〜] ebnf [〜#〜] も明らかに言語ですが、その目的は他の言語の構文を定義することであるため、メタ言語でもあります。

241
JacquesB

言語だからです。 A markup言語、プログラミング言語ではありません。

英語やスペイン語のような自然な人間の言語も何も「しない」ことに注意してください。実際、技術的にはC++とJavaなどは、コンパイラに入力されて出力が実行されるまで何も行いません。何かを行うことと言語になることは、お互い。

180
Ixrec

Σを alphabet と呼ばれる空ではない有限のシンボルセットとします。次に、Σ*は、Σからのゼロ個以上の記号を連結することによって形成できる有限ワードのカウント可能な無限セットです。明確に定義されたサブセット L ⊆Σ*は language です。

これをXMLに適用してみましょう。そのアルファベットは nicode 文字セットです U、これは空ではなく、有限です。 0個以上のUnicode文字のすべての連結が整形式のXMLドキュメントであるとは限りません。たとえば、文字列

<tag> soup &; not <//good>

明らかにそうではありません。サブセットXML⊂ U* well-formedXML ドキュメントは decidable (または「再帰的」)。 Wordを入力として受け取るマシン(アルゴリズムまたはコンピュータープログラム)が存在する w ∈ U*有限時間後に、次の場合に1を出力します w ∈XML、それ以外の場合は0。このようなアルゴリズムは、XML処理ソフトウェアのサブルーチンです。すべての言語が決定可能であるとは限りません。たとえば、有限の時間で終了する有効なCプログラムのセットはそうではありません(これは 停止問題 として知られています)。新しい言語を設計するとき、重要な決定は、それが可能な限り強力であるべきか、それとも表現力が決定可能性のために制限されるべきかということです。

一部の言語は grammarproduce 言語。文法は、

  • literalsの有限セット(終端記号とも呼ばれます)、
  • 文法の変数のばらばらの有限集合(非終端記号記号とも呼ばれる)、
  • 変数のセットから取得した、区別された開始記号および
  • 特定の種類の置換を許可する有限のルールセット(いわゆるproductions)。

リテラルのみで構成され、開始記号から開始して特定のルールを適用することで派生できるWordは、文法によって生成された言語に属します。

たとえば、次の文法(略式表記)では、整数を10進表記で正確に導出できます。

  1. 文法のリテラルは、数字1234567890
  2. 変数は、記号[〜#〜] s [〜#〜]および[〜#〜] d [〜#〜]
  3. [〜#〜] s [〜#〜]は開始記号です。
  4. 変数[〜#〜] s [〜#〜]はすべて置き換えられます
    • リテラル0または
    • 0以外のリテラルの後に変数[〜#〜] d [〜#〜]が続きます。
  5. 変数[〜#〜] d [〜#〜]はすべて置き換えられます
    • リテラルの後に変数の別のインスタンスが続く[〜#〜] d [〜#〜]または
    • 空の文字列によって。

42の導出方法は次のとおりです。

[〜#〜] s [〜#〜]—(ルール4、2を適用nd バリアント)→4[〜#〜] d [〜#〜]—(ルール5を適用、1st バリアント)→42[〜#〜] d [〜#〜]—(ルール5、2を適用nd バリアント)→42

文法でどの程度複雑なルールを許可するかによって、特定のWordが実際に文法で生成できることを証明するには、高度に異なるマシンが必要です。上記の例は、regular文法です。これは、最も単純で最も強力ではありません。文法の次の強力なクラスはcontext-freeと呼ばれます。これらの文法の検証も非常に簡単です。 XML(私が気付いていないあいまいな機能を見落としているのでない限り)は、文脈自由文法で説明できます。文法の分類は、文法(したがって言語)の Chomsky Hierarchy を形成します。文法で記述できるすべての言語は、少なくとも semi-decidable (または「再帰的に列挙可能」)です。つまり、実際にはその言語に属する単語が与えられ、それが文法によって有限の時間内に生成できるという証明を導き出し、決して間違った証明を出力しないマシンが存在します。このようなマシンはverifierと呼ばれます。実際には言語に属していないWordが与えられた場合、マシンが停止することはありません。明らかに、無効なプログラムを有限の時間内に拒否できるようにするために、プログラミング言語をそれほど強力ではない文法で記述したいと考えています。

Schemataは、整形式ドキュメントのセットを洗練することを可能にするXMLへの追加です。特定のスキーマに従う整形式のドキュメントは、そのスキーマに従ってvalidと呼ばれます。たとえば、文字列

<?xml version="1.0" encoding="utf-8" ?>
<root>all evil</root>

整形式のXMLドキュメントですが、有効なXHTMLドキュメントではありません。 [〜#〜] xhtml [〜#〜][〜#〜] svg [〜#〜][〜#〜 ] xslt [〜#〜] と他の何も。スキーマ検証は、入力ごとに有限量のステップの後で停止することが保証されているアルゴリズムによって行うこともできます。このようなプログラムは validator または検証パーサーと呼ばれます。スキーマは、いわゆるscema定義言語によって定義されます。これは、正式に文法を定義する方法です。 [〜#〜] xsd [〜#〜] は、XMLの公式のスキーマ定義言語であり、それ自体がXMLベースです。 RELAX NG は、XSDに代わる、よりエレガントで、はるかに単純で、やや強力ではないものです。

独自のスキーマを定義できるため、XMLはextensible言語と呼ばれ、「XML」の「X」の起源です。

XMLドキュメントにコンピュータプログラムの説明としての解釈を与える一連のルールを定義できます。前述のXSLTは、XMLで構築されたこのようなプログラミング言語の例です。より一般的には、必要に応じて、ほとんどすべてのプログラミング言語の抽象構文ツリーを非常に自然にXMLにシリアル化できます。

102
5gon12eder

コンピュータサイエンスでは、 形式言語 は文字列のセットであり、通常は無限であり、規則を使用して記述されることが多い(これらの規則の2つの一般的なバージョンは 正規表現 および 形式文法 )。

これは、言語に必要なすべてが syntax であることを意味します。言語は、各有効な文字列が何を意味するかを記述する必要はありません(それは semantics )と呼ばれます。

これはつまり、プログラミング言語が、いくつかの計算を記述する意味論も持つ正式な言語であることを意味します。たとえば、XHTMLは正式な言語であり、そのセマンティクスはハイパーテキストドキュメントの外観と動作を(大まかに、非公式に)記述します。

XML自体はセマンティクスを持っていませんが、XMLはまだ言語です(ただし、XHTMLやXAMLなど、XMLから派生した多くの言語にはあります)。

技術的には、バイナリ形式も言語ですが、そのように呼ばれていません。 「言語」という用語は、人間が読める形式のために予約されています。

31
svick

言語は情報を伝える方法です。

プログラミング言語は、アルゴリズムを伝達する方法です。

XMLのようなマークアップ言語は、データを伝達するための言語です。

12
Philipp

XMLはメタ言語です。特定の言語を定義するために使用します。言語は何もしないで、物事を表現できるようにするだけです。また、XMLが「ストレージ言語」であるとは限りません。実際は正反対です。 XMLドキュメントは自由に保存できます。 XMLは、転送言語としてよりよく考えられています。 PS。 XMLが「何もしない」と思わない場合は、多くのシステム(例:jetty)が(悪い)プログラミング言語としてXMLをどのように使用しているのかを説明する必要があります。これは嘆かわしいXMLの乱用ですが、実際に存在し、それは多くの例の1つにすぎません。

2
user223083