Sprachen in JavaScript [] (Sprachen in JavaScript), Lektion, Seite 723406
https://www.purl.org/stefan_ram/pub/sprachen_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

Sprachen in JavaScript 

Beispieldokument für diese Lektion
userpage.fu-berlin.de/~ram/pub/xhtml_jf47ht81Ht/main

Sprachen

Wir haben schon gesehen, daß bestimmte Seiten  die Bedeutung bestimmter Wörter  beschreiben.

developer.mozilla.org/en/docs/Web/API/Node
nodeType
Art des Kontexts als Zahl (1=Element, 3=Text, 8 = Kommentar, 9=Dokument)
nodeName
Der Name des Typs des Kontexts
developer.mozilla.org/en/docs/Web/API/ParentNode
firstElementChild
Das erste im Kontext enthaltene Element

Wir können sagen, daß solch eine Seite einem Wort eine Bedeutung gibt und nennen solche Seiten daher auch Sprachen, um etwas unabhängiger von der Aufteilung der Informationen auf Seiten zu werden. Bei einer Sprache kommt es nicht mehr auf die Aufteilung auf Seiten an, eine Sprache ist eine benannte Liste von Wörtern mit jeweils einer Erklärung zu jedem Wort.

Die Sprache »Node«
nodeType
Art des Kontexts als Zahl (1=Element, 3=Text, 8 = Kommentar, 9=Dokument)
nodeName
Der Name des Typs des Kontexts
Die Sprache »ParentNode«
firstElementChild
Das erste im Kontext enthaltene Element

Etymologie Der Begriff „Sprache“ kommt daher, daß eine Sprache etwas ist, daß einem Wort seine Bedeutung gibt. Beispielsweise gibt die englische Sprache dem Wort “locker ” die Bedeutung „Schließfach“, und die deutsche „lose“.

Die Sprachen dienen zunächst zur Information von Programmierern, also von Menschen, über die Bedeutung von Wörtern. Sie können nicht  unbedingt auch in einem JavaScript -Ausdruck verwendet werden (obwohl später zur Veranschaulichung einige Beispiele gezeigt werden werden, in denen Sprachen teilweise in einem JavaScript -Ausdruck verwendet werden werden). Sprachen in dem hier vorgestellten Sinne sind aber nicht das gleiche wie „Programmiersprachen“ (wie JavaScript ) oder „natürliche Sprachen“ (wie Deutsch).

Quellen für die einzelnen Sprachen

Die folgende Quelle ist die maßgebliche Beschreibung des DOM  und der Sprachen »Node« und »ParentNode« einschließlich der Klausel zu »nodeType«, »nodeName« und »firstElementChild«. Diese Beschreibung sollte für alle modernen Browser gelten, aber es könnte sein, daß es Browser gibt, die sie nicht richtig umgesetzen.

Quelle
http://www.w3.org/TR/dom/

Die folgende Quelle ist die Beschreibung des Lemmas »Node« vom Hersteller des Browsers Firefox.

Quelle
http://developer.mozilla.org/en/docs/Web/API/Node/nodeType

Obwohl ein Browser im Idealfall alles aus der Seite »http://www.w3.org/TR/dom/« genau umsetzen sollte, ist es doch möglich, daß er manchmal davon abweicht. Deswegen muß man, um das DOM  eines speziellen Browsers programmieren zu können, manchmal auch noch die Dokumentation des Herstellers des Browsers  heranziehen.

Im DOM  gibt es neben »nodeType«, »nodeName« und »firstElementChild« auch noch viele andere interessante Einträge, von denen einige im weiteren Verlauf dieses Kurses noch vorgestellt werden.

Das folgenden Begriffssystem zur Beschreibung von Teilen der Dokumentation wird in den zehner Jahren entwickelt. Während dieser Entwicklung ist es möglich, daß die darin vorkommenden Begriffe („Lemma“, „Oberfläche“, „Proklamation“, „Prosa“, „Klausel“ und so weiter) in verschiedenen Quellen noch nicht einheitlich verwendet werden.

Klauseln

Den Teil einer Sprache, welcher die Bedeutung eines bestimmten Wortes festlegt, nennen wir auch eine Klausel. Eine Sprache ist dann eine Liste von Klauseln, weswegen wir sie auch manchmal als eine Klauselsprache  bezeichnen.

Die Klausel zu »nodeType« aus der Sprache »Node«
nodeType
Art des Kontexts als Zahl (1=Element, 3=Text, 8 = Kommentar, 9=Dokument)

Etymologie Der Begriff „Klausel“ kommt daher, daß in der Informatik solche Angaben auch als „Kontrakt“ bezeichnet werden. Der Begriff „Kontrakt“ konnte hier aber nicht verwendet werden, da ein spezieller Begriff für den Kontrakt zu einem einzelnen Wort  benötigt wurde. Da Teile eines Kontraktes (also eines Vertrags) oft als „Klauseln“ bezeichnet werden, wurde hier jener Begriff gewählt.

Lemmata

Die einzelnen Wörter  einer Sprache nennen wir auch Lemmata  der Sprache.

Beispielsweise ist »nodeType« ein Lemma der Sprache »Node«.

Lemmata und ihre Sprachen

Lemma Sprache

nodeName Node
nodeType Node
firstElementChild ParentNode

