PublicSQL-Dokumentation

Einführung

PublicSQL ist eine SQL-Variante für Javascript. Es werden SQL-Befehle zur Verfügung gestellt um Datenbankabfragen auf vorhandene Tabellen durchzuführen. Die Tabellen müssen im "Portable Table Format" vorliegen - ein spezielles Format das am bekannten CSV-Format angelehnt ist. Da Javascript keine Dateien speichern kann sind nur Abfragen möglich - nicht das Anlegen oder Ändern von Tabellen. Unterstützt wird vor allem die SELECT-Anweisung.

PublicSQL ist Open-Source und steht unter der MIT-Lizenz. Die deutsche Übersetzung ist bei wikipedia.de zu finden.

Tutorial

Dieses kleine Tutorial führt Sie in die Arbeitsweise von PublicSQL ein. Erstellen Sie für dieses Tutorial am besten ein neues Verzeichnis z. B. mit dem Namen "geoabfrage" in das Sie die Datei "publicsql.js" kopieren.

Einfache Abfrage

  1. Erstellen Sie eine neue PublicSQL-Tabelle. Hierzu erstellen Sie eine Textdatei folgenden Inhalts (bzw. kopieren den untenstehenden Text). Speichern Sie diese anschließend unter dem Namen "kontinente.ptf".

    /* Portable Table Format 0.9 */
    porTables[porTables.length] = new Array(
    "id", "Kontinent",

    1, "Afrika",
    2, "Amerika",
    3, "Asien",
    4, "Australien",
    5, "Europa",

    2);

  2. Erstellen Sie eine neue HTML-Datei. Schreiben Sie die folgende Zeile im <head>-Bereich um PublicSQL einzubinden:

    <script type="text/javascript" src="publicsql.js"></script>

    Schreiben Sie im <body>-Bereich die folgenden Zeilen um eine einfache SQL-Abfrage durchzuführen:

    <script language="javascript">
    publicSQL.query("select * from kontinente", "publicSQL.show");
    </script>

    Speichern Sie die Datei unter dem Namen "geo1.htm" im selben Verzeichnis.

  3. Rufen Sie die Datei "geo1.htm" in Ihrem Browser auf, Als Ergebnis sollten Sie den Inhalt der Kontinent-Tabelle sehen. Damit haben Sie erfolgreich Ihre erste PublicSQL-Abfrage erstellt.
Anzeigebeispiel: So sieht's aus

Erläuterung

Alle Funktionen und Variablen in PublicSQL beginnen mit publicSQL. Wir haben in diesem Beispiel die Funktionen publicSQL.query() und publicSQL.show() verwendet.

Mit publicSQL.query starten Sie eine Abfrage. Die Funktion hat 2 Parameter:
Der 1. Parameter enthält den Abfragestring.
Der 2. Parameter enthält den Namen einer Funktion, die das Abfrageergebnis weiterverarbeitet - in diesem Fall die Funktion "publicSQL.show". Das Ergebnis der Abfrage wird automatisch als 2-dimensionalles Array an diese Funktion übergeben. Die Funktion "publicSQL.show()" erstellt automatische eine Tabelle mit dem Ergebnis der Abfrage.

