element

Ein Element ist ein Datentyp, der einen Namen besitzt und eine Liste von Kindern, die entweder Strings oder weitere Elemente sein können. Zusätzlich enthalten ist eine Referenz auf das übergeordnete Element, sofern vorhanden. Attribute können zugewiesen werden. Per Default sind Attribute <string ⇒ string> Die Kinder werden wie ein Array durchlaufen. Zusätzlich kann ein element eine vtable mit sich führen, die auf Cd oder map reagiert.

Elemente als XML Repräsentation

html is element("html");

html +: element("body")       // html ist body übergeordnet
html[0]{"background", "#000000"}
html[0] +: element( "h1" );
html[0][0] +: "Hallo Welt";

Elemente können mit Pfaden durchsucht werden:

print html["/body/h1"]$; // Ausgabe: ["Hallo Welt"] (Liste alle h1-Knoten unterhalb von body)

Entsprechend XPath.

Dateisystemzugriffe

dir is element( io("file:///home/xin" ).describe() )

dir ist nun eine Beschreibung von file:///home/xin:

<dir name="xin" path="/home/xin" parent="/home">
  <entry type="file">
    <name>test.g</name>
    <size>123</size>
  </entry>  
  <entry type="dir">
    <name>test</name>
  </entry>  
</dir>

Über die vtable können nun Funktionen aufgerufen werden:

dir.cd( "test" ) // bzw.
dir.:cd( "test" ); // entspricht dir = dir.cd( "test" );

Möchte man eine Datei als XML Representation:

xmlrep is element( io("file:///home/xin/test.txt").read()) )

Erhält man entweder ein unbenanntes Element mit vielen String-Zeilen oder eben die XML-Repräsentation einer gültigen XML-Datei.

Datenbanken

handle is io("mysql://server/database/table" );
tabledesc is element( handle.describe() );

handle.select( "id == 1" ); // SELECT * FROM table WHERE id == 1

liefert

<entity from="table">
  <id>1</id>
  <name>Xin</name>  
  ...
</entity>