Warum wird XML genau als „Sprache“ bezeichnet?


105

Ich habe mich gefragt, warum XML ein L im Namen hat.

XML selbst "macht" nichts. Es ist nur ein Datenspeicherformat, keine Sprache! Sprachen "tun" Dinge.

Die Art und Weise, wie Sie XML dazu bringen, Dinge zu "erledigen", um es in eine richtige Sprache zu verwandeln, besteht darin, seinem Stammelement xmlnsAttribute hinzuzufügen . Erst dann sagt es seiner Umgebung, worum es geht.
Ein Beispiel ist XHTML. Es ist aktiv, es hat Links, Hypertext, Stile usw., alle ausgelöst durch die xmlns. Ohne dies ist eine XHTML-Datei nur ein Datenpaket in Markup-Knoten.

Warum wird XML dann eine Sprache genannt? Es beschreibt nichts, es interpretiert nichts, es ist einfach so.

Edit: Vielleicht hätte meine Frage breiter sein sollen. Da die Antwort derzeit "weil XML nach SGML benannt wurde, was nach GML usw. benannt wurde" lautet, sollte die Frage lauten, warum Auszeichnungssprachen (wie XML) als Sprachen bezeichnet werden.

Oh, und WRT die engen Abstimmungen: Nein, ich frage nicht nach dem X. Ich frage nach dem L!


128
Worauf gründen Sie Ihre Forderung, dass eine Sprache etwas "tun" muss? Ich sehe das in keiner der Definitionen auf dictionary.com .
kdgregory

10
So wie Suaheli nur verstanden wird, wenn beide es verstehen. Oder ein medizinischer Zeitschriftenartikel wird verstanden, wenn der Leser diesen Teil der Sprache versteht. Das ist nicht anders. Und die Leute erfinden die Definitionen.
Sami Kuhmonen

42
Auszeichnungssprache ist eine gebräuchliche Bezeichnung en.wikipedia.org/wiki/Markup_language
paparazzo

37
@MrLister: "Das sind menschliche Sprachen, keine Computersprachen" Eine Sprache ist eine Sprache. Im Extremfall benötigt sogar Englisch Kontextinformationen (welcher Dialekt verwendet wird), um eindeutig zu verstehen. Hält es nicht davon ab, eine Sprache zu sein. Ihre Frage hat einfach eine falsche Prämisse.
Leichtigkeitsrennen im Orbit

68
Sprachen machen keine Dinge, sie drücken Dinge aus und kommunizieren sie
Hagen von Eitzen

Antworten:


238

Die eigentliche Antwort ist, dass XML ein L im Namen hat, weil ein Typ namens Raymond L Orie in den 1970er Jahren zu den Designern der ersten "Auszeichnungssprache" bei IBM gehörte. Die Entwickler mussten einen Namen für die Sprache finden, also entschieden sie sich für GML, weil es die Initialen der drei Entwickler (Goldfarb, Mosher und Lorie) waren. Anschließend erstellten sie das Backronym Generalized Markup Language .

Diese wurde später als SGML ( Standardized General Markup Language ) standardisiert. Als XML erstellt wurde, wollten die Entwickler das ML-Postfix beibehalten, um die familiäre Beziehung zu SGML anzuzeigen, und sie fügten das X voran, weil sie es für cool hielten. (Auch wenn es eigentlich keinen Sinn ergibt - XML ​​ist eine Metasprache, mit der Sie erweiterbare Sprachen definieren können, XML selbst ist jedoch nicht wirklich erweiterbar.)

Zu Ihrer zweiten Frage, ob XML zu Recht als Sprache bezeichnet werden kann:

Jedes strukturierte Textformat (oder sogar Binärformat), das rechnerisch verarbeitet werden kann, kann als Sprache bezeichnet werden. Eine Sprache "tut" nichts als solche, aber manche Software kann Eingaben in die Sprache verarbeiten und etwas darauf basierend "tun".

Sie stellen fest, dass XML ein "Speicherformat" ist, das zwar zutrifft, ein textuelles Speicherformat jedoch als Sprache bezeichnet werden kann. Diese Begriffe schließen sich nicht gegenseitig aus.