Man kann Sprachen entweder an Hand der Dokumentation von Lemmata unterscheiden, oder auch daran, daß Sprachen in der Regel mit einem großen  Anfangsbuchstaben geschrieben werden und Lemmata mit einem kleinen.

Etymologie Der Begriff „Lemma“ kommt hier daher, daß die einzelnen Schlagwörter eines Wörterbuchs ebenfalls „Lemmata“ (Plural) genannt werden.

Proklamationen
Das Nummernzeichen »#«

Da ein Lemma in verschiedenen Sprachen vorkommen könnte, ist es manchmal hilfreich, dem Lemma seine Sprache voranzustellen, um deutlich zu machen, was genau gemeint ist. So kann man dann das Lemma »nodeType« der Sprache »Node« auch als »Node#nodeType« schreiben. Das Nummernzeichen »#« trennt dabei Sprache und Lemma.

Das Nummernzeichen »#« dient in dieser Notation zur Verständigung von Menschen untereinander. Es kann so nicht in einem JavaScript -Ausdruck verwendet werden.

Das Größer-Zeichen »>« zwischen Sprache und Lemma

Mit dem Größer-Zeichen zwischen einer Sprache und einem Lemma drücken wir aus, daß das Lemma von einer Klause der Sprache beschrieben wird.

So bedeutet »Node > nodeType«, daß die Sprache »Node« das Lemma »nodeType« beschreibt.

Beziehungen

Node > nodeName

Node > nodeType

ParentNode > firstElementChild

Erklärung einiger Symbole
>  Wenn der linksstehende Name eine Sprache bezeichnet, und der rechtsstehende Name ein Lemma, so bedeutet dies, daß das Lemma in der Sprache enthalten ist, das heißt, daß es eine Klausel in der Sprache gibt, welche dieses Lemma beschreibt.

Das Größer-Zeichen »>« dient in dieser Notation zur Verständigung von Menschen untereinander. Es kann so nicht in einem JavaScript -Ausdruck verwendet werden.

Implementation von Proklamationen

Wir sagen, daß ein JavaScript -Verzeichnisses eine bestimmte Proklamation implementiere, wenn das Verzeichnis die Proklamation als Eintrag enthält.

Ein Verzeichnis, das eine Proklamation enthält, bezeichnen wir auch als eine Implementation  jener Proklamation.

Beispielsweise implementiert das Verzeichnis »Ⓖ.document« die Proklamation »nodeType«.

Implementation von Klauseln

Wir sagen, daß ein JavaScript -Verzeichnisses eine bestimmte Klausel implementiere, wenn jenes Verzeichnis das Lemma der Klausel als Eintrag enthält, und auch alles in der Klausel über das Lemma ausgesagte auf den Eintrag zutrifft.

Ein Verzeichnis, das ein Lemma enthält, bezeichnen wir auch als eine Implementation  jener Klausel.

Beispielsweise implementiert das Verzeichnis »Ⓖ.document« die Klausel der Sprache »Node« zum Lemma »nodeType«. Denn jenes Verzeichnis enthält nicht nur den Eintrag »nodeType«, sondern auch die Aussagen der Klausel treffen auf jenen Eintrag zu. Beispielsweise besagt, die Klausel, daß das Lemma für ein Zahl steht, und der Eintrag steht auch tatsächlich für eine Zahl.

Solch ein Implementation, bei der auch alle Aussagen der Klausel umgesetzt werden, nennen wir auch eine semantische Implementation. Also eine Implementation, welche auch die Bedeutung, welche die Klausel einem Lemma verleiht, berücksichtig. Im Vergleich dazu nennen wir das bloße Vorhandensein des Lemmas auch eine formale Implementation.

Klausel
i
Eine Zahl zwischen 0 und 9.
Auswertung mit einem Verzeichnis v, das überhaupt keine Implementation der Klausel darstellt
v.i
undefined
Auswertung mit einer nur formalen Implementation f
f.i
22
Auswertung mit einer semantischen Implementation s
s.i
7

Implementation einer Sprache

Wir sagen, daß ein Verzeichnis eine bestimmte Sprache spreche, verstehe  oder implementiere, wenn alle  Klauseln jener Sprache vom Verzeichnis implementiert werden.

Solch ein Verzeichnis nennen wir dann auch eine Implementation  jener Sprache.

Beispielsweise ist das Verzeichnis »Ⓖ.document« eine Implementation der Sprachen »Node«.

Dies bedeutet, daß alle Beschreibungen von der Seite »Node« auf die entsprechenden Einträge von »Ⓖ.document« zutreffen.

Die Seite »Node«
developer.mozilla.org/en/docs/Web/API/Node

Dies macht es auch deutlich, was der Nutzen von Sprachen ist.

Der Sinn von Sprachen besteht darin, Einträge von Verzeichnissen zu beschreiben.

Es ist aber nicht so, daß es zu jedem Verzeichnis immer eine Sprache gibt. Vielmehr kann ein Verzeichnis durch mehrere Sprachen beschrieben werden oder umgekehrt kann eine Sprache mehrere Verzeichnisse beschreiben. Dies erlaubt es einerseits Verzeichnisse übersichtlich durch eine Zerlegung in verschiedene Sprachen zu untergliedern und andererseits eine Sprache in mehreren verschiedenen Verzeichnissen ökonomisch wiederverwenden zu können.

Formale und semantische Implementation einer Sprache

