Modul:Vorlage:Tabellendaten Skriptessa/Doku

Aus Wikibooks

Dies ist die Dokumentationsseite für Modul:Vorlage:Tabellendaten Skriptessa

Das Modul interpretiert Tabellendaten-Skripts für die Vorlage:Tabellendaten Skriptessa. Man kann damit Teile von Tabellendaten aus Wikimedia Commons abfragen und als Text einbinden. Das Modul wird im Buchtext über die Vorlage verwendet, nicht direkt mit #invoke.

Beispiel 1[Bearbeiten]

Das folgende Beispiel sucht die Anzahl erfolgreicher Raketenstarts in die Erdumlaufbahn im Jahr 2000. Die direkte Einbindung aus einer Vorlage würde so aussehen:

{{#invoke:Vorlage:Tabellendaten Skriptessa|interpret
|code=
.:table t1= Data:Orbital launches by year.tab:.
Es waren .:t1(success; year==2000):..
}}

Die Wikitext-Einbindung:

{{Tabellendaten Skriptessa
|code=
.:table t1= Data:Orbital launches by year.tab:.
Es waren .:t1(success; year==2000):..
}}

Beide mit dem Ergebnis:


Es waren 81.

Beispiel 2[Bearbeiten]

Das folgende Beispiel sucht die Jahre mit den meisten erfolgreicher Raketenstarts von 1960 bis 2000.

{{Tabellendaten Skriptessa
|code=
.:table t1= Data:Orbital launches by year.tab:.
.:query q1= t1(*; year>=1960, year<=2000; orderBy=success, descending=1, limit=3):.
Es waren die Jahre .:q1(year;;occurrence=1):., .:q1(year;;occurrence=2):. und .:q1(year;;occurrence=3):..
}}

Mit dem Ergebnis:


Es waren die Jahre 1 967, 1 984 und 1 976.

Beispiel 3[Bearbeiten]

Kurzes Beispiel mit einer Variable:

{{Tabellendaten Skriptessa |code=abc.:var s1=bla:.~.:s1:.}}

Ergebnis:

abc~bla

Beispiel 4[Bearbeiten]

Die Abfrage t1q ist ein Teil der ganzen Tabelle. Sie erleichtert die Ausgabe der einzelnen Werte im Text.

{{Tabellendaten Skriptessa
|code=
.:table t1= Data:Fraction tasks abacdeP80max.tab:.
.:table t2= Data:Fraction tasks abacdeP80max solušn.tab:.
.:var in= <div style="display:inline-block; min-width:70mm; margin:2mm 0 2mm 0;"><math>:.
.:var out= </math></div>:.
.:--Seitenbeginn (Kommentar)--:..:var pageindex= 0:.
.:query t1q= t1(*; group==pageindex+1):..:var pageoffset= pageindex*10:.
<div style="outline:yellow thin solid">
====Aufgabe====
Berechne und kürze mit .:t1q(divisor; id==pageoffset+1):. und .:t1(divisor; id==pageoffset+2):..
.:var id= pageoffset + 1:.
.:in:..:t1q(content; id==id++):.=.:out:.
.:in:..:t1q(content; id==id++):.=.:out:.
</div>
<div style="outline:greenyellow thin solid">
====Lösung====
.:query t2q= t2(*; group==pageindex+1):..:var pageoffset= pageindex*20:..:var id= pageoffset+1:.
.:in:..:t2q(content; id==id++):.?.:out:.
.:in:..:t2q(content; id==id++):.?.:out:.
</div>
}}

Ergebnis:


Aufgabe[Bearbeiten]

Berechne und kürze mit 2 und 5.

Lösung[Bearbeiten]

Beispiel 5[Bearbeiten]

Beispiel mit Tabellenauszug. Der Abfrageausdruck gibt mehrere Werte zurück, und zwar im folgenden Format:

| Z1S1 || Z1S2 ..
|-
| Z2S1 || Z2S2 ..

Der Kopf und Fuß der Wiki-Tabelle muss noch hinzugefügt werden. Die dafür nötigen Zeichen {,|,} sind codiert. Die Tabelle kann nämlich erst nach dem Skriptessa-Durchlauf in eine hübsche Html-Tabelle umgewandelt werden, vorher ist sie ja leer. Wenn man den Tabellenquelltext sehen will, muss man um die Tabelle &lt;pre> und &lt;/pre> schreiben. Wieder html-codiert, aus demselben Grund.

Das .::. soll nur einen Absatz verhindern, es kann auch weggelassen werden. Absätze und Leerzeichen zwischen .:Befehlsblöcken:., auch .::., werden entfernt.

