Help:Eigene Maßeinheiten 1.0 - 1.5.6

Dieses Kapitel beschreibt Wege, wie die Anzeige und Umrechnung von Maßeinheiten gesteuert werden kann. Maßeinheiten können für Attribute vom Datentyp Number verwendet werden und ermöglichen flexiblere Annotationen. Jeder Benutzer kann dadurch Daten in seiner bevorzugten Maßeinheit anzeigen und eingeben, ohne dabei die allgemeine Verständlichkeit zu beeinträchtigen. Zum Beispiel geben einige Leute eine Strecke lieber in km als in miles (britische Meile) an, während dies in anderen Fällen vielleicht weniger sinnvoll ist, weil diese beispielsweise nur mehrere µm (Mikrometer) umfasst.

Eigene Maßeinheiten mit Unterstützung für Umrechnungen
SMW bietet bereits mehrere voreingestellte Datentypen, die mit Maßeinheiten umgehen können (z. B. Temperature). Es können jedoch auch einfach neue hinzugefügt werden. Datentypen, die Maßeinheiten unterstützen, können begleitend zum Wert ein Symbol aufnehmen, Umrechnungen vornehmen und die Werte dann in den verschiedenen Maßeinheiten anzeigen. Ein Beispiel hierfür ist die Faktenbox im semanticweb.org-Artikel über Berlin, in dem die Fläche in verschiedenen Flächeneinheiten (km², ha, miles²) angegeben ist.

Um eine solche Funktionalität bereitstellen zu können, muss SMW wissen, wie Werte von der einen Maßeinheit in die andere umgerechnet werden. Dies ist in den meisten Fällen eine eher einfache Angelegenheit, während die Berechnung in manchen Fällen wesentlich komplexer ausfällt. Wir unterscheiden daher zwei Fälle:
 * 1) Die Umrechnung zwischen den gewünschten Maßeinheiten ist proportional, das heißt der Wert in der einen Maßeinheit muss lediglich mit einem konstanten Umrechnungsfaktor multipliziert werden, um den entsprechenden Wert in der anderen Maßeinheit zu erhalten. Ein Beispiel hierfür ist die Umrechnung zwischen Kilometern und Meilen.
 * 2) Die Umrechnung zwischen den gewünschten Maßeinheiten ist nicht proportional und komplexere Berechnungen sind erforderlich. Dies trifft etwa bei der Umrechnung von Celsius und Fahrenheit zu, bei der sowohl eine Addition als auch eine Multiplikation nötig ist.

Für alle proportionalen Umrechnungen gestaltet sich die Erstellung eigener Maßeinheiten mit den entsprechenden Merkmalen sehr einfach. Hiermit werden wir uns im nächsten Abschnitt beschäftigen, bevor wir danach auf Möglichkeiten zu sprechen kommen, wie nicht proportionale Umrechnungen unterstützt werden können (siehe ).

Datentypen mit proportionalen Umrechnungen
Bevor wir die Erstellung eines neuen Datentyps in Angriff nehmen, sollten wir sichergehen, dass ein solcher Datentyp nicht bereits existiert. Hierbei kann uns die Liste aller vorhandenen Datentypen unter Special:Types behilflich sein.

Wenn es den gewünschten Datentyp noch nicht gibt, können wir ihn ganz leicht anlegen. Zunächst legen wir dazu eine Seite im Namensraum für Datentypen an. Als Beispiel möchten wir einen Datentyp power einrichten und erstellen hierzu die Seite Type:Power (bzw. Datentyp:Kraft bei dt. Installationen). Darauf sollten wir zunächst ein paar Worte zum Sinn und Zweck dieses neuen Datentyps verlieren. In unserem Falle würden wir schreiben, dass das physikalische Maß für Leistung gemeint ist, das üblicherweise in Watt angegeben wird. Eine solche Beschreibung erleichtert es später nicht zuletzt anderen Benutzern, diesen Datentyp zu finden und zu verwenden.

