Schlüssel/Wert-Paar: Unterschied zwischen den Versionen
Kowa (Diskussion | Beiträge) |
Kowa (Diskussion | Beiträge) |
||
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 105: | Zeile 105: | ||
|| <code>5</code> | || <code>5</code> | ||
|- | |- | ||
|| ''type:'' | || ''hash type:'' | ||
|| JavaScript-[[Universum]] | || JavaScript-[[Universum]] | ||
|} | |} | ||
|} | |} | ||
In [[SQL]] werden [[Tupel]] als Zeilen in [[Tabelle]]n (das sind spezielle [[Relation]]en) gespeichert. | In [[SQL]] werden [[Tupel]] als Zeilen (''rows'') in [[Tabelle]]n (''tables'', das sind spezielle [[Relation]]en) gespeichert. | ||
Die Tupelattribute haben dabei zwar nur einen Wert (<code>5</code> bzw. <code>6</code>) aber | Die Tupelattribute haben dabei zwar nur einen Wert (<code>5</code> bzw. <code>6</code>) aber | ||
jeweils ''zwei'' unterschiedliche Attributbezeichner: einen Namen (<code>a</code> bzw. <code>b</code>) | jeweils ''zwei'' unterschiedliche Attributbezeichner: einen Namen (<code>a</code> bzw. <code>b</code>) | ||
Zeile 149: | Zeile 149: | ||
* <code>key="value"</code> ({{zB}} [[XML]]-Attribut) | * <code>key="value"</code> ({{zB}} [[XML]]-Attribut) | ||
Der Schlüssel kann auch nur implizit | Der Schlüssel kann auch nur ''implizit'' vorhanden, wie beispielsweise die Position eines Attributs | ||
in einem [[Tupel| | in einem [[Tupel#Tupel_in_Listennotation_.28in_Anlehnung_an_McCarthy_et_al..5B4.5D.29|Tupel in Listennotation]]. | ||
eines Wertes zu einem Schlüssel indirekt erfolgt. Zum Beispiel wird einem [[Funktionsparameter]] (Schlüssel) | |||
Und es ist auch möglich, dass die Zuordung eines Wertes zu einem Schlüssel ''indirekt'' erfolgt. Zum Beispiel wird einem [[Funktionsparameter]] (Schlüssel) | |||
durch einen [[Funktionsaufruf]] ein [[Funktionsargument]] (Wert) übergeben. Während der Ausführung des Funktionsrumpfes | durch einen [[Funktionsaufruf]] ein [[Funktionsargument]] (Wert) übergeben. Während der Ausführung des Funktionsrumpfes | ||
besteht das so gebildete Schlüssel/Wert-Paar (sofern der Wert nicht im Funktionsrumpf geändert wird). | besteht das so gebildete Schlüssel/Wert-Paar (sofern der Wert nicht im Funktionsrumpf geändert wird), danach wird es wieder gelöscht. | ||
==Formale Definition (Kowarschick<ref name="MMDB"/>)== | ==Formale Definition (Kowarschick<ref name="MMDB"/>)== | ||
'''Vorbemerkung'''<br/> | '''Vorbemerkung'''<br/> | ||
Nachfolgend werden '''Attribute'' definiert. Diese Definition kann eins zu eins für jede ander Art von Schlüssel-Wert-Tupeln übernommen werden, | Nachfolgend werden '''Attribute''' definiert. Diese Definition kann eins zu eins für jede ander Art von Schlüssel-Wert-Tupeln übernommen werden, | ||
wobei natürlich die Begriffe entsprechend angepasst werden müssen. | wobei natürlich die Begriffe entsprechend angepasst werden müssen. | ||
Zeile 165: | Zeile 166: | ||
<math>v \in D</math> ein Element von <math>D</math>. | <math>v \in D</math> ein Element von <math>D</math>. | ||
Dann heißt das [[Tupel| | Dann heißt das [[Tupel|m+1-Tupel]] <math>(a^1, \ldots, a^m, D)</math> '''Attributdefinition''' | ||
mit '''Attributnamen''' <math>a^1, \ldots, a^m</math> und {{Domäne}} <math>D</math>. Das Tupel | mit '''Attributnamen''' <math>a^1, \ldots, a^m</math> und {{Domäne}} <math>D</math>. Das Tupel | ||
<math>(a^1, \ldots, a^m, v)</math> heißt '''Attribut (zur Domäne <math>D</math>)''' mit | <math>(a^1, \ldots, a^m, v)</math> heißt '''Attribut (zur Domäne <math>D</math>)''' mit | ||
Zeile 172: | Zeile 173: | ||
'''Anmerkung'''<br/> | '''Anmerkung'''<br/> | ||
Zur Definition von Attributen wurde der Begriff [[Tupel]] als bekannt vorausgesetzt. | Zur Definition von Attributen wurde der Begriff [[Tupel]] als bekannt vorausgesetzt. | ||
Andererseits benötigt man zur Definition von | Andererseits benötigt man zur Definition von allgemeinen Tupeln den zuvor definierten | ||
Attributbegriff. Es liegt hier jedoch kein Circulus vitiosus (Zirkelschluss) vor, | |||
da man Attribute auch allein mit Hilfe von [[geordnetes Paar|geordneten Paaren]] <math>[a,b]</math> definieren kann: | da man Attribute gemäß [[John MaCarthy]]<ref>{{Quelle|McCarthy (1960)}}</ref> auch allein mit Hilfe von [[geordnetes Paar|geordneten Paaren]] <math>[a,b]</math> definieren kann: | ||
<div class="formula"><math>\begin{array}[t]{lcl} | <div class="formula"><math>\begin{array}[t]{lcl} | ||
(a^1, \ldots, a^m, D) & := & [a^1, [a^2, \ldots [a^m, D]\ldots]] \\ | (a^1, \ldots, a^m, D) & := & [a^1, [a^2, \ldots [a^m, [D, \emptyset]]\ldots]] \\ | ||
(a^1, \ldots, a^m, v) & := & [a^1, [a^2, \ldots [a^m, v]\ldots]] | (a^1, \ldots, a^m, v) & := & [a^1, [a^2, \ldots [a^m, [v, \emptyset]]\ldots]] | ||
\end{array}</math></div> | \end{array}</math></div> | ||
Zeile 194: | Zeile 195: | ||
* <math>(a, i, v)</math> '''benanntes Positionsattribut''' | * <math>(a, i, v)</math> '''benanntes Positionsattribut''' | ||
Folgende alternative Schreibweisen | Folgende alternative Schreibweisen werden in diesem Wiki ebenfalls verwendet: | ||
* '''Positionsattribut''': <math>i: v</math> ([[Formel]]) bzw. <code>i: v</code> ([[Pseudocode]]) | * '''Positionsattribut''': <math>i: v</math> ([[Formel]]) bzw. <code>i: v</code> ([[Pseudocode]]) | ||
* '''benanntes Attribut''': <math>a: v</math> (Formel) bzw. <code>a: v</code> (Pseudocode) | * '''benanntes Attribut''': <math>a: v</math> (Formel) bzw. <code>a: v</code> (Pseudocode) | ||
* '''benanntes Positionsattribut''': <math>a/i: v</math> (Formel) bzw. <code>a/i: v</code> (Pseudocode) | * '''benanntes Positionsattribut''': <math>a/i: v</math> (Formel) bzw. <code>a/i: v</code> (Pseudocode) | ||
'''Beispiele (Pseudocode)''' | |||
{| class = "wikitable" style = "table-layout: fixed; max-width: 48em; border: 0;" | {| class = "wikitable" style = "table-layout: fixed; max-width: 48em; border: 0;" | ||
|- | |- |
Aktuelle Version vom 13. August 2019, 17:32 Uhr
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen nur teilweise:
Korrektheit: 4 (großteils überprüft) |
Umfang: 4 (unwichtige Fakten fehlen) |
Quellenangaben: 3 (wichtige Quellen vorhanden) |
Quellenarten: 4 (sehr gut) |
Konformität: 4 (sehr gut) |
Definition (Kowarschick[1])
Schlüssel-/Wert-Paare (key-value pairs) sind geordnete Paare $ (\rm{key}, \rm{value}) $, die zur Benennung von Werten dienen. Der Schlüssel (englisch: key) dient dabei als Name des zugehörigen Wertes (englisch: value).
Dem Schlüssel kann ein Datentyp $ \rm{typ} $, d. h. eine nicht-leere Menge (oder Klasse) zugeordnet werden, der die möglichen Werte, die unter diesem Namen „gespeichert“ werden können, beschränkt. Das geordnete Paar $ (\rm{key}, \rm{typ}) $ heißt Typdefinition zum Schlüssel-/Wert-Paar $ (\rm{key}, \rm{value}) $, falls $ \rm{value} \in \rm{typ} $.
Varianten
Schlüssel/Wert-Paare kommen in der Mathematik und der Informatik unter ganz verschiedenen Bezeichungen vor:
Name | Schlüssel | Wert | Datentyp | EcmaScript/TypeScript-Beispiel | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Attribut property |
Attributname Attributbezeichner property name |
Attributwert property value |
Domäne domain property type |
| ||||||||||
Variable | Variablenname | Variablenwert | Typ |
| ||||||||||
Parameter | Parameter | Argument | Typ |
| ||||||||||
hash entry | hash key | hash value | hash type |
|
In SQL werden Tupel als Zeilen (rows) in Tabellen (tables, das sind spezielle Relationen) gespeichert.
Die Tupelattribute haben dabei zwar nur einen Wert (5
bzw. 6
) aber
jeweils zwei unterschiedliche Attributbezeichner: einen Namen (a
bzw. b
)
und eine Position (Spalte 1
bzw. Spalte b2
).
a
|
b
|
---|---|
5
|
6
|
Ein derartiges Attribut kann durch ein Schlüssel/Schlüssel/Wert-Tripel dargestellt. Prinzipiell kann man auch Attribute mit noch mehr Namen definieren, indem man anstelle von Schlüssel/Wert-Paaren und Schlüssel/Schlüssel/Wert-Tripeln auch Schlüssel/Schlüssel/Schlüssel/Wert-Quadrupel etc. zulässt. Diese kommen in der Praxis allerdings kaum vor.
Schlüssel/Wert-Paare sind so universell einsetzbar, dass sie nicht nur in Programmiersprachen zum Einsatz kommen, sondern auch in Auszeichnungssprachen, Transferprotokollen und an vielen weiteren Stellen im IT-Bereich:
- XML-Attribut-Listen[2]:
<p id="first", class="important">...</p>
- HTTP-Header-Attribute[3]:
Accept-Charset: utf-8
- E-Mail-Header-Attribute[4]:
Date: 10 Aug 2019 12:02:45 +0100
- Query-Strings in URLs[5]:
?name=Eieruhr&preis=10.99
- BibTeX-Einträge[6]:
@book{ wk, author = "W. Kowarschick", title = "...", ... }
- OpenStreetMap-Tags[7]:
name:de=Albrecht-Dürer-Straße
- Initialisierungsdateien (INI-Dateien)[8]:
PropertyName1=PropertyValue1
- etc.
Schreibweisen
Die Schreibweise von Schlüssel/Wert-Paaren hängt vom jewiligen Einsatzgebiet ab:
- $ (\rm{key}, \rm{value}) $, $ (\rm{key1}, \rm{key2}, \rm{value}) $, ...
- $ [\rm{key}, \rm{value}] $, $ [\rm{key1}, [\rm{key2}, \rm{value}]] $, ...
key: value
(z. B. HTTP-Header)"key": value
(z. B. JSON)key=value
(z. B. Query-String einer URL)key="value"
(z. B. XML-Attribut)
Der Schlüssel kann auch nur implizit vorhanden, wie beispielsweise die Position eines Attributs in einem Tupel in Listennotation.
Und es ist auch möglich, dass die Zuordung eines Wertes zu einem Schlüssel indirekt erfolgt. Zum Beispiel wird einem Funktionsparameter (Schlüssel) durch einen Funktionsaufruf ein Funktionsargument (Wert) übergeben. Während der Ausführung des Funktionsrumpfes besteht das so gebildete Schlüssel/Wert-Paar (sofern der Wert nicht im Funktionsrumpf geändert wird), danach wird es wieder gelöscht.
Formale Definition (Kowarschick[1])
Vorbemerkung
Nachfolgend werden Attribute definiert. Diese Definition kann eins zu eins für jede ander Art von Schlüssel-Wert-Tupeln übernommen werden,
wobei natürlich die Begriffe entsprechend angepasst werden müssen.
Definition
Es seien $ a^1, \ldots, a^m $ paarweise verschiedene Werte ($ m \ge 1 $), die als Bezeichner fungieren,
$ D $ eine Domäne, d. h. eine nicht-leere Menge (oder Klasse), und
$ v \in D $ ein Element von $ D $.
Dann heißt das m+1-Tupel $ (a^1, \ldots, a^m, D) $ Attributdefinition mit Attributnamen $ a^1, \ldots, a^m $ und Domäne $ D $. Das Tupel $ (a^1, \ldots, a^m, v) $ heißt Attribut (zur Domäne $ D $) mit Attributnamen $ a^1, \ldots, a^m $ und Attributwert $ v $.
Anmerkung
Zur Definition von Attributen wurde der Begriff Tupel als bekannt vorausgesetzt.
Andererseits benötigt man zur Definition von allgemeinen Tupeln den zuvor definierten
Attributbegriff. Es liegt hier jedoch kein Circulus vitiosus (Zirkelschluss) vor,
da man Attribute gemäß John MaCarthy[9] auch allein mit Hilfe von geordneten Paaren $ [a,b] $ definieren kann:
(Formal müsste diese Definition rekursiv über die Anzahl der Attributnamen erfolgen.)
Spezialfälle
Es seien $ i \in \mathbb N_0 $ eine natürliche Zahl und $ a $
eine Zeichenkette, die mit einem Buchstaben beginnt
sowie evtl. endlich viele weitere Zeichen enthält (Buchstaben, Ziffern und einige ausgewählte
Sonderzeichen wie +
, -
, _
, @
,
$
etc.).
Dann heißen
- $ (i, v) $ Positionsattribut
- $ (a, v) $ benanntes Attribut
- $ (a, i, v) $ benanntes Positionsattribut
Folgende alternative Schreibweisen werden in diesem Wiki ebenfalls verwendet:
- Positionsattribut: $ i: v $ (Formel) bzw.
i: v
(Pseudocode) - benanntes Attribut: $ a: v $ (Formel) bzw.
a: v
(Pseudocode) - benanntes Positionsattribut: $ a/i: v $ (Formel) bzw.
a/i: v
(Pseudocode)
Beispiele (Pseudocode)
Attributart | Beispiel | Domäne |
---|---|---|
Benanntes Attribut | name: 'Anton'
|
name: String
|
Positionsattribut | 1: 'Anton'
|
1: String
|
Benanntes Positionsattribut | 1/name: 'Anton'
|
1/name: String
|
Quellen
- ↑ 1,0 1,1 Kowarschick (MMDB): Wolfgang Kowarschick; Vorlesung „Multimedia-Datenbanksysteme“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2016; Quellengüte: 3 (Vorlesung)
- ↑ W3C: Extensible Markup Language (XML) 1.0 (Fifth Edition), 3.3 Attribute-List Declarations
- ↑ RFC 2616, Section 4.2
- ↑ RFC 2822, Section 2.2
- ↑ RFC 3986, Section 3.4
- ↑ bibtex.org: BibTeX Format Beschreibung
- ↑ wiki.openstreetmap.org: Taga
- ↑ Microsoft: Configure an Ini File Item
- ↑ McCarthy (1960): John McCarthy; Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I; in: Communications of the ACM; Band: 3; Nummer: 4; Seite(n): 184-195; Verlag: Association for Computing Machinery; Adresse: New York; Web-Link 0, Web-Link 1; 1960; Quellengüte: 5 (Artikel)