Programmiersprachen sind eine Teilmenge von Sprachen. ZB HTML und CSS sind Sprachen, aber keine Programmiersprachen , während JavaScript eine echte Programmiersprache ist. Allerdings gibt es auch keine formale Definition der Programmiersprache , und es gibt eine große Grauzone von Sprachen, die abhängig von Ihrer Sichtweise entweder als Datenformate oder als Programmiersprachen bezeichnet werden können.

Vor diesem Hintergrund ist XML eindeutig eine Sprache. Nur keine Programmiersprache - obwohl es verwendet werden kann, um Programmiersprachen wie XSLT zu definieren.

Ihr Standpunkt zu Namespaces ist irrelevant. Namespaces sind eine optionale Funktion von XML und ändern die Semantik eines XML-Vokabulars nicht. Es ist nur erforderlich, Elementnamen zu disambiguieren, wenn das Format mehrere Vokabulare enthalten kann.


Edit: reinierpost wies darauf hin, dass du mit der Frage etwas anderes gemeint haben könntest als das, was ich verstanden habe. Vielleicht haben Sie gemeint, dass bestimmte Vokabulare wie XHTML, RSS, XSLT usw. Sprachen sind, weil sie Elemente und Attribute mit bestimmten Semantiken verknüpfen, aber der XML-Standard selbst definiert keine Semantik für bestimmte Elemente und Attribute und fühlt sich daher nicht wie ein " echte Sprache ".

Meine Antwort wäre, dass XML funktioniert sowohl Syntax und Semantik definieren, definiert sie es nur auf einer anderen Ebene. Zum Beispiel definiert es die Syntax von Elementen und Attributen sowie Regeln für deren Verarbeitung. XML ist eine "Metasprache", die immer noch eine Art Sprache ist (genau wie Metadaten immer noch Daten sind!). Als Beispiel ist EBNF auch eindeutig eine Sprache, aber ihr Zweck besteht darin, die Syntax anderer Sprachen zu definieren, so dass sie auch eine Metasprache ist.



19
@Schneemann: Eine "formale Sprache" entspricht nicht notwendigerweise einer Sprache, die im Computer normalerweise als Sprache bezeichnet wird. Beispielsweise muss eine "formale Sprache" nicht textuell sein - Maschinencode ist wie die meisten binären Formate und Protokolle eine formale Sprache. Daher würde ich nicht sagen, dass der Begriff "formale Sprache" die gleiche Bedeutung hat wie "Sprache" im Computer.
JacquesB

15
Mir ist keine Anforderung bekannt, dass eine Sprache textuell oder nicht textuell sein muss. Die Idee, einen Satz aus Terminals zu konstruieren, hat nichts mit einer willkürlichen Interpretation der Bits in diesen Terminals zu tun oder damit, welche Computertypen (auf Silizium- oder Kohlenstoffbasis) sie lesen können.

4
@NicolBolas: Guter Punkt, Maschinencode ist definitiv eine Sprache. Ich denke nur, dass es üblicher ist, Binärsprachen "Formate" zu nennen, z. B. sagen Sie das GIF-Format, nicht die GIF-Sprache.
JacquesB

3
@BenCottrell: Wäre es dann nicht ein Graph, da es vielleicht Schleifen gibt?
JacquesB

181

Weil es eine Sprache ist. Eine Auszeichnungssprache , keine Programmiersprache.

Beachten Sie, dass natürliche menschliche Sprachen wie Englisch und Spanisch auch nichts "tun". Tatsächlich "tun" C ++ und Java und dergleichen technisch nichts, bis sie in einen Compiler eingespeist werden und die Ausgabe ausgeführt wird. Sachen machen und eine Sprache sein sind weitgehend orthogonal zueinander.


43
Ersetzen Sie "Compiler" durch "Interpreter". Wenn sie einem Compiler zugeführt werden, "machen" sie auch nichts, sie übersetzen sie nur in eine andere Sprache, die wiederum nichts "macht". Alle Ausführung ist Interpretation. Manchmal ist der Interpreter extrem einfach und in Silizium implementiert. In diesem Fall nennen wir ihn eine "Ausführungseinheit", aber er ist immer noch ein Interpreter. </nitpick>Wie auch immer, gute Antwort!
Jörg W Mittag

8
@ JörgWMittag Guter Punkt. Da ich zufällig Sprachen ausgewählt habe, die normalerweise kompiliert werden, wurde "und die Ausgabe wird ausgeführt" hinzugefügt.
Ixrec