Um die unterstützten Maßeinheiten anzugeben, benutzen wir das Spezialattribut corresponds to. Zum Beispiel beschreiben wir die Haupteinheit des neuen Datentyps für Leistung, indem wir


 *  Corresponds to::1 W 

auf der Seite des Datentyps einfügen. Der Wert 1 W legt dabei zwei Dinge fest: Zum einen erkennt der Datentyp die Maßeinheit W als solche, zum anderen leitet er aus der 1 ab, dass es sich um die Haupteinheit (mit dem Umrechnungsfaktor 1) handelt. Genau genommen sagt die Anweisung aus, dass ein Stück der Haupteinheit 1 W entspricht. Somit erweist sich die Festlegung weiterer Maßeinheiten als äußerst simpel, zum Beispiel:


 *  Corresponds to::0.001 kW 
 *  Corresponds to::0.0013410220 PS. 

Hierdurch erkennt der Datentyp ebenso die Maßeinheiten kW und PS und versteht anhand der angegebenen Umrechnungsfaktoren, dass ein Stück der Haupteinheit sowohl 0.001 kW als auch 0.0013410220 PS entspricht. Auf diese Weise kann die Unterstützung beliebig weiterer Maßeinheiten gewährleistet werden, solange die Beziehung zur Haupteinheit proportional ist und sich somit nach diesem Schema beschreiben lässt.

In den meisten Fällen gibt es mehrere gängige Arten, die Maßeinheit zu benennen. So würden wir es unseren Benutzern etwa gerne ermöglichen, statt W auch Watt oder den englischen Plural Watts zu verwenden. Wir könnten zwar ohne Weiteres für jeden dieser Symbole eine corresponds to-Anweisung einfügen, schneller erreichen wir dies jedoch, indem wir diese mit Hilfe eines Kommas als Separator hinter dem bestehenden Wert 1 W einfügen. Wir würden also (statt der beiden obigen Anweisung) schreiben:


 *  Corresponds to::1 W, Watt, Watts 
 *  Corresponds to::0.0013410220 PS, Pferdestärke, Pferdestärken. 

Die erste Angabe in der Anweisung corresponds to:: 1 x1, x2, x3 legt dabei das Standardsymbol für diese Maßeinheit fest. Nachem wir die Seite für diesen neuen Datentyp gespeichert haben, erscheinen die Informationen aus den corresponds to</tt>-Anweisungen auch in der Faktenbox auf dieser Seite. Der Datentyp kann nun wie jeder andere verwendet werden, zum Beispiel indem wir für ein neues Attribut Motorleistung auf der zugehörigen Attributseite unter Property:Motorleistung den Datentyp wie folgt festlegen:


 *  Has type::Power. </tt>

Dieses Attribut wird nun automatisch alle Maßeinheiten erkennen, die wir im Datentyp festgelegt haben, und selbständig Werte in den jeweiligen Maßeinheiten berechnen und ausgeben. Intern werden alle Werte in die Haupteinheit umgerechnet und in dieser Form auch etwa im OWL/RDF-Export angezeigt. Die Anzeige der Maßeinheiten innerhalb des Wikis hingegen ist im hohen Maße anpassbar und muss nicht gezwungenermaßen auf die Haupteinheit eingestellt werden (siehe ).

Datentypen mit nicht proportionalen Umrechnungen
Leider kann jeweils nur ein konstanter Umrechnungsfaktor festgelegt werden. Es ist daher nicht möglich, mit verschiedenen Basen für unterschiedliche Maßeinheiten oder mit logarithmischen Skalen zu arbeiten. Insofern können wir etwa nicht ohne Weiteres einen eigenen Datentyp für Temperaturen anlegen, der Grad Celsius in Fahrenheit umrechnet. Im Falle der Temperaturen stellt SMW zwar bereits einen voreingestellten Datentyp zur Verfügung, in anderen Fällen mag dies jedoch nicht so sein.

