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


105

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

XML自体は何も「行いません」。これは単なるデータストレージ形式であり、言語ではありません!言語は物事を「行う」。

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

では、なぜXMLは言語と呼ばれるのでしょうか?それは何も説明せず、解釈もせず、ただそうです。

編集:たぶん私の質問はもっと広くすべきだった。現在、答えは「XMLはGMLなどにちなんで命名されたSGMLにちなんで命名されているから」という質問なので、質問は(XMLなどの)マークアップ言語が言語と呼ばれるのはなぜですか?

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


128
言語が何かを「しなければならない」という要件は何に基づいていますか?dictionary.comの定義には見当たりません。
kdgregory

10
スワヒリ語が両方を理解している場合にのみ理解されるように。または、読者が言語のその部分を理解していれば、医学雑誌の記事も理解されます。違いはありません。そして、人々が定義を作り上げます。
サミKuhmonen 16

42
マークアップ言語は一般的な用語です en.wikipedia.org/wiki/Markup_language
paparazzo

37
@MrLister:「これらはコンピューター言語ではなく人間の言語です」言語は言語です。最も極端な場合でも、英語でさえ明確に理解するためにコンテキスト情報(どの方言が使用されているか)が必要です。言語であることを止めません。あなたの質問は単に間違った前提を持っています。
軌道上の明るさレース

68
don'rt言語やる事は、彼らが表現して通信するもの
ハーゲン・フォン・Eitzen

回答:


238

本当の答えは、1970年代にIBMで最初の「マークアップ言語」の設計者の中にRaymond L orie という名前の男がいたからです。開発者は3つの開発者(Goldfarb、Mosher、およびLorie)のイニシャルであるため、言語の名前を見つけてGMLを選択する必要がありました。その後、彼らはバックロニムの 一般化マークアップ言語を作成しました。

これは後にSGML(標準化された一般的なマークアップ言語)として標準化され、XMLが作成されたとき、開発者はMLポストフィックスを保持してSGMLとの家族関係を示したいと考えました。(実際には意味がありませんが、XMLは拡張可能な言語を定義できるメタ言語ですが、XML自体は実際には拡張できません。)

XMLを正当に言語と呼ぶことができるかどうかという2番目の質問については、次のとおりです。

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

XMLは本当の「記憶形式」ですが、テキストの記憶形式は言語と呼ぶことができ、これらの用語は相互に排他的ではありません。

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

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

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


編集:reinierpostは、あなたが質問で私が理解したものとは異なる何かを意味するかもしれないと指摘した。XHTML、RSS、XSLTなどの特定のボキャブラリーは、要素と属性を特定のセマンティクスに関連付けるため、言語であると考えたかもしれませんが、XML標準自体は特定の要素と属性のセマンティクスを定義していないため、「本当の言語」。

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



19
@Snowman:「正式な言語」は、コンピューティングで通常言語と呼ばれるものに必ずしも対応するわけではありません。たとえば、「形式言語」はテキストである必要はありません-マシンコードは、ほとんどのバイナリ形式およびプロトコルと同様に形式言語です。したがって、「形式言語」という用語がコンピューティングにおける「言語」と同じ意味をカバーするとは言いません。
ジャックB

15
言語がテキストである必要がある、またはテキストではないという要件を認識していません。端末から文を構築するという考えは、それらの端末のビットの任意の解釈、またはどのタイプのコンピューター(シリコンまたはカーボンベース)がそれらを読み取ることができるかとは関係ありません。

4
@NicolBolas:良い点です。マシンコードは間違いなく言語です。バイナリ言語を「フォーマット」と呼ぶ方が一般的だと思います。たとえば、GIF言語ではなくGIFフォーマットと言います。
ジャックB 16

3
@BenCottrell:ループがあるかもしれないので、グラフではないでしょうか?
ジャックB 16

181

それは言語だからです。マークアップ言語ではなく、プログラミング言語。

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


43
「コンパイラ」を「インタープリター」に置き換えます。コンパイラーにフィードされても、何も「行わない」わけではなく、単にそれらを別の言語に翻訳するだけです。すべての実行は解釈です。場合によっては、インタープリターは非常にシンプルでシリコンに実装されていることがあります。この場合、「実行ユニット」と呼ばれますが、それでもインタープリターです。</nitpick>とにかく、良い答えです!
ヨルグWミットタグ

8
@JörgWMittag良い点。通常コンパイルされる言語をランダムに選択したため、「そして出力が実行される」ように追加しました。
Ixrec

1
拡張可能なマークアップ言語、あなたがなります。
doppelgreener

1
私は、人間の言語が物事を「行う」と主張します。参照してくださいスピーチ・アクト理論...
レイ

2
甘い、甘い直交性。別の代数で言語を実行すると、まったく新しい一連のアクションが展開されます。とにかく理論の下で。
ケノーグラブズ16

103

Σを、アルファベットと呼ばれる、空ではない有限のシンボルセットとします。Σ*は、Σからのゼロ個以上のシンボルを連結することにより形成できる可算無限語の有限集合です。どれでも明確に定義されたサブセットのL ⊆のΣ*がある言語

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

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

明らかにそうではありません。サブセットXML⊂ U *形成していることがよく形成されたXML文書は、決定可能(または「再帰」)。入力として任意の単語取る機械(アルゴリズム又はコンピュータプログラム)が存在するWUを *と有限の時間の後に、場合のいずれかで出力1 ワットさもなければ∈XMLおよび0。このようなアルゴリズムは、XML処理ソフトウェアのサブルーチンです。すべての言語が決定可能というわけではありません。たとえば、有限の時間で終了する有効なCプログラムのセットはそうではありません(これは停止問題として知られています))。新しい言語を設計する場合、重要な決定は、それが可能な限り強力であるべきかどうか、または決定可能性を優先して表現力を制限するかどうかです。