Wir sprechen von einer formalen Implementation  einer Sprache, wenn ein Verzeichnis alle Lemmata einer Sprache enthält, es aber offengelassen werden soll, ob auch alle Aussagen aus den Klauseln erfüllt werden.

Wir sprechen von einer semantischen Implementation  einer Sprache, wenn betont werden soll, daß auch alle Aussagen aus den Klauseln der Sprache erfüllt werden.

Wenn nur das Wort „Implementation“ verwendet wird, so kann in der Regel angenommen werden, daß damit eine semantische Implementation  gemeint ist.

Das Größer-Zeichen »>« zwischen Verzeichnis und Sprache

Wir schreiben die Tatsache, daß das Verzeichnis »Ⓖ.document« die Sprachen »Node« implementiert auch kurz mit einem Größer-Zeichen »>« als »Ⓖ.document. > Node«.

Eine Implementationsrelation
.document. > Node
Erklärung einiger Symbole
>  Wenn der linksstehende Name für ein Verzeichnis und der rechtstehende Name für ein Sprache steht, dann bedeutet das Größer-Zeichen »>«, daß jenes Verzeichnis jene Sprache implementiert. Das heißt alle Lemmata der Sprache sind auch als Einträge im Verzeichnis vorhanden, und ihre Bedeutung ist wie durch die entsprechenden Klauseln der Sprache festgelegt.

Wir können die bisherigen Informationen auch in einer Liste von Beziehungen zusammenfassen.

Beziehungen

.document. > Node > nodeName

.document. > Node > nodeType

.document. > ParentNode > firstElementChild

Erklärung einiger Symbole
>  Wenn der linksstehende Name für ein Verzeichnis und der rechtstehende Name für ein Sprache steht, dann bedeutet das Größer-Zeichen »>«, daß jenes Verzeichnis jene Sprache implementiert. Das heißt alle Lemmata der Sprache sind auch als Einträge im Verzeichnis vorhanden, und ihre Bedeutung ist wie durch die entsprechenden Klauseln der Sprache festgelegt.
>  Wenn der linksstehende Name eine Sprache bezeichnet, und der rechtsstehende Name ein Lemma, so bedeutet dies, daß das Lemma in der Sprache enthalten ist, das heißt, daß es eine Klausel in der Sprache gibt, welche dieses Lemma beschreibt.

Das Größer-Zeichen »>« dient in dieser Notation zur Verständigung von Menschen untereinander. Es kann so nicht in einem JavaScript -Ausdruck verwendet werden.

Menüs

Eine Zusammstellung von Proklamationen nennen wir auch ein Menü.

Der Unterschied zwischen einer Gruppe  und einer Sprache  besteht darin, daß das Menü nur  die Proklamationen  enthält, aber keine Prosa. Eine Gruppe listet also die einzelnen Proklamationen nur auf, ohne ihnen – wie eine Sprache – auch eine Bedeutung zu verleihen.

Prosatexte werden zur Kommunikation von Menschen untereinander verwendet und sind in einer natürlichen Sprache wie Deutsch oder Englisch verfaßt.

Computer können Prosa nicht verstehen.

Deswegen „sehen“ Computer von einer Sprache nur bestimmte Teile, die sie verstehenden können, diese Teile bilden das Menü.

Vieles, was hier für Sprachen gesagt wurde, gilt entsprechend auch für Menüs, wenn man sich vorstellt, daß die Prosatexte bei einem Menü alle leer sind.

Die Gruppe »Node«

nodeType

nodeName

Die Sprache »Node«
nodeType
Art des Kontexts als Zahl (1=Element, 3=Text, 8 = Kommentar, 9=Dokument)
nodeName
Der Name des Typs des Kontexts

Implementation von Menüs durch Verzeichnisse

Wir sagen, daß ein Verzeichnisse ein Menü implementiert, wenn alle Proklamationen des Menüse als Proklamationen von Einträgen in dem Verzeichnis vorkommen.

Alles hier für Sprachen Gesagte soll entsprechend auch für Menüs gelten, nur daß an Stelle der Klauseln lediglich die Proklamation verwendet werden.

JavaScript -Implementationen

Der hier vorgestellte Begriff der Implementation eines Lemmas, einer Klausel oder einer Sprache ist von einer JavaScript -Implementation zu unterscheiden.

Eine JavaScript-Implementation ist eine Maschine, die JavaScript -Ausdrücke auswerten kann.

Das Wort „Implementation“ bedeutet in jedem Falle soviel wie „Verwirklichung“ oder „Umsetzung“. Man kann einen Menschen, der Deutsch sprechen kann, beispielsweise als eine Implementation der Sprache Deutsch ansehen.

»instanceof« zwischen Verzeichnissen und Gruppen

Einige Gruppen sind auch der JavaScript -Implementation bekannt, so daß man mit Hilfe von JavaScript  zumindest ausdrücken kann, daß ein Verzeichnis eine Gruppe implementiert.

Auswertung
this.document instanceof Node
true

»this.document instanceof Node« bedeutet, daß das Verzeichnis »this.document« die Gruppe »Node« implementiert. Das Ergebnis »true« bedeutet, daß diese Aussage wahr ist.

Jedoch kann man nicht alle Implementationsrelationen auf diese Weise auch durch einen JavaScript -Ausdruck ausdrücken.

