Modul:Vorlage:Tabellendaten Skriptessa/Doku
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
BearbeitenDas 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
BearbeitenDas 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
BearbeitenKurzes Beispiel mit einer Variable:
{{Tabellendaten Skriptessa |code=abc.:var s1=bla:.~.:s1:.}}
Ergebnis:
abc~bla
Beispiel 4
BearbeitenDie 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:
Beispiel 5
BearbeitenBeispiel 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 <pre> und </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:. .::.{| class="wikitable" .:t1(*; id<=5):. |}}}
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
BearbeitenEine 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]]}:. {| class="wikitable" .:q1(*):. |} .: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
BearbeitenCodekomponenten 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 alstable
oder als eine anderequery
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
oderoccurrenceLooped=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..).
- Der Ausdruck kann ein Text, eine Zahl, eine Variable, eine Abfrage (query) oder ein Rechenausdruck damit sein (siehe unten). Der Ausdruck selbst hat keine
.:--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 alstable
deklariert, siehe oben). Sie wird als Text ausgegeben.
- Die direkte Abfrage einer Commons-Datentabelle (
.:q(col1, col2, ..; condition1, condition2, ..; option-list):.
- Die Abfrage einer anderen Abfrage (
q
ist alsquery
deklariert, siehe oben). Sie wird als Text ausgegeben.
- Die Abfrage einer anderen Abfrage (
.:v:.
- Die einzelne Variable (oder der wörtliche Text) wird ausgegeben (Variablen werden mit
var
deklariert, siehe oben).
- Die einzelne Variable (oder der wörtliche Text) wird ausgegeben (Variablen werden mit
.: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
BearbeitenAlles außerhalb der .:Befehl/ Ausdruck:. Syntax wird weitgehend unverändert ausgegeben. Nur gewisse Html-Entitäten werden ersetzt: < durch <
, [ durch [
, = durch =
, + durch +
, : durch :
, { durch {
, | durch |
, } 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.:query t1q= t1(*; group==pageindex+1):.
wobei t1 eine table Variable ist, mittable t1=ABC.tab
, und pageindex eine numerische var Variable, mitvar pageindex=123
..:var pageoffset= pageindex*10:.
.:t1q(divisor; id==pageoffset+1):.
.:var id= 2 * pageoffset + 1:.
setzt die id Variable auf das Doppelte der pageoffset Variable, plus 1..:t1q(content; id==id++):.
ergibt die content-Spalte mit id, die Variable id selbst ist aber nun um 1 höher.
Skriptcode Richtlinien
BearbeitenHtml-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 < 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 [ statt [ und < statt < verwenden, z.B. <math>
.
Modultests
Bearbeitensiehe Vorlage:Tabellendaten Skriptessa/ Modultest 1 (ev. auch als Beispiel nützlich)