Verbundene Tabellen

  1. Erstellen Sie die folgende Tabelle mit den 10 einwohnerreichsten Ländern (Stand 2008). Speichern Sie diese unter dem Namen "laender.ptf".

    /* Portable Table Format 0.9 */
    porTables[porTables.length] = new Array(
    "id", "kontid", "Land", "Einwohner",
    1, 3, "China", 1324.7,
    2, 3, "Indien", 1149.3,
    3, 2, "USA", 304.5,
    4, 3, "Indonesien", 239.9,
    5, 2, "Brasilien", 195.1,
    6, 3, "Pakistan", 172.8,
    7, 1, "Nigeria", 148.1,
    8, 3, "Bangladesch", 147.3,
    9, 3, "Russland", 141.9,
    10, 3, "Japan", 127.7,
    4);

  2. Erstellen Sie eine neue HTML-Datei mit folgender Zeile im <head>-Bereich:

    <script type="text/javascript" src="publicsql.js"></script>

    Schreiben Sie zunächst im <body>-Bereich die folgenden Zeilen:

    <script language="javascript">
    publicSQL.query("SELECT kontinente.Kontinent, laender.Land, laender.Einwohner AS 'Millionen-Einwohner' FROM laender, kontinente WHERE kontinente.id = laender.kontid", "publicSQL.show");
    </script>

    Speichern Sie die Datei unter dem Namen "geo2a.htm" im selben Verzeichnis.

  3. Rufen Sie die Datei "geo2.htm" in Ihrem Browser auf. Als Ergebnis sollten Sie den Inhalt der Kontinent-Tabelle verbunden mit der Läender-Tabelle sehen.

    Anzeigebeispiel: So sieht's aus

    Allerdings funktioniert das nicht mit dem Internet-Explorer. Offensichtlich gibt es hier Proleme beim Laden der Tabellen während die Seite selber noch geladen wird. Warum das erste Beispiel ("Einfache Abfrage") dieses Tutorials im Internet-Explorer funktioniert konnte leider nicht nachvollzogen werden. Um die Seite auch für den Internet-Explorer funktionsfähig zu machen gibt es 2 Alternativen:

    Alternative 1

    Wir laden die Tabellen direkt.
  4. Fügen Sie im <head>-Bereich unter der Zeile wo "publicsql.js" geladen wird die folgenden Zeilen ein:

    <script type="text/javascript" src="laender.ptf"></script>
    <script type="text/javascript" src="kontinente.ptf"></script>
    <script language="javascript">
    publicSQL.tableNames["laender"] = 0;
    publicSQL.tableNames["kontinente"] = 1;
    </script>

    Speichern Sie die Datei unter dem Namen "geo2b.htm".

  5. Nun sollte die Anzeige auch im Internet-Explorer korrekt sein. In publicSQL.tableNames stehen die Indizies der Tabellen. Diese werden ansonsten automatisch gesetzt. Wenn wir die Tabellen direkt laden müssen wir - wie hier geschehen - diese selbst setzen. Die erste geladene Tabelle bekommt den Index 0, die zweite den Index 1 usw.

    Anzeigebeispiel: So sieht's aus

    Alternative 2

    Wir führen die Abfrage erst aus, wenn die Seite vollständig geladen ist.

  6. Löschen Sie den Quelltext für die direkte Einbindung der Tabellen wieder aus dem <head> und fügen Sie stattdessen folgende Zeilen nach der Zeile wo "publicsql.js" geladen wird ein:

    <script language="javascript">
    function showTab() {
    publicSQL.query("SELECT kontinente.Kontinent, laender.Land, laender.Einwohner AS 'Millionen-Einwohner' FROM laender, kontinente WHERE kontinente.id = laender.kontid", "publicSQL.show");
    }
    </script>

  7. Löschen Sie die Zeilen im<body>-Bereich. Fügen Sie dem <body>-Tag ein onload-Ereignis hinzu:

    <body onLoad="showTab()">

    Speichern Sie die Datei unter "geo2c.htm" ab.

  8. Die Anzeige sollte auch im Internet-Explorer korrekt sein.

    Anzeigebeispiel: So sieht's aus

Erläuterung

Die Felder der Tabelle laender sind über das Feld kontid mit der Tabelle kontinente verbunden.

In der Abfrage werden mit "SELECT kontinente.Kontinent, laender.Land, laender.Einwohner" die Felder für die Anzeige ausgewählt. Mit "FROM laender, kontinente" werden die relevanten Tabellen angegeben und der WHERE-Teil "kontinente.id = laender.kontid" verbindet die beiden Tabellen miteinander.
Damit die Tabellen erst nach dem vollständigen Laden der Seite geladen werden haben wir die Abfrage in die Funktion showTab() geschrieben. Diese wird über das onload-Ereignis ausgeführt sobald die Seite vollständig geladen wurde.