Beispielsweise implementiert das Verzeichnis »this.document« auch die Gruppe »ParentNode«, doch ist diese Gruppe JavaScript -Implementationen nicht bekannt. Obwohl »this.document instanceof ParentNode« ebenfalls »true« sein sollte, kann dies so nicht mit JavaScript -Implementationen ausgewertet werden.

Teilsprache

Wir haben bisher gelernt, daß »nodeType« und »firstElementChild« Lemmata zweier Sprachen (»Node« beziehungsweise »ParentNode«) sind, die beide von »this.document« implementiert werden.

Diese beiden Lemmata finden sich aber noch in einer anderen Sprache wieder, nämlich der Sprache »Document«, wo sie aber in genau derselben Weise beschrieben werden wie in »Node« beziehungsweise »ParentNode«.

Dies ist kein Zufall, sondern liegt daran, daß alle  Klauseln von »Node« und »ParentNode« auch Teil der Sprache »Document« sind.

Wenn alle Klauseln einer Sprache auch Klauseln einer anderen Sprache sind, dann sagen wir, daß die zweite Sprache die erste umfaßt  oder inkludiert, oder daß die erste eine Teilsprache  der zweiten ist. Wir nennen die Beziehung zwischen zweien solcher Sprachen auch eine Inklusionsrelation.

Die Sprachen »Node« und »ParentNode« werden also von der Sprache »Document« umfaßt, sie sind Teilsprachen von Document.

Tatsächlich implementiert »Ⓖ.document« zunächst erst einmal die fast gleichnamige Sprache »Document«. Diese umfaßt dann ihrerseits die Sprachen »Node« und »ParentNode«.

Auswertung
this.document instanceof Document
true

Das Größer-Zeichen »>« zwischen zwei Sprachen

Mit dem Größer-Zeichen »>« zwischen zwei Sprachen drücken wir aus, daß die linke Sprache die rechte umfaßt.

»Document > Node« bedeutet beispielsweise, daß die Sprache »Document« die Sprache »Node« umfaßt, also, daß alle  Klauseln der Sprache »Node« auch zur Sprache »Document« gehören.

Beziehungen zwischen Sprachen
Document > NodeDocument« umfaßt »Node«)
Document > ParentNodeDocument« umfaßt »ParentNode«)
Erklärung einiger Symbole
>  Wenn der rechtsstehende Name und der linksstehende Name jeweils eine Sprache bezeichnen, dann ist die rechtstehende Sprache eine Teilsprache der linksstehenden. Das heißt alle Klauseln der rechtsstehenden Sprache gehören auch zur linksstehenden. Da die linksstehende Sprache aber noch mehr Klauseln enthalten kann ist sie sozusagen „größer“ als die rechtstehende.

Auch hier können statt Sprachen auch Gruppen verwendet werden.

Das Dokument »Ⓖ.document« implementiert die Sprache »Document«, welche dann ihrerseits die beiden Sprachen »Node« und »ParentNode« umfaßt, die ihrerseits dann die Lemmata »nodeName«, »nodeType« und »firstElementChild« enthalten. Dies ist der Grund dafür, daß das Dokument »Ⓖ.document« die Einträge »nodeName«, »nodeType« und »firstElementChild« enthält, und die Beschreibungen der einschlägigen Klauseln der erwähnten Sprachen auf diese Einträge zutreffen.

Das Größer-Zeichen »>« dient in dieser Notation zur Verständigung von Menschen untereinander. Es kann so nicht in einem JavaScript -Ausdruck verwendet werden.

Das Größer-Zeichen »>«

Wir können die bisherigen Informationen auch in einer Liste von Beziehungen zusammenfassen.

Beziehungen

Verzeichnis "Ⓖ.document." > Sprache "Document" > Sprache "Node" > Lemma "nodeName"

Verzeichnis "Ⓖ.document." > Sprache "Document" > Sprache "Node" > Lemma "nodeType"

Verzeichnis "Ⓖ.document." > Sprache "Document" > Sprache "ParentNode" > Lemma "firstElementChild"

Erklärung einiger Symbole
>  Wenn der linksstehende Name für ein Verzeichnis und der rechtstehende Name für ein Sprache steht, dann bedeutet das Größer-Zeichen »>«, daß jenes Verzeichnis jene Sprache implementiert. Das heißt alle Lemmata der Sprache sind auch als Einträge im Verzeichnis vorhanden, und ihre Bedeutung ist wie durch die entsprechenden Klauseln der Sprache festgelegt.
>  Wenn der rechtsstehende Name und der linksstehende Name jeweils eine Sprache bezeichnen, dann ist die rechtstehende Sprache eine Teilmenge der linksstehenden. Das heißt alle Klauseln der rechtsstehenden Sprache gehören auch zur linksstehenden. Da die linksstehende Sprache aber noch mehr Klauseln enthalten kann ist sie sozusagen „größer“ als die rechtstehende.
>  Wenn der linksstehende Name eine Sprache bezeichnet, und der rechtsstehende Name ein Lemma, so bedeutet dies, daß das Lemma in der Sprache enthalten ist, das heißt, daß es eine Klausel in der Sprache gibt, welche dieses Lemma beschreibt.

Man kann das Größer-Zeichen »>« in solchen Diagrammen in der Regel als „enthält“ aussprechen.

Normalerweise verwenden wir aber keine Gattungsbezeichnungen in den Darstellung von Beziehungen und schreiben sie wie folgt.