一部の言語は、言語を生成すると言われる文法によって定義できます。文法は

  • リテラルの有限セット(終端記号とも呼ばれます)、
  • 互いに素有限集合変数(とも呼ばれる文法の非終端記号)、
  • 変数のセットから取られた識別可能な開始記号、および
  • 特定の種類の置換を許可するルールのセット(いわゆるプロダクション)。

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

たとえば、次の文法(やや非公式の表記法)を使用すると、整数を正確に10進表記法で導出できます。

  1. 文法のリテラルは数字です123456789、と0
  2. 変数は、シンボルSおよびDです。
  3. Sは開始記号です。
  4. 変数Sの出現はすべて置き換えられます
    • リテラル0または
    • 0変数Dが後に続く以外のリテラルのいずれかによって。
  5. 変数Dの出現はすべて置き換えられます
    • リテラルの後に変数Dの別のインスタンスが続く、または
    • 空の文字列によって。

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

S - (適用ルール4、2 番目 →変異体)4 D - (適用ルール5、1 回目の変異体)→ 42 D - (適用ルール5、2 番目の変異体)→ 42

文法でどのように複雑な規則を許可するかに応じて、特定の単語が実際に文法によって生成されることを証明するために、高度に異なるマシンが必要です。上記の例は通常の文法であり、最も単純で最も強力ではありません。次の強力な文法クラスは、コンテキストフリーと呼ばれます。これらの文法も検証が非常に簡単です。XML(私が知らないいくつかのあいまいな機能を見落としていない限り)は、文脈自由文法で記述できます。文法の分類は、文法(および言語)のチョムスキー階層を形成します。文法で記述できるすべての言語は、少なくとも半決定的です(または「再帰的に列挙可能」)。つまり、実際にその言語に属する単語が与えられると、有限時間内に文法によって生成できるという証明を導き出し、間違った証明を決して出力しないマシンが存在します。そのようなマシンはベリファイアと呼ばれます。実際に言語に属さない単語が与えられた場合、マシンは決して停止しないことに注意してください。明らかに、限られた時間内に無効なプログラムを拒否できるという利点のために、プログラミング言語をより強力な文法で記述したいのです。

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

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

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

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

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


7
@Giorgio:数学では、「明確に定義された」は大部分が単なる増強子です。数学的に存在するものはすべて明確に定義されています。
ケビン

9
@Giorgio「明確に定義された」とは、アイテムがセットに属しているかどうかを示す正式な述語があることを意味します。この述語は一般に計算可能ではありませんが、矛盾なく明確に指定する必要があります。そうしないと悪いことが起こる可能性があります。「文字列のペア(wM)。ここでMwを出力して停止するチューリングマシンの最小の記述です」は明確に定義されていますが、計算できません(コルモゴロフの複雑さを参照)。…
5gon12eder

2
@ 5gon12eder:そのセットはZFCには存在しません(分離の公理スキーマはそれを記述するほど強力ではないため)。他の集合論を使用している場合は、指定する必要があります。
ケビン

5
@ 5gon12eder:「セットに含まれていないすべての文字列を含むセット」は存在しません。「明確に定義された」という用語は皮肉にも明確に定義されていません。
ケビン

3
十分に形成されたプロパティまたは検証をすることにより行われる文法。あなたがそれについて言及していれば、この答えは完璧でした。
ティボーD.

31

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

これは、言語が必要とするのはすべて構文であり、有効な各文字列が意味するものを記述する必要がないことを意味することに注意してください(セマンティクスと呼ばれます)。

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

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

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


10
@MrLister彼らは人間が読めないので。彼らは、人間が読めるない場合、我々はそれらを呼び出すする傾向があるフォーマットデータ形式の代わりに。
メイソンウィーラー

3
@JamesSnellもちろん、他のML言語ファミリーと混同しないでください。頭がいっぱいの頭字語に賛成です!
メイソンウィーラー

3
正式なツールを使用してJFIFなどのパーサー(または特にバリデーター)を構築している場合、エンジニアはそれを実際に「言語」と呼ぶことがあります。おそらく「文法」として。
JDługosz

3
@MrLister:まあ、それら言語ですが、再利用可能なデータ構造を定義するため、特別な名前であるformatsがあります。しかし、はい、これらも言語です。
軌道上の明るさのレース

4
@MrLister:フォーマットの命名はマーケティングの問題です。「* ML」はGMLやSGMLのような先行フォーマットとの家族関係を示し、Xが前面にあるとクールだと思ったため、XMLの人々はXML for XMLと呼んでいました。また、GMLは、一般化されたマークアップ言語であるだけでなく、3人の言語デザイナーのイニシャルでもあるため、GMLと呼ばれていました。したがって、基本的にXMLのLは、Raymond L orieという名前の男が最初のマークアップ言語の設計者だったためです。
ジャックB 16

12

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

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

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


...そして、そのデータは、アルゴリズムの記述である可能性が非常に高いです。
ルアーン

@Luaan ...また、プログラミング言語を悪用してデータを伝えることもできます。たとえば、JSONと同様です。
フィリップ

2
再帰することもできます。データストレージにのみ使用されるC#コードを含むNAntスクリプト(XMLベースの言語)を見てきました。XMLを含む文字列リテラルを使用します。はい、それは成長した男性を泣かせるようなものです:P
Luaan

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.