1
Eine erweiterbare Auszeichnungssprache, wenn Sie so wollen.
Doppelgreener

1
Ich würde argumentieren, dass menschliche Sprachen Dinge tun. Siehe Speech-Act-Theorie ...
Ray

2
Süße, süße Orthogonalität. Führen Sie die Sprache in einer anderen Algebra aus, und es werden ganz neue Aktionen ausgeführt. Theoretisch jedenfalls.
Kenogu Labz

103

Sei Σ eine nicht leere, endliche Menge von Symbolen, die als Alphabet bezeichnet wird . Dann ist Σ * die abzählbare unendliche Menge von endlichen Wörtern, die durch Verketten von null oder mehr Symbolen aus Σ gebildet werden können. Jede genau definierte Teilmenge L ⊆ ⊆ * ist eine Sprache .

Wenden wir dies auf XML an. Sein Alphabet ist der Unicode- Zeichensatz U , der nicht leer und endlich ist. Nicht jede Verkettung von null oder mehr Unicode-Zeichen ist ein wohlgeformtes XML-Dokument, beispielsweise die Zeichenfolge

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

ist eindeutig nicht. Die Teilmenge XML ⊂ U *, die wohlgeformte XML- Dokumente bildet, ist entscheidbar (oder „rekursiv“). Es gibt eine Maschine (Algorithmus oder Computerprogramm), die ein beliebiges Wort wU * als Eingabe verwendet und nach einer begrenzten Zeit entweder 1 ausgibt, wenn w ∈ XML ist, oder 0, wenn nicht. Ein solcher Algorithmus ist eine Subroutine jeder XML-Verarbeitungssoftware. Nicht alle Sprachen sind entscheidbar. Zum Beispiel ist die Menge der gültigen C-Programme, die in einer begrenzten Zeitspanne enden, nicht (dies wird als Stopp-Problem bezeichnet)). Wenn man eine neue Sprache entwirft, ist es wichtig zu entscheiden, ob sie so mächtig wie möglich sein soll oder ob die Ausdruckskraft zugunsten der Entscheidbarkeit eingeschränkt werden soll.

Einige Sprachen können mit Hilfe einer Grammatik definiert werden , die die Sprache hervorbringen soll . Eine Grammatik besteht aus

  • eine endliche Menge von Literalen (auch Terminalsymbole genannt ),
  • eine disjunkte endliche Menge von Variablen der Grammatik (auch nicht-terminale Symbole genannt),
  • ein unterschiedliches Startsymbol aus dem Satz von Variablen und
  • ein endliches Regelwerk (sogenannte Produktionen ), das bestimmte Arten von Ersetzungen zulässt.

Jedes Wort, das ausschließlich aus Literalen besteht und abgeleitet werden kann, indem man mit dem Startsymbol beginnt und dann die angegebenen Regeln anwendet, gehört zu der Sprache, die von der Grammatik erzeugt wird.

Mit der folgenden Grammatik (in eher informeller Notation) können Sie beispielsweise genau die Ganzzahlen in Dezimalnotation ableiten.

  1. Die Literale der Grammatik sind die Ziffern 1, 2, 3, 4, 5, 6, 7, 8, 9, und 0.
  2. Die Variablen sind die Symbole S und D .
  3. S ist das Startsymbol.
  4. Jedes Auftreten der Variablen S kann ersetzt werden
    • mit dem wörtlichen 0oder
    • durch eines der anderen Literale als 0durch die Variable D gefolgt .
  5. Jedes Auftreten der Variablen D kann ersetzt werden
    • von einem der Literale gefolgt von einer anderen Instanz der Variablen D oder
    • durch die leere Zeichenfolge.

So leiten wir ab 42:

S - (Regel 4 gilt, 2 nd Variante) → 4 D - (gilt Regel 5, 1 st Variante) → 42 D - (Regel 5 gilt, 2 nd Variante) → 42.