Beziehungen

.document. > Document > Node > nodeName

.document. > Document > Node > nodeType

.document. > Document > ParentNode > firstElementChild

Dies könnte man auch folgendermaßen schreiben, um Wiederholungen zu vermeiden.

Beziehungen

Verzeichnis Sprache Sprache Lemma

this.document ---> Document ---.---> Node ---.-----> nodeName
| |
| '-----> nodeType
|
'---> ParentNode ---> firstElementChild

Das Größer-Zeichen »>« dient in dieser Notation zur Verständigung von Menschen untereinander. Es kann so nicht in einem JavaScript -Ausdruck verwendet werden.

Das folgende Diagramm zeigt eine Vielzahl von Inklusionen an.

Inklusionsdiagramm
Document         > Node
Element > Node
DocumentType > Node
DocumentFragment > Node
CharacterData > Node

Zur Vereinfachung soll das Komma in dem folgenden Diagramm bedeuten, daß die Beziehungen für jeden der durch ein Komma getrennten Namen gelten sollen. Das folgende Diagramm kann also als eine Abkürzung des voranstehenden Diagramms verwendet werden.

Inklusionsdiagramm
Document, Element, DocumentType, DocumentFragment, CharacterData > Node

Sprachen als Untergliederungen von Verzeichnissen

Man kann sich Sprachen auch als Untergliederungen eines Verzeichnisses vorstellen, dessen Einträge inhaltlich danach zusammengefaßt werden können, ob sie zu einer Sprache gehören und, wenn ja, zu welcher. Eine Sprache eines Verzeichnisses kann man daher ähnlich wie ein Kapitel eines Buches als eine Untergliederung ansehen, welche Einträge (als Lemmata der Sprache) zusammenfaßt, die inhaltlich zusammengehören.

Damit helfen Sprachen dabei, die vielen Einträge eines Verzeichnisses übersichtlich zu untergliedern.

Das Verzeichnis »Ⓖ.document«
  this.document                      
.-----------------------------------.
| Sprache "Node" |
| - nodeName |
| - nodeType |
| |
|-----------------------------------|
| Sprache "ParentNode" |
| - firstElementChild |
| |
|-----------------------------------|
| ... |
'-----------------------------------'

Neben den Einträgen, die Lemmata einer Sprache sind, können Verzeichnisse auch noch zusätzliche  Einträge enthalten, die kein  Lemma einer Sprache sind.

Standardsprachen

Eine Sprache kann in mehreren  verschiedenen  Verzeichnissen vorkommen. Wenn man diese Sprache schon kennt, dann muß man sie nicht noch einmal neu lernen, wenn man ihr in einem anderen Verzeichnis wiederbegegnet. Dies ist ein Vorteil der Wiederverwendung  von Sprachen in mehreren verschiedenen Verzeichnissen.

Eine solche Sprache, die von mehreren Verzeichnissen implementiert werden kann, nennen wir auch ein Standardsprache.

Beispielsweise sind »this.document« und »this.document.firstElementChild« in der Regel zwei verschiedene  Verzeichnisse. Sie sprechen aber beide dieselbe Sprache »Node«. Wenn man diese Sprache schon kennt, braucht man sie also für das zweite Verzeichnis nicht erneut zu erlernen. (Diese beiden Verzeichnisse könnten sich aber noch unterscheiden, es ist beispielsweise möglich, daß »this.document.firstElementChild« noch eine andere Sprache spricht, welche »this.document« nicht  spricht.)

Zwei verschiedene Verzeichnisse mit einer gemeinsamen Sprache
  this.document                             this.document.firstElementChild
.-----------------------------------. .-----------------------------------.
| Sprache "Node" | | Sprache "Node" |
| - nodeName | | - nodeName |
| - nodeType | | - nodeType |
| | | |
|-----------------------------------| |-----------------------------------|
| ... | | ... |
| | | |
| | | |
'-----------------------------------' '-----------------------------------'

Sprachen im DOM4 finden und verstehen