Such-Funktion

  1. Erstellen Sie eine weitere HTML-Datei mit folgender Zeile im <head>-Bereich:

    <script type="text/javascript" src="publicsql.js"></script>

    <script language="javascript">
    function suchen() {
    var s = "SELECT kontinente.Kontinent, laender.Land FROM kontinente, laender WHERE kontinente.id = laender.kontid";
    s = s + " AND (kontinente.Kontinent = \"" + document.form1.suchText.value + "\"";
    s = s + " OR laender.Land = \"" + document.form1.suchText.value + "\")";
    publicSQL.query(s , "publicSQL.show");
    }
    </script>


    Schreiben Sie im <body>-Bereich die folgenden Zeilen:

    <form action="" name="form1">
    <input name="suchText" type="text">
    <input name="suchButton" type="button" onClick="suchen()" value="Suchen">
    </form>

    Speichern Sie die Datei unter dem Namen "geo3.htm" im selben Verzeichnis.

  2. Rufen Sie die Datei im Browser auf und testen Sie die Suchfunktion aus. Wenn Sie ein Land oder Kontinent zu dem mindestens ein Land existiert eingeben, werden die gefundenen Datensätze in angezeigt..

Anzeigebeispiel: So sieht's aus

Erläuterung

Wir haben ein einfaches Formular erstellt mit einem Textfeld und einem Button. Beim Anklicken des Buttons wird mit der Anweisung onClick="suchen()" die Funktion suchen() augerufen.

In der Funktion suchen() wird in der Variablen s die Select-Anweisung zusammengebaut. Dabei wird im WHERE-Teil abgefragt, ob das Wort im Suchfeld in einem der Felder kontinente.Kontinent oder laender.Land vorkommt. Auf den Text im Suchfeld greifen wir mit document.form1.suchText.value zu.

Beachten Sie, dass die Anführungszeichen mit einem Backslash maskiert wurden. In diesem Fall könnte man das vermeiden indem man entweder bei der Abfrage oder zur Abgrenzung des Javascript-Strings einfache Anführungszeichen benutzt: s = s + " OR laender.Land = ' " + document.form1.suchText.value + "')";

Abfragen testen

  1. Erstellen Sie eine weitere HTML-Datei mit folgender Zeile im <head>-Bereich:

    <script type="text/javascript" src="publicsql.js"></script>

    <script language="javascript">
    function abfrage() {
    publicSQL.query(document.form1.queryText.value, "publicSQL.show");
    }
    </script>

    Schreiben Sie im <body>-Bereich die folgenden Zeilen:

    <form action="" name="form1">
    <input name="queryText" type="text" id="queryText" size="120">
    <input name="queryButton" type="button" id="queryButton" onClick="abfrage()" value="Abfrage">
    </form>

    Speichern Sie die Datei unter dem Namen "geo4.htm" im selben Verzeichnis.

  2. Rufen Sie die Datei im Browser auf und testen Sie die Abfrage-Funktion indem Sie verschiedene SQL-Anweisungen eingeben - beispielsweise:

    SELECT * FROM kontinente
    SELECT * FROM laender
    SELECT id , Land AS "Country", Einwohner AS "(Mio)" FROM laender WHERE kontid = 2
    SELECT Land, Einwohner AS "Mio" FROM laender WHERE Einwohner > 1000

Anzeigebeispiel: So sieht's aus

Balkendiagramm erzeugen

  1. Erstellen Sie eine neue HTML-Datei mit folgender Zeile im <head>-Bereich:

    <script type="text/javascript" src="publicsql.js"></script>

    <script language="javascript">
    function goQuery() {
      publicSQL.query("SELECT laender.Land, laender.Einwohner FROM laender", "showGraphic");
    }
    function showGraphic(t) {
      var myDiv, myText, myArea;
      for (var i=1; i<t.length; i++) {
        myDiv = document.createElement("div");
        myText = document.createTextNode(t[i][0] + ":" + Math.round(t[i][1]));
        myDiv.appendChild(myText);
        myDiv.style.backgroundColor = "rgb(" + (i*8 + 150) + "," + (i*8 + 150) + "," + (i*8 + 150) + ")";
        myDiv.style.width = Math.round(t[i][1] / 1.4) + "px";
        myArea = document.getElementById("Chart");
        myArea.appendChild(myDiv);
      }
    }
    </script>

  2. Fügen Sie dem <body>-Tag ein onload-Ereignis hinzu:

    <body onLoad="goQuery()">

  3. Schreiben Sie folgende Zeilen im <body>-Bereich:

    <p id="Chart"></p>

  4. Speichern Sie die Datei unter dem Namen "geo5.htm" im selben Verzeichnis.

  5. Rufen Sie die Datei "geo5.htm" in Ihrem Browser auf.
    Als Ergebnis sollten Sie eine Balkendiagramm mit den Ländernamen und den Einwohnerzahlen erhalten.