{{Tabellendaten Skriptessa
|code=
.:table t1= Data:Fraction tasks random chart values.tab:.
.::.&#123;&#124; class="wikitable"
.:t1(*; id<=5):.
&#124;&#125;}}

Ergebnis:

1 0,63 5 8 8 4 99 \frac{5}{8} \frac{5}{8} \frac{5}{8} 1 false
2 0,5 4 8 8 4 99 \frac{1}{2} \frac{4}{8} \frac{1}{2} 4 false
3 0,8 8 10 10 5 99 \frac{4}{5} \frac{8}{10} \frac{4}{5} 2 false
4 0,56 5 9 9 99 3 \frac{5}{9} \frac{5}{9} \frac{5}{9} 1 false
5 0,43 3 7 7 99 99 \frac{3}{7} \frac{3}{7} \frac{3}{7} 1 false


Beispiel 6[Bearbeiten]

Eine Query-Abfragetabelle kann auch im Quelltext als Json eingegeben werden oder eine bestehende Query-Abfrage mit einer Spalte kann mit einzelnen Werten erweitert werden:

{{Tabellendaten Skriptessa
|code=
.:jsonquery q1= {"schema": {"fields": [{"name": "val", "type": "number"}]}, "data": [[2], [3]]}:.
&#123;&#124; class="wikitable"
.:q1(*):.
&#124;&#125;
.:query q2= q1(*) + 4 + (q1(*;;occurrence=1)*100) + 1:. 
.:query q3= q2(*;;orderBy=val):. .:var n=1:.
.:q3(*;;occurrence=n++):., .:q3(*;;occurrence=n++):., .:q3(*;;occurrence=n++):.,
.:q3(*;;occurrence=n++):., .:q3(*;;occurrence=n++):.}}

Ergebnis:


2
3

1, 2, 3, 4, 200

Aufruf mit interpret[Bearbeiten]

Verwendung:{{#invoke:Vorlage:Tabellendaten Skriptessa|interpret|code=Skript-text}}

Skript-Syntax[Bearbeiten]

Codekomponenten sind Befehle, Ausdrücke und normaler Text. Befehle und Ausdrücke stehen zwischen .: und :..

Befehle[Bearbeiten]

  • .:table t=Data:ABC.tab:.
    • Erstellt eine Tabelle aus der angegebenen Commons Datenquelle.
    • Data: kann weggelassen werden. t ist ein wählbarer Name.
  • .:query q= t(col1, col2, ..; condition1, condition2, ..; option-list):.
    • Erstellt eine Teil-Tabelle (Abfrage) aus einer anderen Tabelle.
    • t ist als table oder als eine andere query deklariert.
    • col1.. sind die Spalten, * ist hier statt der ganzen Liste erlaubt, um alle Spalten zu erhalten.
    • condition1.. sind Bedingungen, die alle gelten müssen. Als Operator sind ==, <=, >=, <, >, <> möglich. Rechts vom Operator sind einfache Rechenausdrücke möglich (siehe unten). Die Bedingungsliste kann weggelassen werden, um alle Zeilen zu erhalten.
    • Optionen sind orderBy=Spaltenname, descending=1, limit=Zahl, occurrence=Zahl oder occurrenceLooped=Zahl. Sinnvolle Option-Kombinationen werden mit , kombiniert. Die orderBy Spalte muss auch im Ergebnis vorkommen. Die Zahlenangaben für limit, occurrenceLooped und occurrence können auch Rechenausdrücke oder einzelne Variablen sein. Bei occurrenceLooped wird wieder von vorne begonnen, wenn die Zahl größer als die Liste lang ist, bei occurrence wird nichts zurückgegeben (und eine Warnung). Die Optionenliste kann natürlich weggelassen werden.
  • .:query q= t(col1, col2, ..; condition1, condition2, ..; option-list) + Ausdruck + Ausdruck..:.
    • Erweitert eine Tabelle mit einer Spalte um weitere Werte (Zeilen). Diese Werte (Ausdrücke) müssen dem Typ der Tabellenspalte entsprechen. Der kann "number", "string" oder "boolean" sein. Die Werte müssen sich also gegebenenfalls in eine Zahl (number) oder einen Binärwert wie 1 oder 0 (boolean) umwandeln lassen.
  • .:jsonquery q= json:.
    • Erstellt eine Tabelle aus einem Json Text.
  • .:var v= Ausdruck:.
    • Der Ausdruck kann ein Text, eine Zahl, eine Variable, eine Abfrage (query) oder ein Rechenausdruck damit sein (siehe unten). Der Ausdruck selbst hat keine .: :.. Beispiel: .:var a= 1+2.5:.. Wird eine Abfrage (query) einer Variable zugewiesen, enthält die Variable den oder die Werte der Abfrage (etwa Text, eine Zahl..).
  • .:--Kommentar:.
  • .:!--Kommentar2:.
    • Wird als Meldung in der Seitenvorschau angezeigt.
  • .:!Ausdruck:.
    • Alle Ausdrücke (ohne .: :.) können auch als Meldung in der Seitenvorschau angezeigt werden.
  • .:!!vars:., .:!!tables:., .:!!queries:.
    • Gibt eine Liste der Variablen, Tabellen, Abfragen als Meldung in der Seitenvorschau aus. Die Liste enthält die Namen und die Anzahl der Einträge (Abfragen), Variablenwerte (Variablen), Data:Datenquellen (Tabellen).
  • .:option localize= 0:., .:option localize= de:., .:option localize= deKomma:., .:option localize= deHKomma:.
    • Steuert die lokale Zahlendarstellung (mit Beistrichkomma) in Abfragen und Rechenausdrücken. 0 ist Punktkomma, de ist Tauserderpunkt und Beistrichkomma, deKomma ist Beistrichkomma, deHKomma oder 1 ist kleiner Tausenderabstand und Beistrichkomma. Standardmäßig ist deHKomma eingeschaltet. Das betrifft nur die Ausgabe, nicht die Eingabe. Zahlen in Ausdrücken müssen mit Punktkomma eingegeben werden.

Ausdrücke[Bearbeiten]

  • .:t(col1, col2, ..; condition1, condition2, ..; option-list):.
    • Die direkte Abfrage einer Commons-Datentabelle (t ist als table deklariert, siehe oben). Sie wird als Text ausgegeben.
  • .:q(col1, col2, ..; condition1, condition2, ..; option-list):.
    • Die Abfrage einer anderen Abfrage (q ist als query deklariert, siehe oben). Sie wird als Text ausgegeben.
  • .:v:.
    • Die einzelne Variable (oder der wörtliche Text) wird ausgegeben (Variablen werden mit var deklariert, siehe oben).
  • .:v + w:., .:v - w:., .:v * w:., .:v / w:., .:v + w * x:., .:v / (w - x):., .:v + q(col1; condition1, condition2, ..; option-list):....
    • Rechenausdrücke mit +,-,*,/ und Klammern sind möglich. Rechenausdrücke mit Variablen oder Abfragen funktionierten natürlich nur, wenn sie genau eine Zahl ergeben. Die Mal/ Dividiertrechnung kommt vor der Plus/ Minusrechnung, wie üblich. Ein Rechenausdruck kann auch woanders verwendet werden, z.B. in Abfrage-Bedingungen (siehe oben).
  • .:v++:.
    • Der Operator ++ wertet die Variable aus und erhöht nachher deren Wert um 1. Der Operator ++ akzeptiert nur eine Variable.

Text[Bearbeiten]

Alles außerhalb der .:Befehl/ Ausdruck:. Syntax wird weitgehend unverändert ausgegeben. Nur gewisse Html-Entitäten werden ersetzt: &lt; durch <, &#91; durch [, &#61; durch =, &#43; durch +, &#58; durch :, &#123; durch {, &#124; durch |, &#125; durch } (siehe auch das Ende der Funktion p.interpret). Abstände und Zeilenumbrüche werden nur direkt zwischen .:Befehl/ Ausdruck:. Komponenten entfernt. Gegebenenfalls kann ein .::. eingefügt werden.

Codekomponenten-Beispiele[Bearbeiten]

  1. .:query t1q= t1(*; group==pageindex+1):. wobei t1 eine table Variable ist, mit table t1=ABC.tab, und pageindex eine numerische var Variable, mit var pageindex=123.
  2. .:var pageoffset= pageindex*10:.
  3. .:t1q(divisor; id==pageoffset+1):.
  4. .:var id= 2 * pageoffset + 1:. setzt die id Variable auf das Doppelte der pageoffset Variable, plus 1.
  5. .:t1q(content; id==id++):. ergibt die content-Spalte mit id, die Variable id selbst ist aber nun um 1 höher.

Skriptcode Richtlinien[Bearbeiten]

Html-Tags sollen nicht mit der .:Befehl/ Ausdruck-Syntax:. überlappen. Also einem < sollte ein > folgen, bevor ein .: mit irgendeinem Befehl beginnt (und mit :. endet). Man kann &lt; statt < für verschachtelte Konstruktionen verwenden.

Wikisyntax darf nicht mit der .:Befehl/ Ausdruck-Syntax:. überlappen. Also, [[Hauptseite]].:bla:. ist ok, <math>.:bla:.</math> ist nicht ok. Man kann &#91; statt [ und &lt; statt < verwenden, z.B. &lt;math>.

Modultests[Bearbeiten]

siehe Vorlage:Tabellendaten Skriptessa/ Modultest 1 (ev. auch als Beispiel nützlich)