Das DOM4 (»http://www.w3.org/TR/2015/REC-dom-20151119/«) schreibt umfaßte Sprachen manchmal mit einem von Leerzeichen umgebenen Doppelpunkt »:« getrennt hinter die Namen der Sprachen.

DOM4 (»http://www.w3.org/TR/2015/REC-dom-20151119/«)
4.5 Interface Document
Document : Node

Im DOM4 bedeutet »Document : Node«, daß die Sprache »Document« die Sprache »Node« umfaßt. (Jede Klausel von »Node« wird damit zu einer Klausel von »Document«.)

Das DOM4 (»http://www.w3.org/TR/2015/REC-dom-20151119/«) werden umfaßte Sprachen manchmal aber auch mit dem Worte »implements« getrennt hinter die Namen der umfassenden Sprachen geschrieben.

DOM4 (»http://www.w3.org/TR/2015/REC-dom-20151119/«)
4.2.3 Interface ParentNode
Document implements ParentNode;

Im DOM4 bedeutet »Document implements ParentNode«, daß die Sprache »Document« die Sprache »ParentNode« umfaßt. (Jede Klausel von »ParentNode« wird damit zu einer Klausel von »Document«.)

Auch das MDN hat Quellen zu diesen Sprachen, die besonders für Firefox -Nutzer relevant sind.

Die Sprache »Document«
MDN Document
http://developer.mozilla.org/en-US/docs/Web/API/Document
Die Sprache »Node«
MDN Node
http://developer.mozilla.org/en-US/docs/Web/API/Node
Der Eintrag »nodeType«
MDN NodeType
http://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType

Die Bedeutung von Sprachen und ihrer Inklusion

Wir können uns Sprachen auch anschaulich vorstellen:

Document 
Dokument
Diese Sprache wird von einem Dokumentelement gesprochen. Ein Verzeichnis, das diese Sprache spricht, steht für das ganze Dokument.
Node 
Teil
Diese Sprache wird von einem beliebigen Teil des Dokuments gesprochen. Ein Verzeichnis, das diese Sprache spricht, steht für einen Teil eines Dokumentes.
ParentNode 
Behälter
Diese Sprache wird von einem Teil des Dokuments gesprochen, der andere Teile enthalten kann. Ein Verzeichnis, das diese Sprache spricht, steht für einen Teil eines Dokumentes, der andere Dokumentteile enthalten kann.

Dies veranschaulicht auch die Mehrsprachigkeit von Verzeichnissen und die Teilsprachen:

Wir können uns die Inklusionrelationen von Sprachen auch anschaulich vorstellen:

Document > Node
Jedes Dokument ist ein  Teil (»Node«). (Das gesamte Dokument gilt auch als Teil seiner selbst.)
Document > ParentNode
Jedes Dokument ist ein  Behälter (»ParentNode«). (Das Dokument kann Teile enthalten.)

Man kann das Größer-Zeichen »>« zwischen zwei Sprachen also als „ist ein“ lesen.

Wir werden uns nun noch weitere JavaScript -Ausdrücke ansehen, die solche anschaulichen Bedeutungen von Sprachen noch weiter illustrieren werden.

Der Auszeichnungstyp »html«

Das Verzeichnis »Ⓖ.document.firstElementChild« repräsentiert den wesentlichen Inhalt des gesamten Dokuments, also das html-Element.

document
<!DOCTYPE HTML>
<
html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<meta charset="UTF-8" /><title>Hallo</title><style type="text/css">
...
Das Dokument als Baum (Stammbaumdarstellung) von Elementen
                                document
|
| firstElementChild
|
html
|
|
|
.-------------'-------------.
| |
head body
| |
.---------:---------. .--------'--------.
| | | | |
meta title style p pre
|
code
|
script

Das Ergebnis der folgenden Auswertung bedeutet, daß der Typ des ersten im Dokument enthaltenen Elementes gleich »html« ist.

Falls das Dokument vom Browser als »HTML5« (im Gegensatz zu »XHTML5«) interpretiert wird, ergibt die Auswertung statt dessen »HTML« in Großbuchstaben.

Auswertung
this.document.firstElementChild.nodeName
"html"

»Ⓖ.document.firstElementChild«, also das html-Element, versteht eine Sprache namens »HTMLHtmlElement«, welche die Sprache »HTMLElement« umfaßt, welche die Sprache »Element« umfaßt, welche die Sprache »Node« umfaßt, welche ein Lemma namens »nodeName« enthält.

Inklusionsdiagramm
Ⓖ.document.firstElementChild > HTMLHtmlElement > HTMLElement > Element > Node > nodeName

Zur Bedeutung der verschiedenen im Inklusionsdiagramm verwendeten Bezeichnungen:

HTMLHtmlElement
Die meisten Elemente verstehen zunächst eine Sprache, deren Bezeichnung sich durch Einsetzen ihres Elementtyps in »HTMLElement« ergibt. Dabei wird nur der erste Buchstabe des Elementtyps groß geschrieben.
Da es sich hier um ein Element mit dem Typ »html« handelt, ist die primäre Sprache dieses Verzeichnisses zunächst die Sprache »HTMLHtmlElement«.
HTMLElement
Die Sprachen, mit Namen wie »HTMLElement« umfassen in der Regel die Sprache »HTMLElement«.
Sprachen mit Namen wie »HTMLElement« enthalten Lemmata, die nur für den speziellen Elementtyp »…« sinnvoll sind.
Die Sprache »HTMLElement« enthält dann die Lemmata, welche für alle  Elementtypen, die in HTML  vorkommen, sinnvoll sind.
»HTMLElement« bedeutet nicht  „Element mit dem Elementtyp »html«“ (das wäre »HTMLHtmlElement«), sondern „Element mit einem Elementtyp, der in HTML verwendet wird“!
Element
Die Sprache »Element« enthält Lemmata, welche für alle  Elementtypen sinnvoll sind, auch solche, die in HTML nicht verwendet werden. Solche Elementtypen finden sich beispielsweise in manchen XML-Dokumenten. Das DOM ist auch für XML  gedacht.
Node
Die Sprache »Node« enthält Lemmata, welche für alle  Inhalte eines Dokuments sinnvoll sind. Neben den Elementen findet man in einem HTML-Dokument ja auch noch andere Inhalte, wie beispielsweise Text -Inhalte (Inhaltstyp 3 ). Jedes Element ist ein Teil, aber nicht jeder Teil ist ein Element!
Die Sprache »Node« kennen wir bereits. Hier zeigt sich einer der Vorteile der Verwendung von Sprachen. Da eine Sprache von mehreren verschiedenen Verzeichnissen gesprochen werden kann, müssen wir bei einem neuen Verzeichnis nicht immer auch eine neue Sprache erlernen, da ein Verzeichnis eine Sprache sprechen kann, die wir schon kennen.
Beziehungen
Das Inklusionsdiagramm „Ⓖ.document.firstElementChild > HTMLHtmlElement > HTMLElement > Element > Node > nodeName“ drückt folgende Beziehungen aus:
  • »Ⓖ.document.firstElementChild« ist ein Verzeichnis, das die Sprache » HTMLHtmlElement« spricht. Dies bedeutet hier, daß jenes Verzeichnis für ein Element mit dem Elementtyp »html« steht.
  • Jedes Element mit dem Elementtyp »html« (ein »HTMLHtmlElement«) ist ein Element mit einem Elementtyp der HTML-Spezifikation (ein »HTMLElement«). (Die Sprache »HTMLHtmlElement« umfaßt die Sprache »HTMLElement«.)
  • Jedes Element mit einem Elementtyp der HTML-Spezifikation (ein »HTMLElement«) ist ein Element (ein » Element«). (Die Sprache »HTMLElement« umfaßt die Sprache »Element«.)
  • Jedes Element (ein » Element«) ist ein Teil (ein » Node«). (Die Sprache »Element« umfaßt die Sprache »Node«.)
  • Die Sprache »Node« enthält ein Lemma »nodeName«

Unter Mozilla Firefox 38  können wir einige der Inklusionsrelationen auch mit Hilfe von JavaScript  veranschaulichen.

Die folgende Auswertung zeigt, daß das Verzeichnis »Ⓖ.document.firstElementChild« die Gruppe »HTMLHtmlElement« implementiert.

Auswertung
this.document.firstElementChild   instanceof   HTMLHtmlElement
true

Die folgende Auswertung zeigt, daß Mozilla Firefox 38  die Gruppe »HTMLElement« aus der DOM4 -Spezifikation nicht  kennt. Diese Spezifikation verlangt auch nicht, daß »instanceof« wie im vorigen Beispiel gezeigt verwendet werden kann. Die hier gezeigten Beispiele dienen nur der Veranschaulichung, und diese ist nicht bei jeder Sprache möglich.

Auswertung

this.document.firstElementChild instanceof HtmlElement

ReferenceError: HtmlElement is not defined

Die folgende Auswertung zeigt, daß das Verzeichnis »Ⓖ.document.firstElementChild« die Gruppe »Element« implementiert. Dies liegt daran, daß es die Gruppe »HTMLHtmlElement« implementiert, und die Gruppe »HTMLHtmlElement« die Gruppe »Element« enthält.

Auswertung
this.document.firstElementChild   instanceof   Element
true

Die folgende Auswertung zeigt, daß das Verzeichnis »Ⓖ.document.firstElementChild« die Gruppe »Node« implementiert. Dies liegt daran, daß es die Gruppe »HTMLHtmlElement« implementiert, und die Gruppe »HTMLHtmlElement« die Gruppe »Node« enthält.

Auswertung
this.document.firstElementChild   instanceof   Node
true

Die folgende Auswertung illustrieren noch einmal, daß das Verzeichnis »Ⓖ.document.firstElementChild« die Gruppe »Node« implementiert, indem sie zeigen, daß das Lemma »nodeType« aus dieser Gruppe auch wirklich ein Eintrage jenes Verzeichnisses ist.

Auswertung
this.document.firstElementChild.nodeType
1

Hier folgende noch einige einschlägige Quellen.

Dokumentation des Auszeichnungstyps »HTML«
developer.mozilla.org/en-US/docs/Web/HTML/Element/html
Dokumentation der Sprache des Auszeichnungstyps (»HTMLHtmlElement«)
developer.mozilla.org/en-US/docs/Web/API/HTMLHtmlElement
Dokumentation der Sprache »HtmlElement«
developer.mozilla.org/en-US/docs/Web/API/HTMLElement
Dokumentation der Sprache »Element«
developer.mozilla.org/en-US/docs/Web/API/Element
Dokumentation der Sprache »Node«
developer.mozilla.org/en-US/docs/Web/API/Node

Der Auszeichnungstyp »head«

Das Verzeichnis »Ⓖ.document.firstElementChild.firstElementChild« repräsentiert in dem hier gewählten Beispieldokument den wesentlichen Inhalt des html-Elements, also das head-Element.

document
<!DOCTYPE HTML>
<
html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<
head>
<meta charset="UTF-8" /><title>Hallo</title><style type="text/css">
...
Das Dokument als Baum (Stammbaumdarstellung) von Elementen
                                document
|
| firstElementChild
|
html
|
|
firstElementChild |
.-------------'-------------.
| |
head body
| |
.---------:---------. .--------'--------.
| | | | |
meta title style p pre
|
code
|
script
Auswertung
this.document.firstElementChild.firstElementChild.nodeName
"head"

Das Ergebnis der Auswertung bedeutet, daß der Typ des ersten im ersten Element des Dokuments enthaltenen Elementes gleich »head« ist.

Falls das Dokument vom Browser als »HTML5« (im Gegensatz zu »XHTML5«) interpretiert wird, ergibt die Auswertung statt dessen »HEAD« in Großbuchstaben.

Auswertung
this.document.firstElementChild.firstElementChild.nodeName
"HEAD"

»Ⓖ.document.firstElementChild.firstElementChild« versteht eine Sprache namens »HTMLHeadElement«, welche die Sprache »HTMLElement« umfaßt.

Die Sprache »HTMLElement« haben wir schon weiter oben behandelt, und gesehen, daß sie ein Lemma »nodeName« enthält.

Die Abstammung von »nodeName«
Ⓖ.document.firstElementChild.firstElementChild : HTMLHeadElement > HTMLElement > Element > Node # nodeName
Dokumentation des Auszeichnungstyps »HEAD«
developer.mozilla.org/en-US/docs/Web/HTML/Element/head
Dokumentation des Auszeichnungstyps »HTMLHeadElement«
developer.mozilla.org/en-US/docs/Web/API/HTMLHeadElement

Der Auszeichnungstyp »meta«

Das Verzeichnis »Ⓖ.document.firstElementChild.firstElementChild.firstElementChild« repräsentiert in dem hier gewählten Beispieldokument den ersten wesentliche Inhalt des head-Elements, also das meta-Element.

document
<!DOCTYPE HTML>
<
html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<
head>
<
meta charset="UTF-8" /><title>Hallo</title><style type="text/css">
...
Das Dokument als Baum (Stammbaumdarstellung) von Elementen
                                document
|
| firstElementChild
|
html
|
|
firstElementChild |
.-------------'-------------.
| |
head body
firstElementChild | |
.---------:---------. .--------'--------.
| | | | |
meta title style p pre
|
code
|
script
Auswertung
this.document.firstElementChild.firstElementChild.firstElementChild.nodeName
"meta"

Das Ergebnis der Auswertung bedeutet, daß der Typ des ersten im ersten Element des ersten Elements des Dokumentes enthaltenen Elementes gleich »meta« ist.

Falls das Dokument vom Browser als »HTML5« (im Gegensatz zu »XHTML5«) interpretiert wird, ergibt die Auswertung statt dessen »META« in Großbuchstaben.

Auswertung
this.document.firstElementChild.firstElementChild.firstElementChild.nodeName
"META"

»Ⓖ.document.firstElementChild.firstElementChild.firstElementChild« versteht eine Sprache namens »HTMLMetaElement«, welche die Sprache »HTMLElement« umfaßt.

Die Sprache »HTMLElement« haben wir schon weiter oben behandelt, und gesehen, daß sie ein Lemma »nodeName« enthält.

Die Abstammung von »nodeName«
Ⓖ.document.firstElementChild.firstElementChild.firstElementChild : HTMLMetaElement > HTMLElement > Element > Node # nodeName
Dokumentation des Auszeichnungstyps »META«
developer.mozilla.org/en-US/docs/Web/HTML/Element/meta
Dokumentation des Auszeichnungstyps »HTMLMetaElement«
developer.mozilla.org/en-US/docs/Web/API/HTMLMetaElement

Lehrvergleich Restaurant  *

Man kann sich eine Sprache  wie die Speisekarte  eines Restaurants vorstellen.

Die Speisekarte  enthält Namen der Gerichte (Lemmata ) und Beschreibungen  der Gerichte (Klauseln ).

Die Sprache »Speisekarte«
Carpaccio
Marinierte Rinderfiletscheiben
Grillteller Spezial
Koteletts, Schweinefilet und Würste
Haustopf
Gemüse mit Champignons und Kartoffeln

Aber, wenn man nur  eine Speisekarte hat, dann wird man noch nicht satt, man braucht auch noch Kellner, Köche und eine Küche (Implementation).

Die Gerichte, die auf den Tisch gestellt werden, sollten nicht nur so heißen wie in der Speisekarte beschrieben (formale Implementation), sondern sie sollten auch die Beschreibungen aus der Speisekarte erfüllen (semantische Implementation).

Man kann eine Speisekarte, die viele Gerichte enthält, übersichtlicher gestalten, indem man sie in verschiedene Abschnitte (umfaßte Sprachen, Teilsprache) unterteilt.

Die Teilsprache »Vorspeisen«
Carpaccio
Marinierte Rinderfiletscheiben
Die Teilsprache »Hauptgerichte«
Grillteller Spezial
Koteletts, Schweinefilet und Würste
Haustopf
Gemüse mit Champignons und Kartoffeln
Inklusionsrelationen
Restaurant > Speisekarte > Vorspeisen > Carpaccio
D.h., das Restaurant (Implementation) implementiert eine Speisekarte (Sprache), welche Vorspeisen (Teilsprache) enthält, zu denen Carpaccio (Lemma) gehört.

Gleichzeitig kann es Kunden helfen, sich in Restaurants zurechtzufinden, wenn nicht jedes Restaurant neue Gerichte erfindet, sondern es bestimmte Gerichte gibt, die in verschiedenen Restaurants gleich sind (Standardsprachen, Standardlemmata), beispielsweise sind Begriffe wie „Wiener Schnitzel“ allgemein bekannt, während „Berliner Schnitzel“ erklärt werden müßte.

Weil die Sprachen die Bedeutung von Wörtern definieren, reicht es dann bei einer Bestellung zum Kellner (zur Implementation) nur das Wort „Carpaccio“ zu sagen, um marinierte Rinderfiletscheiben zu erhalten.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723406 stefan_ram:723406 Sprachen in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723406, slrprddef723406, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/sprachen_javascript