Anzeigebeispiel: So sieht's aus

Erläuterung

Sobald die Seite geladen ist wird die Funktion goQuery() ausgeführt. Diese führt die PublicSQL-Abfrage aus. Für die Auswertung wurde bei der Funktion PublicSQL.query() als 2. Parameter die Funktion showGraphic() angegeben.

In der Funktion showGraphic wird in einer Schleife für jede Tabellenzeile ein DIV-Element mit dem Ländernamen und der Einwohnerzahl (gerundet, in Mio.) als Text erstellt. Die Hintergrund-Farbe des DIV-Elements wird abhängig vom Schleifenzähler errechnet so dass ein Farbverlauf entsteht. Die Breite der DIV-Elemente wird aus der Einwohnerzahl errechnet. Die DIV-Elemente werden an das <p>-Elemtent mit der ID "Chart" angehängt.

 

Anwendung

Um PublicSQL in HTML-Seiten einzubinden muss die Datei "publicsql.js" im HEAD-Bereich eingebunden werden:
<script type="text/javascript" src="publicsql.js"></script>
anschließend kann folgendermaßen auf die Tabellen zugegriffen werden (Beispiel):
publicSQL.query("select * from adressen", "anzeige");
Der 1. Parameter ist ein String mit der SQL-Abfrage, der 2. Paremeter ist der Name der Funktion die anschließend aufgerufen wird. Wichtig: Nach dem Aufruf sollte kein Quelltext mehr erfolgen, vielmehr sollte das Script nach Ausführen der Abfrage durch die Funktion im 2. Parameter weiter aufgeführt werden.

1. Parameter

Der 1. Parameter enthält die SELECT-Anweisung. Diese unterstützt zur Zeit eine Untermenge aus dem SQL92-Standard.

Unterstützte Elemente der SELECT-Anweisung: SELECT, AS, DISTINCT, FROM, WHERE

