Best Practice


  1. Wie bekomme ich meine Daten ins Semantic Web

    1. Was benötigt ihr System

    2. Herunterladen der Applikation

    3. Entpacken der Applikation

    4. Erzeugen eines MappingFile

      1. Automatisch erzeugtes MappingFile

      2. Konfigurieren des MappingFile

      3. Erzeugen der RDF Datei





ConditionalMappings

Manchmal sollen nur bestimmte Informationen einer Datenbank verfügbar sein, da Teile davon vertraulich bzw. nicht für alle sichtbar sein soll. Mit einer d2rq:condition können Bedingungen eingestellt werden, die von allen zugänglichen Daten erfüllt werden müssen.

Eine d2rq:condition kann auf ClassMap und PropertyBridge Ebene verwendet werden. Der d2rq:condition Wert ist als eine zusätzliche SQL WHERE Bedingung zu allen Anfragen, die die ClassMap bzw. PropertyBridge verwenden hinzugefügt. Falls die Bedingung nicht erfüllt wird für eine SQL Result Set Reihe, so werden keine Daten von dieser Reihe erzeugt.

Beispiel: d2rq:condition bei einer d2rq:ClassMap

map:Paper a d2rq:ClassMap;
            d2rq:class :Paper;
            d2rq:uriPattern "http://www.conference.org/conf02004/paper#Paper@@Papers.PaperID@@";
            d2rq:condition "Papers.Publish = 1";
            d2rq:dataStorage map:Database1.

Nur die Papers mit dem Wert 1 in der Papers.Publish Spalte werden verwendet. Alle anderen Papers werden ignoriert.

Beispiel: Filtern von Strings mit keiner Länge

Normalerweise wird in Datenbanken der Wert NULL verwendet, falls das Feld keinen Wert hat oder der Wert dieses Feldes nicht bekannt ist. Manche Datenbanken verwenden aber stattdessen einen String mit keiner Länge (""). D2RQ erzeugt allerdings keine RDF Statements von NULL Werten, allerdings werden Strings mit keiner Länge erkannt und es werden Statements wie beispielsweise :Person123 :firstName "". erzeugt, falls der Vorname der Person ein String mit keiner Länge ist.

Um solche Statements zu verhinder, kann eine d2rq:condition zu einer PropertyBridge hinzugefügt werden:

map:PersonsClassFirstName a d2rq:PropertyBridge;
            d2rq:property :firstName;
            d2rq:column "Persons.FirstName";
            d2rq:belongsToClassMap map:PersonsClassMap;
            d2rq:condition "Persons.FirstName <> ''".

Beispiel: Relationship type codes

Es gibt eine Tabelle Rel_Paper_Topic die Reihen von einer Paper Tabelle mit Reihen einer Topics Tabelle verbindet. Die Rel_Paper_Topic Tabelle enthält eine PaperID Spalte, die zu Papers referenziert, eine TopicID Spalte, die zu den Topics referenziert und eine RelationshipType Spalte, die 1 enthält, falls das Topic ein primäres Topic des Papers ist und 2 falls es sich um ein sekundäres Topic handelt.

Für primäre Topics soll die :primaryTopic Eigenschaft verwendet werden und für die anderen die :secondaryTopic Eigenschaft.

Diese Problem kann man mit zwei PropertyBridges lösen. Eine für :primaryTopic und eine für :secondaryTopic. In beiden PropertyBridges wird eine d2rq:condition hinzugefügt um jeweils die Statements zu unterbinden, die einen falschen RelationsipType haben.


map:primaryTopic a d2rq:PropertyBridge;
            d2rq:belongsToClassMap map:Paper;
            d2rq:property :primaryTopic;
            d2rq:refersToClassMap map:Topic;
            d2rq:join "Papers.PaperID = Rel_Paper_Topic.PaperID";
            d2rq:join "Rel_Paper_Topic.TopicID = Topics.TopicID";
            d2rq:condition "Rel_Paper_Topic.RelationType = 1".

map:secondaryTopic a d2rq:PropertyBridge;
            d2rq:belongsToClassMap map:Paper;
            d2rq:property :secondaryTopic;
            d2rq:refersToClassMap map:Topic;
            d2rq:join "Papers.PaperID = Rel_Paper_Topic.PaperID";
            d2rq:join "Rel_Paper_Topic.TopicID = Topics.TopicID";
            d2rq:condition "Rel_Paper_Topic.RelationType = 2".