Je nachdem, wie ausgefeilte Regeln Sie in Ihrer Grammatik zulassen, sind unterschiedlich ausgefeilte Maschinen erforderlich, um zu beweisen, dass ein bestimmtes Wort tatsächlich von der Grammatik erzeugt werden kann. Das obige Beispiel ist eine reguläre Grammatik, die am einfachsten und am wenigsten mächtig ist. Die nächste mächtige Klasse von Grammatiken heißt kontextfrei . Diese Grammatiken sind auch sehr einfach zu überprüfen. XML kann durch eine kontextfreie Grammatik beschrieben werden (es sei denn, ich übersehe eine unbekannte Funktion, die mir nicht bekannt ist). Die Klassifikation der Grammatiken bildet die Chomsky-Hierarchie der Grammatiken (und damit der Sprachen). Jede Sprache, die durch eine Grammatik beschrieben werden kann, ist zumindest halbentscheidbar(oder "rekursiv aufzählbar"). Das heißt, es gibt eine Maschine, die angesichts eines Wortes, das tatsächlich zur Sprache gehört, einen Beweis herleitet, dass es von der Grammatik innerhalb einer begrenzten Zeit erzeugt werden kann, und niemals einen falschen Beweis ausgibt. Eine solche Maschine wird als Verifizierer bezeichnet . Beachten Sie, dass die Maschine möglicherweise nie anhält, wenn ein Wort eingegeben wird, das nicht zur Sprache gehört. Natürlich möchten wir, dass unsere Programmiersprachen durch weniger leistungsfähige Grammatiken beschrieben werden, damit ungültige Programme innerhalb einer begrenzten Zeit abgelehnt werden können.

Schemata sind eine Ergänzung zu XML, mit der sich die wohlgeformten Dokumente verfeinern lassen. Ein wohlgeformtes Dokument, das einem bestimmten Schema folgt, wird gemäß diesem Schema als gültig bezeichnet . Zum Beispiel die Zeichenfolge

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

ist ein wohlgeformtes XML-Dokument, aber kein gültiges XHTML-Dokument. Es gibt Schemata für XHTML , SVG , XSLT und was nicht. Die Schemaüberprüfung kann auch durch einen Algorithmus erfolgen, der bei jeder Eingabe nach einer begrenzten Anzahl von Schritten angehalten wird. Ein solches Programm wird Validator oder Validierungsparser genannt. Schemata werden durch sogenannte Scema-Definitionssprachen definiert , die eine Möglichkeit darstellen, Grammatiken formal zu definieren. XSD ist die offizielle Schemadefinitionssprache für XML und selbst XML-basiert. RELAX NG ist eine elegantere, viel einfachere und etwas weniger leistungsstarke Alternative zu XSD.

Da Sie Ihre eigenen Schemata definieren können, wird XML als erweiterbare Sprache bezeichnet. Dies ist der Ursprung des "X" in "XML".

Sie können einen Regelsatz definieren, der XML-Dokumenten eine Interpretation als Beschreibung von Computerprogrammen gibt. Das bereits erwähnte XSLT ist ein Beispiel für eine solche mit XML erstellte Programmiersprache. Im Allgemeinen können Sie den abstrakten Syntaxbaum fast jeder Programmiersprache ganz natürlich in XML serialisieren, wenn Sie dies möchten.


7
@Giorgio: In der Mathematik ist "gut definiert" größtenteils nur ein Verstärker: Alles, was mathematisch existiert, ist bereits gut definiert.
Kevin

9
@Giorgio Mit "gut definiert" meine ich, dass es ein formales Prädikat gibt, das angibt, ob ein Element zur Menge gehört oder nicht. Dieses Prädikat ist im Allgemeinen nicht berechenbar, muss jedoch eindeutig und widerspruchsfrei angegeben werden. Sonst können schlimme Dinge passieren . „Die Saitenpaare ( w , M ), bei denen M die kleinste Beschreibung einer Turing-Maschine ist, die w ausgibt und dann anhält“ ist ein genau definiertes, aber nicht berechenbares Prädikat (siehe Kolmogorov-Komplexität ). …
5gon12eder

2
@ 5gon12eder: Diese Menge existiert unter ZFC nicht (weil das Axiomschema der Trennung nicht leistungsfähig genug ist, um es zu beschreiben); Wenn Sie eine andere Mengenlehre verwenden, sollten Sie diese spezifizieren.
Kevin

5
@ 5gon12eder: "Die Menge mit allen Zeichenfolgen, die nicht in der Menge enthalten sind" ist nicht vorhanden. Der Begriff "genau definiert" ist ironischerweise nicht genau definiert.
Kevin

3
Die wohlgeformte Eigenschaft oder Validierung wird von einer Grammatik ausgeführt . Diese Antwort war perfekt, wenn Sie das erwähnt hätten.
Thibault D.