Strings sollten in Anführungszeichen gesetzt werden. Dies ist auf jeden Fall nötig, wenn diese Leerzeichen oder andere Zeichen(-folgen) enthalten, die auch innerhalb der SELECT-Anweisung eine Bedeutung haben. Es werden einfache (') und doppelte (") Anführungszeichen sowie Backticks (`) unterstützt. Maßgeblich ist das erste gefundene Zeichen - es dürfen also innerhalb einer SELECT-Anweisung nicht unterschiedliche Anführungszeichen zur Eingrenzung von Strings gemischt werden.
Kommen die Anführungszeichen, die zur Eingrenzung eines Strings verwendet werden innerhalb dieses Strings vor, müssen diese durch einen Backslash maskiert werden. Das Gleiche gilt für den Backslash selbst. Beispiel:
SELECT Bezeichnung FROM artikel WHERE Bezeichnung = "ganz \"toller\" Artikel zum halben Preis"
Wird die SQL-Anweisung als String direkt an eine Variable übergeben, müssen die in Javascript als Begrenzer verwendeten Anführungszeichen innerhalb des Strings ebenfalls maskiert werden. Beispiel:
meinsql = "SELECT Name, Bundesland, Ort FROM kunden WHERE Name <> \"Meier\" AND Ort = \"Hannover\" OR Bundesland <> \"Niedersachsen\"";
Auch das Backslash-Zeichen muss natürlich gegebenenfalls maskiert werden, da es ja eine Sonderfunktion hat.
Es bietet sich an, unterschiedliche Anführungszeichen zu verwenden. Beispiel:
meinsql = 'SELECT Name, Bundesland, Ort FROM kunden WHERE Name <> "Meier" AND Ort = "Hannover" OR Bundesland <> "Niedersachsen"';

2. Parameter

Der 2. Parameter enthält den Namen der Funktion, die für die weitere Verarbeitung zuständig ist. Diese Funktion erhält als Parameter ein 2-dimensionalles Array mit den Zeilen und Spalten des Abfrage-Ergebnisses. Die folgende Funktion gibt beispielsweise das Ergebnis in einer vorhandenen Tabelle mit der id "mytable" aus:

function anzeige(t) {
 var i,j;
 var newTR, newTD, newTDText;
 publicSQL.htmlTableDelete("mytable")
 for (i=0; i<t.length; i++) {
  newTR = document.getElementById("mytable").insertRow(i);
  for (j=0; j<t[i].length; j++) {
   newTD = document.createElement("td");
   newTDtext = document.createTextNode(t[i][j]);
   newTD.appendChild(newTDtext);
   newTR.appendChild(newTD);
  }
 }
}

Der HTML-Quelltext für die Tabelle:

<table id="mytable">
 <tr>
  <td>Tabellen-Inhalt vorher</td>
 </tr>
</table>

Sie können als 2. Parameter auch die PublicSQL-Funktion publicSQL.show() angeben.

 

PublicSQL-Referenz

Variablen

porTables

Das Array porTables enthält alle bereits geladenen Tabellen. Das zweidimensionale Array hat den Aufbau:
porTables[Tabellen-Nummer][Tabellen-Inhalt]
Über Tabellen-Nummer erfolgt der Zugriff auf die gewünschte Tabelle. Der Tabellen-Inhalt stellt wiederum ein Array dar. Der Aufbau des Tabellen-Inhalts wird weiter unten beim "Portable Table Format" beschrieben.

publicSQL.tableNames

Array mit den Tabellen-Nummern aller vorhandener Tabellen. Der Zugriff erfolgt über den Tabellenname. Das Ergebnis ist der Index für das Array porTables.
Mit der Anweisung porTables[publicSQL.tableNames["kunden"]] greift man beispielsweise auf die Tabelle kunden zu.

publicSQL.tableExtension

String mit der Dateiendung für PublicSQL-Tabellen. Voreinstellung ist "ptf" für "Portable Table Format".
Der Wert braucht normalerweise nicht geändert zu werden. Wird dieser Wert geändert, darf der Tabellenname ohne Dateiendung noch nicht vorhanden sein. publicSQL identifiziert die Tabellen intern nur nach den Tabellennamen ohne Dateiendung.

publicSQL.htmlStandardTable

String mit Standard-ID für die Funktion show(). Wird in der Funktion show() keine Tabellen-ID angegeben verwendet show() für die Ausgabe die Tabelle mit dieser ID. Existiert diese noch nicht wird Sie erzeugt.

publicSQL.nullValue

String der bei der Ausgabe mit show() für NULL-Werte ausgegeben wird.
Voreinstellung ist '-'.

Funktionen

publicSQL.query(qselect, qfunc)

Führt ein SQL-Abfrage aus.
Der 1. Parameter enthält den SQL-String für die Abfrage.
Der 2. Parameter enthält den Namen der Funktion, die anschließend aufgerufen werden soll. Diese aufzurufende Funktion erhält als ersten Parameter das Abfrageergebnis als 2-dimensionalles Array.

Beispiele

publicSQL.query("SELECT Name, Adresse FROM kunden ", "publicSQL.show");
publicSQL.query("SELECT k.Name, a.Auftragsnummer FROM kunden k, auftrag a WHERE k.ID = a.KundenID", "publicSQL.show");
publicSQL.query("SELECT Name FROM kunden WHERE NOT Name = 'Meier'", "anzeige");

In den ersten beiden Beispielen wird zur Ausgabe der Name der PublicSQL-Funktion show() übergeben. Im letzten Beispiel wird der Name der selbstgeschriebenen Funktion anzeige() übergeben.

SQL-Syntax

Die (gekürzte) Syntax für die SQL-Abfrage lautet:
SELECT [DISTINCT] Auswahl-Liste FROM Tabellen-Liste [WHERE Suchbedingung]
Auswahl-Liste ::= * | Spalte [ { , Spalte }... ]
Spalte ::= Spalten-Element [ [AS] Spalten-Alias]
Spalten-Element ::=
Spalten-Name | Spalten-Name.Tabelle | Spalten-Name.Tabellen-Alias
Tabellen-Liste ::= Tabellen-Element [ { , Tabellen-Element }... ]
Tabellen-Element ::=
Tabelle | Tabelle Tabellen-Alias
Suchbedingung ::= Such-Ausdruck | Such-Ausdruck [ AND | OR ] Suchbedingung

Such-Ausdruck ::= [Linke-Klammern] [NOT] [Linke-Klammern] Wert Vergleichs-Operator Wert [Rechte-Klammern]
Wert ::= Zeichenkette | Zahl |
Spalte
Vergleichs-Operator ::= = | <> | > | < | >= | <=

Zeichenkette ::= "[ { Zeichen }... ]"
Zahl ::=
Ziffer [ { Ziffer }... ] [ . { Ziffer }... ]

Abfrage-Ergebnis

Das Abfrageergebnis enthält in Zeile 0 ein Array mit den Namen der Spalten. Die folgenden Zeilen enthalten ein Array mit den jeweiligen Datensatz. Wird das Array mit dem Abfrageergebnis an die Variable t übergeben, kann folgendermaßen darauf zugegriffen werden:

t[0] = Array mit alle Spalten-Namen
t[1] = Array mit den Feld-Werten der 1. Zeile
t[2] = Array mit den Feld-Werten der 2. Zeile
...
t[t.length] = Array mit den Feld-Werten der letzten Zeile

t[0][0] = Name der 1. Spalte
t[0][1] = Name der 2. Spalte
...
t[0][t[0].length-1] = Name der letzten Spalte

t[1][0] = Wert der 1. Zeile und 1. Spalte
t[1][1] = Wert der 1. Zeile und 2. Spalte
...
t[3][6] = Wert der 3. Zeile und 7. Spalte
...
t[t.length-1][t[0].length-1] = Wert der letzten Zeile und letzten Spalte

publicSQL.show(t, ident)

Zeigt das Abfrageergebnis in Tabellenform an.
Der 1. Parameter enthält das Array mit dem Abfrageergebnis.
Der 2. Parameter enthält entweder einen String mit der ID des <table>-Elements oder den Index der Tabelle (0 für die erste Tabelle, 1 für die 2. Tabelle, usw.) oder das Tabellenelement als Object. Der Parameter ist optional. Wird kein Wert übergeben erstellt die Funktion eine neue Tabelle mit der in publicSQL.htmlStandardTable enthaltenen <table>-ID. Existiert bereits eine Tabelle mit dieser ID, wird diese geleert und für die Anzeige genutzt.

publicSQL.htmlTableDelete(tid)

löscht den Inhalt einer Tabelle.
Der Parameter enthält entweder einen String mit der ID des <table>-Elements oder den Index der Tabelle (0 für die erste Tabelle, 1 für die 2. Tabelle, usw.) oder das Tabellenelement als Object.

publicSQL.arraySort(arr, col, asc)

Mit der Funktion arraySort kann das Abfrageergebnis sortiert werden.
Der 1. Parameter enthält das zu sortierende Abfrageergebnis.
Der 2. Parameter enthält die Spalte-Nummer der zu sortierenden Spalte oder ein Array mit den Spaltennummern der zu sortierenden Spalten.
Der 3. Parameter enthält den Boolean-Wert true wenn aufsteigend sortiert werden soll oder false für absteigende Sortierung oder ein Array mit Boolean-Werten das die Sortierrichtung für die im 2. Parameter übergebenen Spalten enthält. Der Parameter kann auch weggelassen werden, dann wird aufsteigend sortiert.

Beispiele

Bei den nachfolgenden Beispielen steht das Array mit dem Abfrageergebnis in der Variablen t:

aufsteigende Sortierung nach Spalte 1:
publicSQL.arraySort(t, 1);

aufsteigende Sortierung für die Spalte 2, bei gleichen Werten wird weiter nach Spalte 0 sortiert:
var cols = new Array(2,0);
publicSQL.arraySort(t, cols);

absteigende Sortierung nach Spalte 2:
publicSQL.arraySort(t, 2, false);

Unterschiedliche Sortierungs-Richtungen für die Spalten 1, 0,2:
var cols = new Array(1, 0, 2);
var asc = new Array(true, false, true);
publicSQL.arraySort(t, cols, asc);

Portable Table Format

Für die Tabellen in PublicSQL wird das "Portable Table Format" verwendet. Dieses Format orientiert sich am CSV-Format. Da Javascript nur Javascript-Dateien laden kann wurde das Format entsprechend angepasst. Zunächst ein Beispiel:

/* Portable Table Format 0.9 */
porTables[porTables.length] = new Array(
"Name", "Ort",
"Meyer", "Hamburg",
"Müller", "Hamburg",
"Schmidt", "Hamburg",
null, "Buxtehude",
"Müller", null,
"Müller", "Buxtehude",
2);

Die 1. Zeile kennzeichnet das Tabellenformat.
Die 2. Zeile ist immer gleich und darf nicht geändert werden. Hier wird intern ein neues Array erstellt, in dem der Tabelle-Inhalt gespeichert wird.
Die 3. Zeile enthält die Spalten-Namen.
Von der 4. Zeile bis zur vorletzten Zeile befinden sich die eigentlichen Daten der Tabelle. Alle Werte werden durch Komma getrennt. Strings müssen durch einfache oder doppelte Anführungszeichen eingeschlossen werden. Numerische Werte dürfen nicht mit Anführungszeichen begrenzt werden. Wichtig: Auch nach dem letzten Feld in einer Zeile muss noch ein Komma folgen - anders kann Javascript die Tabelle nicht lesen.
Die letzte Zeile enthält die Anzahl Spalten.

Das Portable Table Format unterstützt die Datentypen String, Number, Boolean und undefined.
PublicSQL unterstützt in der aktuellen Version offiziell noch keine Boolean-Werte. Es werden die Datentypen String und Number unterstützt. Datums- und Zeit-Vergleiche können stattfinden, da ein Stringvergleich das gleiche Ergebnis liefert. Felder ohne Inhalt (NULL in SQL) enthalten den Wert null (siehe Beispiel oben). Achtung: null darf nicht in Anführungszeichen eingeschlossen werden und muss klein geschrieben werden!

SQL-Feldtypen in publicSQL-Tabellen:

In der aktuellen Version müssen die Tabellen im gleichen Verzeichnis wie die HTML-Seite liegen. Die Standard-Dateiendung lautet ".ptf". Da die Groß- und Kleinschreibung von Dateinamen nicht von allen Betriebssystemen unterschieden wird sollte auschließlich Kleinschreibung verwendet werden. Auch mit Sonderzeichen im Dateinamen sollte man vorsichtig umgehen und nur solche verwenden, die von allen Betriebssystemen unterstützt werden. Empfohlen wird folgende Syntax:

Die Tabelle, die mit rubriken in der SELECT-Anweisung angesprochen wird, heißt z. B. "rubriken.ptf".
Für spätere Versionen ist auch ein Zugriff auf andere Verzeichnisse oder Websites vorgesehen.

Hinweis:
Im Beispiel oben ist in der ersten Zeile die Versions-Nummer 0.9 angegeben:
/* Portable Table Format 0.9 */
Die erste offizielle Versions-Nummer wird 1.0 sein. Das Portable-Table-Format wurde paralell zu PublicSQL entwickelt. Da bisher noch keiner Erfahrungen mit dem Format gesammelt werden konnten wird zunächst einige die Version 0.9 benutzt.
Sobald die Version 1.0 des Portable-Table-Formats veröffentlicht wird, sollte diese benutzt werden. Sollten sich noch Änderungenen gegenüber der Version 0.9 ergeben wird selbstverständlich die passende PublicSQL-Version parallel aktualisiert.
Hintergrund: Im Gegensatz zu Programmen ist bei Datei-Formaten eine häufige Aktualisierung ein Nachteil: Alle Programme die das Format benutzen müssen angepasst werden und zwischen den verschiedenen Versionen unterscheiden können. Gleichzeitig existieren viele unterschiedliche Versionen von Dateien des Formats. Daher wird Wert darauf gelegt, dass die erste offizielle Version (1.0) eine lange Lebensdauer hat und nicht ständig angepaßt werden muss.