SMW sieht keine Möglichkeit vor, eigene nicht proportionale Maßeinheiten innerhalb des Wikis zu beschreiben. Eine provisorische Lösung hierfür besteht darin, den Datentyp Number zu verwenden, der von Natur aus Symbole begleitend zum Wert akzeptiert. Der Datentyp kann zwar keine Umrechnungen vornehmen, erkennt immerhin jedoch das Symbol als solches und kann dementsprechend verschiedene Maßeinheiten auseinanderhalten. So wäre es etwa denkbar, dass sich die Mehrheit einer Benutzergruppe auf eine Maßeinheit einigt, um etwa eine korrekte Sortierung zu gewährleisten. Sollte jemand dennoch einmal eine andere Maßeinheit benutzen, würde es zudem nicht direkt zu einer Verwechslung kommen und der Wert könnte manuell umgerechnet und korrigiert werden.

Eleganter kann die Situation mit Hilfe eines kleinen Skripts gelöst werden, das die benötigten Umrechnungen bereitstellt. Es ist auch nicht sonderlich schwierig, SMW auf diese Weise zu erweitern, da man einfach den entsprechenden Quelltext für den Datentyp Temperature kopieren und anpassen könnte (der einschließlich Kommentaren weniger als 70 Zeilen ausmacht). Sobald ein solcher eigener Datentyp implementiert ist, können die Attribute, die provisorisch auf den Datentyp Number zurückgriffen, ohne negative Auswirkungen auf bestehende Artikel einfach auf den neuen Datentyp umgestellt werden. Eigene Datentypen zeigen sich nämlich wie der Datentyp Number unbeeindruckt, wenn sie auf nicht unterstützten Einheiten stoßen.

Anzeige der Maßeinheiten anpassen
Durch die Verwendung von Gleitkommazahlen kann ein einzelner Datentyp ein breites Spektrum an Maßeinheiten abdecken. Zum Beispiel kann ein einzelner Datentyp für Strecken mühelos sowohl Lichtjahre als auch Nanometer unterstützen. Wenn jemand allerdings ein Attribut Höhe anwendet, um die Höhe eines Gebirges zu beschreiben, wird es kaum dienlich sein, diesen Wert in Lichtjahren oder Nanometern darzustellen.

SMW ermöglicht es daher anzugeben, in welcher der unterstützten Maßeinheit der Wert eines Attributs angezeigt werden soll. Diese Angabe ist spezifisch für das Attribut, denn zwei Attribute können beide den Datentyp  Length  verwenden und trotzdem eine unterschiedliche Darstellung im Wiki erfordern. Wenn diesbezüglich keine Einstellung vorgenommen wurde, wird das Attribut in allen unterstützten Maßeinheiten dargestellt, allen voran in der Haupteinheit (mit dem Umrechnungsfaktor 1).

Um die darzustellende(n) Maßeinheit(en) anzugeben, verwenden wir das Spezialattribut display units</tt> auf der Seite des betreffenden Attributs. Als Wert zählen wir die gewünschten Maßeinheiten auf, jeweils getrennt mit einem Komma. Zum Beispiel könnte die Seite für das Attribut Höhe folgende Anweisung enthalten:


 *  display units::km,ft,miles </tt>

Als Ergebnis würden Werte des Attributs Höhe in der Faktenbox nur noch in jenen drei Maßeinheiten dargestellt werden, auch wenn der dazugehörige Datentyp Length vielleicht Dutzende weitere Maßeinheiten unterstützt. In gleicher Weise würde die Symbolleiste für jedem Wert dieses Attributs die entsprechenden Werte in den drei Maßeinheiten berechnen und anzeigen. Diese Anpassung funktioniert für alle Attribute, die einen numerischen Datentyp verwenden, unabhängig davon ob dieser voreingestellten ist oder selbst erstellt wurde.

Wenn das erste Symbol einer Maßeinheit geändert wird, sollte das bisherige in jedem Falle als mögliches Alternativsymbol belassen werden, da SMW sonst Probleme bei der Umrechnung bestehender Werte haben könnte.