31

In der Informatik ist die formale Sprache nur ein Satz von Zeichenfolgen, die normalerweise unendlich sind und häufig mithilfe von Regeln beschrieben werden (zwei gebräuchliche Versionen dieser Regeln sind reguläre Ausdrücke und formale Grammatiken ).

Beachten Sie, dass dies bedeutet, dass eine Sprache nur Syntax benötigt . Die Sprache muss nicht beschreiben, was jede gültige Zeichenfolge bedeutet (das heißt Semantik ).

Dies bedeutet nun, dass Programmiersprachen formale Sprachen sind, die auch eine Semantik haben, die einige Berechnungen beschreibt. Und zum Beispiel ist XHTML eine formale Sprache, deren Semantik (grob und informell) beschreibt, wie ein Hypertextdokument aussieht und sich verhält.

XML ist immer noch eine Sprache, obwohl es selbst keine Semantik hat (aber viele von XML abgeleitete Sprachen, wie XHTML und XAML).

Binärformate sind technisch gesehen ebenfalls Sprachen, werden aber nicht so genannt. Der Begriff "Sprache" ist für vom Menschen lesbare Formate reserviert.


10
@ MrLister Weil sie nicht für Menschen lesbar sind. Wenn sie nicht für Menschen lesbar sind, bezeichnen wir sie stattdessen als Formate oder Datenformate .
Mason Wheeler

3
@JamesSnell Natürlich nicht zu verwechseln mit der anderen ML-Sprachfamilie. Yay für überfüllte Akronyme!
Mason Wheeler

3
Wenn man formale Tools verwendet, um einen Parser (oder insbesondere einen Validator) für JFIF usw. zu erstellen, können die Ingenieure dies tatsächlich als "Sprache" bezeichnen. Eher aber als "Grammatik".
JDługosz

3
@MrLister: Nun, sie sind Sprachen, aber da sie wiederverwendbare Datenstrukturen definieren, haben sie einen speziellen Namen: Formate . Aber ja, das sind auch Sprachen.
Leichtigkeitsrennen im Orbit

4
@MrLister: Die Benennung eines Formats ist eher eine Frage des Marketings. Die XML-Leute nannten XML für XML, weil "* ML" eine familiäre Beziehung zum Vorgängerformat wie GML und SGML angibt und weil sie dachten, dass es mit einem X in der Front cool aussähe. Und GML wurde GML genannt, weil es eine verallgemeinerte Auszeichnungssprache war, aber auch, weil es die Initialen der drei Sprachdesigner waren. Im Grunde genommen ist das L in XML deshalb so, weil ein Typ namens Raymond L Orie zu den Designern der ersten Auszeichnungssprache gehörte.
JacquesB

12

Eine Sprache ist eine Methode zur Übermittlung von Informationen.

Eine Programmiersprache ist eine Methode zur Übermittlung von Algorithmen.

Eine Auszeichnungssprache wie XML ist eine Sprache für die Übermittlung von Daten.


... und diese Daten können durchaus eine Beschreibung eines Algorithmus sein.
Luaan

@Luaan ... und eine Programmiersprache können auch zur Übermittlung von Daten missbraucht werden. Wie zum Beispiel bei JSON.
Philipp

2
Sie können sogar wiederkehren. Ich habe NAnt-Skripte (eine XML-basierte Sprache) gesehen, die C # -Code enthielten, der nur zur Datenspeicherung verwendet wurde. Verwenden von Zeichenfolgenliteralen, die XML enthalten. Ja, so etwas bringt erwachsene Männer zum Weinen: P
Luaan

2

XML ist eine Metasprache. Sie verwenden es, um bestimmte Sprachen zu definieren. Sprachen tun nie etwas, sie erlauben uns nur, Dinge auszudrücken. Es ist auch nicht wahr, dass XML eine "Speichersprache" ist. Im Gegenteil. Sie können XML-Dokumente nach Belieben speichern. XML wird besser als Übertragungssprache angesehen. PS. Wenn Sie nicht glauben, dass XML etwas "bewirkt", müssen Sie erklären, wie viele Systeme (z. B. Anlegestellen) XML als (schlechte) Programmiersprache verwenden. Es ist ein bedauerlicher Missbrauch von XML, aber es gibt ihn in der Natur und das ist nur eines von vielen Beispielen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.