RDF Schema
Ableitungsregeln
Type/subclass
O a C1 .
C1 rdfs:subClassOf C2 .
# Es folgt:
O a C2 .
subClass-transitiv
C1 rdfs:subClassOf C2 .
C2 rdfs:subClassOf C3 .
C1 rdfs:subClassOf C3 .
subClass-reflexiv
O a C .
C rdfs:subClassOf C .
Property
O1 p O2 .
p a rdf:Property .
subProperty
p1 rdfs:subPropertyOf p2 .
O1 p1 O2 .
O1 p2 O2 .
subProperty-Transitivität
p1 rdfs:subPropertyOf p2 .
p2 rdfs:subPropertyOf p3 .
p1 rdfs:subPropertyOf p3 .
Domain & Range
p rdf:type C1 .
a p b .
a rdf:type C1 .
p rdf:type C2 .
a p b .
b rdf:type C2 .
Membership
p rdf:type rdfs:ContainerMembershipProperty .
a p b .
a rdfs:member b .
Properties
Domain & Range
rdfs:domain
rdfs:domain legt den Definitionsbereich einer Property fest.
P rdfs:domain C
P ist eine Instanz der Klasse rdf:Property, C ist eine Instanz der Klasse rdfs:Class. Das bedeutet, dass Ressourcen welche als Subjekt P haben, Instanzen von C sind.
:studies rdfs:domain :Scientist .
:RainerKuhlen :studies :InformationScience .
In diesem Beispiel folgt → :RainerKuhlen ist vom rdf:type :Scientist
rdfs:range
rdfs:range legt den Wertebereich einer Property fest.
P rdfs:range C
P ist eine Instanz der Klasse rdf:Property, C ist eine Instanz der Klasse rdfs:Class. Das bedeutet, dass Ressourcen welche als Objekt P haben, Instanzen von C sind.
:studies rdfs:range :ScientificField .
:RainerKuhlen :studies :InformationScience .
In diesem Beispiel folgt → :InformationScience ist vom rdf:type :ScientificField
Reifikation (rdf:Statement)
Dient dazu Aussagen über Aussagen zu machen.
Beispiel 1
Rainer Kuhlen definiert, dass Information durch einen Neuigkeitswert gekennzeichnet ist.
@prefix : <http://example.com/> .
@prefix rdf: <https://www.w3.org/TR/1999/REC-rdf-syntax-19990222/>
:RainerKuhlen :definiert [
a rdf:Statement ;
rdf:subject :Information ;
rdf:predicate :hatEigenschaft ;
rdf:object :Neuigkeitswert
] .
Beispiel 2
Ferdinand glaubt, dass Charles weiss, dass er seine Theorie kennt.
@prefix : <http://example.com/> .
@prefix rdf: <https://www.w3.org/TR/1999/REC-rdf-syntax-19990222/> .
:Ferdinand :glaubt [
a rdf:Statement ;
rdf:subject :Charles ;
rdf:predicate :weiss ;
rdf:object [
a rdf:Statement ;
rdf:subject :Ferdinand ;
rdf:predicate :kennt ;
rdf:object :TheorieVonCharles
]
] .
Terse RDF Triple Language (Turtle)
Turtle ist eine Syntax um RDF Graphen textlich abzubilden. Ein RDF Graph besteht aus den zwei Knoten über eine gerichtete Kante verbunden (Subjekt, Prädikat, Objekt).
Beispiel eines Turtle Dokuments
@prefix ex: <http://example.org/> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
ex:Bibliothek ex:bibliotheksTyp ex:HochschuleBibliothek .
dc:creator rdf:label "Ferdinand de Saussure"@de ;
:ex:born "2020-02-02"^^xsd:date .
Simples Tripel (x y z .)
Ein simple Aussage besteht aus der Abfolge von Subjekt, Prädikat, Objekt jeweils durch ein Leerzeichen getrennt und abgeschlossen mit einem «.».
<http://example.org/#FerdinandDeSaussure> <http://example.org/#hatBeruf> <http://example.org/#Sprachwissenschaftler>
.
Liste Prädikaten (;)
Oftmals wird das gleiche Subjekt mehrmals wiederholt und mit verschiedenen Prädikaten versehen. Für die Kurzschreibweise kann ein «;» verwendet werden. Dadurch wird das Subjekt wiederholt.
Folgende Beispiele sind in den Aussagen identisch:
<http://example.org/#FerdinandDeSaussure> <http://example.org/#hatBeruf> <http://example.org/#Sprachwissenschaftler>
;
<http://example.org/#geboren> "1857-11-26" .
<http://example.org/#FerdinandDeSaussure> <http://example.org/#hatBeruf> <http://example.org/#Sprachwissenschaftler>
.
<http://example.org/#FerdinandDeSaussure> <http://example.org/#geboren> "1857-11-26" .
Liste Objekte (,)
Oftmals wird das gleiche Objekt mehrmals mit dem gleichen Subjekt und Prädikate wiederholt. Für die Kurzschreibweise kann ein «,» verwendet werden. Dadurch werden Subjekt und Prädikat wiederholt.
Folgende Beispiele sind in den Aussagen identisch:
<http://example.org/#FerdinandDeSaussure> <http://example.org/#name> "Ferdinand de Saussuere",
"弗迪南·德·索緒爾" .
<http://example.org/#FerdinandDeSaussure> <http://example.org/#name> "Ferdinand de Saussuere"
.
<http://example.org/#FerdinandDeSaussure> <http://example.org/#name> "弗迪南·德·索緒爾" .
IRI (Internationalized Resource Identifier)
Eine IRI kann absolut, relativ oder mit einem präfix geschrieben werden. Absolute und relative IRIs sind in «<» und «>» eingeschlossen (z.B. <http://example.org/#name> oder <#name>).
Präfix (@prefix)
Initialisiert wird ein Präfix mittels «@prefix». Das «:» verbindet das Präfix Label und den lokalen Teil.
Folgende Beispiele sind in den Aussagen identisch:
@prefix ex: <http://www.example.org/#> .
ex:FerdinandDeSaussure ex:name "Ferdinand de Saussuere" .
<http://www.example.org/#FerdinandDeSaussure> <http://www.example.org/#name> "Ferdinand de
Saussuere" .
http://www.w3.org/1999/02/22-rdf-syntax-ns#type (a)
Wird an der Prädikatsposition «a» geschrieben steht dies für den IRI http://www.w3.org/1999/02/22-rdf-syntax-ns#type.
Folgende Beispiele sind in den Aussagen identisch:
:FerdinandDeSaussure a :Person .
:FerdinandDeSaussure <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> :Person .
@prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:FerdinandDeSaussure rdf:type :Person .
Basis IRI (@base)
Mittels «@base» wird die Basis IRI festgelegt welche sich darauf auswirkt wie lokale IRIs aufgelöst werden.
@base <http://my.example.org/> .
<FerdinandDeSaussure> <name> "Ferdinand de Saussuere" .
# Wird aufgelöst zu <http://my.example.org/FerdinandDeSaussure> <http://my.example.org/name>
"Ferdinand de Saussuere" .
Literale
Literale enthalten Werte wie Zeichenketten, Zahlen oder Daten.
Literale werden mit Anführungszeichen gekennzeichnet. Zusätzlich kann dem Literal ein Sprachen-Tag mittels «@» oder ein Datentyp IRI mittels «^^» erweitert werden
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:FerdinandDeSaussure rdfs:label "Ferdinand de Saussure"^^xsd:string .
:FerdinandDeSaussure :name "Ferdinand de Saussuere"@de, "弗迪南·德·索緒爾"@zh .
Leere Knoten
Leerer Knoten mit Label (_)
Ein leerer Knoten wird mittels «_:» initialisert gefolgt von einer Zeichenfolge aus Buchstaben und Zahlen.
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
_:deSaussure foaf:knows _:faesch .
_:faesch foaf:knows _:deSaussure .
Leerer Knoten ohne Label ([])
Ein anonymer Knoten wird mittels «[]» initialisiert.
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
[] foaf:knows [ foaf:name "Ferdinand de Saussure" ] .
Leere anonyme Knoten können auch verschachtelt werden.
@prefix foaf:
.
[ foaf:name "Ferdinand de Saussure" ] foaf:knows [
foaf:name "Marie Faesch" ;
foaf:knows [
foaf:name "Jules Faesch" ] ;
foaf:mbox <marie.faesch@example.com> ] .
Das obere Beispiel kann auch so geschrieben werden.
_:a <http://xmlns.com/foaf/0.1/name> "Ferdinand de Saussure" .
_:a <http://xmlns.com/foaf/0.1/knows> _:b .
_:b <http://xmlns.com/foaf/0.1/name> "Marie Faesch" .
_:b <http://xmlns.com/foaf/0.1/knows> _:c .
_:c <http://xmlns.com/foaf/0.1/name> "Jules Faesch" .
_:b <http://xmlns.com/foaf/0.1/mbox> <marie.faesch@example.com> .
Collections ( (:a :b :c) )
Eine Collections wird mittels «()» initialisiert. Eine Collection ist eine «abgeschlossene» Liste von Elementen. Das heisst nach der Definition können ihr keine zusätzlichen Elemente angefügt werden.
@prefix : <http://example.org/foo> .
# Das Objekt dieses Tripels ist das RDF collection blank node.
:subject :predicate ( :a :b :c ) .
# Eine leere Collection (rdf:nil)
:subject :predicate2 () .
Beispiel
:ListOfPhilosophers a ("Ferdinand de Saussure" "Ludwig Wittgenstein" "Charles W. Morris") .
RDF Container
RDF Container repräsentieren Sammlungen von Elementen. Elemente können in einem Container mehrmals vorkommen. Ein Container kann sich selbst enthalten.
Geordneter Conatiner (rdf:Seq)
Mittels dem rdf:Seq werden die lesenden Menschen darauf hingewiesen, dass die Reihenfolge im Container eine Rolle spielt.
:rangliste :hatReihenfolge [
a rdf:Seq;
rdf:_1 :Rainer ;
rdf:_2 :Ferdinand ;
rdf:_3 :Ludwig
] .
Ungeordneter Conatiner (rdf:Bag)
Mittels dem rdf:Bag werden die lesenden Menschen darauf hingewiesen, dass die Reihenfolge im Container keine Rolle spielt.
:Kuhlen :definiertInfoAls [
a rdf:Bag ;
rdf:_1 :Adressatenbezogen ;
rdf:_2 :Neuigkeit ;
rdf:_3 :Kontextabhängig
] .
Container mit Alternativen (rdf:Alt)
Die Elemente im rdf:Alt Container beschreiben meisten Alternativen für typischerweise eine Ressource. Z.B. Übersetzungen.
:Information :hatUebersetzungen [
a rdf:Alt ;
rdf:_1 "Information"@en ;
rdf:_2 "Informazione"@it ;
rdf:_3 "Información"@es
] .
Tools & Weiterführendes
- Referenz Turtle: https://www.w3.org/TR/rdf11-concepts/
- Turtle Syntaxprüfung: http://ttl.summerofcode.be/
- Visualisierung: https://www.ldf.fi/service/rdf-grapher
SPARQL Protocol And RDF Query Language (SPARQL)
SPARQL ist eine Abfragesprache für RDF Graphen mit den Möglichkeiten etwa Konjunktionen oder Disjunktionen abzufragen.
PREFIX
Mittels PREFIX können Kurzschreibweisen erstellt werden.
PREFIX rdfs: <http://www.w3.org/2000/01/rdfschema#>
SELECT * {
?subj rdfs:label ?obj .
}
Variable (? oder $)
Eine Variable wird mittels «?» oder «$» initialisiert. Eingebürgert hat sich die Verwendung von ?. Variablen sind als Subjekt, Prädikat und Objekt zulässig.
SELECT ?var WHERE { … }
Einfaches Query (SELECT … WHERE)
Mit der Klausel SELECT werden die Variablen angegeben, welche im ausgeführten Query angezeigt werden sollen. Mit * werden alle Variablen die in der Anfrage vorkommen ausgegeben.
Mit der Klausel WHERE wird das Anfragemuster definiert. Das Anfragemuster wird in der Turtle Syntax geschrieben.
In diesem Beispiel wird angegeben, dass die Variable ?name im Resultat der Abfrage angezeigt werden soll.
Beispiel 1
RDF Daten
@prefix ex: <http://example.org/> .
@prefix rdfs: <https://www.w3.org/TR/rdf-schema/#>
ex:InformationScientist rdfs:label "Rainer Kuhlen" .
SPARQL Anfrage
SELECT ?name
WHERE
{
ex:InformationScientist rdfs:label ?name .
}
Resultat
name
"Rainer Kuhlen"
Beispiel 2
RDF Daten
@prefix ex: <http://example.org/> .
@prefix rdfs: <https://www.w3.org/TR/rdf-schema/#>
[] rdfs:label "Rainer Kuhlen" ;
a ex:InformationScientist .
[] rdfs:label "Wolfgang Semar" ;
a ex:InformationScientist .
SPARQL Anfrage
SELECT ?name ?type
WHERE
{
?x rdfs:label ?name .
?x a ?type
}
Resultat
name
type
"Rainer Kuhlen"
<http://example.org/InformationScientist>
"Wolfgang Semar"
<http://example.org/InformationScientist>
Beispiel 3
PREFIX dbpedia3: <http://dbpedia.org/ontology/>
SELECT
?person
WHERE {
?person a foaf:Person .
?person dbpedia3:academicDiscipline :Information_Science .
}
Entfernung von Duplikaten (SELECT DISTINCT)
Mittels DISTINCT werden Duplikate aus dem Ergebnis entfernt.
In diesem Beispiel würde, falls die Ressource zweimal gefunden wird, nur einmal ausgegeben.
SELECT DISTINCT ?InformationScientist WHERE{
ex:InformationScientist rdfs:label "Rainer Kuhlen" .
}
Abfrage mit Literalen
Mittels @ wird das Literal auf eine Sprache eingeschränkt.
Mittels ^^ wird das Literal auf einen Datentyp eingeschränkt.
Beispiel 1
Abfrage des lexikalischen Literals «Ferdinand de Saussure» mit dem Sprachen-Tag «en» für Englisch.
SELECT * WHERE {
?subject ?predicate "Ferdinand de Saussure"@en
}
Beispiel 2
Abfrage eines Literals mittels Angabe eines XSD-Datentyps. Hier wird nach dem Datum 1857-11-26 gesucht.
SELECT * WHERE {
:Ferdinand_de_Saussure ?predicate '1857-11-26'^^xsd:date
}
Anzahl Antworten begrenzen (LIMIT)
Mittels «LIMIT» kann begrenzt werden wie viele Antworten auf die gestellte Anfrage geliefert werden sollen.
SELECT * WHERE {
?person a foaf:Person .
} LIMIT 20
Hier werden die Anzahl Antworten auf 20 limitiert.
Optionale Teile eines Anfragemusters (OPTIONAL)
Mittels dem Schlüsselwort OPTIONAL können einer Anfrage zusätzliche Teile angefügt werden.
In folgendem Beispiel wird nach Einträgen gesucht welche vom Typ foaf:Person sind. Ausgegeben wird jeweils der foaf:name der Person. Wenn die Person eine Akademische Disziplin ausübt wird diese ebenfalls ausgegeben.
PREFIX dbpedia3: <http://dbpedia.org/ontology/>
SELECT ?name ?aD WHERE {
?x a foaf:Person .
?x foaf:name ?name .
OPTIONAL{
?x dbpedia3:academicDiscipline ?aD .
}
} LIMIT 50
Kombinierende Teile eines Anfragemusters (UNION)
Mittels dem Schlüsselwort UNION können Teile des Anfragesmusters vereint werden.
In folgendem Beispiel wird nach Museen in Bern und im Tessin gesucht und als eine Liste ausgegeben.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name
WHERE {
{:List_of_museums_in_Bern dbo:wikiPageWikiLink ?name}
UNION
{:List_of_museums_in_Ticino dbo:wikiPageWikiLink ?name}
}
Ergebnisse Filtern (FILTER)
Mittels dem Schlüsselwort FILTER gefolgt von den Filterbedingungen in Klammern, können Teile des Anfragesmusters gefiltert werden.
Filterfunktionen
- Vergleichsoperatoren: <, =, >, <=, >=, !=
- arithmetische Operatoren: +, -, *, /
- Boolesche Operatoren (AND, OR, NOT): &&, ||, !
- RDF: BOUND(A), isIRI(A), isBLANK(A), isLITERAL(A), STR(A), LANG(A), DATATYPE(A), sameTERM(A,B), REGEX(A,B)
In folgendem Beispiel wird nach Personen gesucht welche im Jahr 1990 und später geboren sind.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name ?birthYear WHERE {
?x a foaf:Person ;
foaf:name ?name ;
dbo:birthDate ?birthYear .
FILTER(?birthYear > "1990"^^xsd:date)
} LIMIT 50
In folgendem Beispiel wird nach Personen gesucht welche beim Namen "Ferdinand" enthalten.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name WHERE {
?x a foaf:Person ;
foaf:name ?name .
FILTER(REGEX(?name, "Ferdinand"))
} LIMIT 50
In folgendem Beispiel werden Personen gesucht welche über 100 Jahre alt wurden.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name ?birthDate ?deathDate WHERE {
?x a foaf:Person ;
foaf:name ?name ;
dbo:birthDate ?birthDate ;
dbo:deathDate ?deathDate .
FILTER(YEAR(?deathDate) - YEAR(?birthDate) >= 100)
} LIMIT 50
Reihenfolge der Resultate (ORDER BY)
Mittels dem Schlüsselwort ORDER BY gefolgt von der zu sortierenden Variable und option können die Ergebnisse auf- (ASC) und absteigend (DESC) sortiert werden.
In folgendem Beispiel werden die Resultate aufsteigend sortiert.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name ?birthDate ?deathDate WHERE {
?x a foaf:Person ;
foaf:name ?name ;
dbo:birthDate ?birthDate ;
dbo:deathDate ?deathDate .
FILTER(YEAR(?deathDate) - YEAR(?birthDate) >= 100)
}
ORDER BY ASC (?deatDate)
LIMIT 50
Beschränken der Resultate (LIMIT)
Mittels dem Schlüsselwort Limit gefolgt von einer Zahl lassen sich die Suchresultate auf eine Anzahl reduzieren.
In folgendem Beispiel werden die Resultate 100 Antworten limitiert.
SELECT ?name ?birthDate ?deathDate WHERE {
?x a foaf:Person .
}
LIMIT 100
Überspringen erster Resultate (OFFSET)
Mittels dem Schlüsselwort Offset gefolgt von einer Zahl lässt sich die Position der ersten gelieferten Einträge festlegen.
In folgendem Beispiel werden die ersten 50 Resultate übersprungen. Das bedeutet wenn eine Liste 200 Einträge hat, werden hier die Einträge 51 bis 151 angezeigt.
SELECT ?name ?birthDate ?deathDate WHERE {
?x a foaf:Person .
}
LIMIT 100
OFFSET 50
Zuweisung von Werten an Variabeln (BIND)
Mittels dem Schlüsselwort BIND können Werte in eine neue Variable gespeichert werden (z.B. Berechnungen).
In folgendem Beispiel wird das Alter der Person ausgerechnet als sie starb.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name ?age WHERE {
?x a foaf:Person ;
foaf:name ?name ;
dbo:birthDate ?birthDate ;
dbo:deathDate ?deathDate .
BIND(YEAR(?deathDate) - YEAR(?birthDate) AS ?age)
}
LIMIT 50
Aggregate (GROUP BY … HAVING)
Um Aggregate zu errechnen, wird die Lösung zuerst in Gruppen geteilt, um für jede Gruppe anschliessend den aggregierten Wert zu errechnen.
Unterstütze Aggregate
In folgendem Beispiel wird nach Personen und deren akademischen Feld gruppiert.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?person (COUNT(?aD) as ?anzAD)
WHERE {
?person a foaf:Person ;
dbo:academicDiscipline ?aD .
}
GROUP BY ?person
LIMIT 50
In diesem Beispiel wird zusätzlich HAVING verwendet um nur Personen anzuzeigen welche mehr als drei akademische Felder haben.
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?person (COUNT(?aD) AS ?anzAD)
WHERE {
?person a foaf:Person ;
dbo:academicDiscipline ?aD .
}
GROUP BY ?person
HAVING (COUNT(?aD) > 3)
LIMIT 50
OWL (Web Onotolgy Language)
Klassen (owl:Class)
Klassen in OWL sind vergleichbar mit Klassen in RDFS.
Definition
owl:Class
Beispiel
ex:Pinguin a owl:Class .
Subklassen (rdfs:SubClassOf)
Werden wie in RDFS definiert.
Definition
rdfs:SubClassOf
Beispiel
ex:Pinguin rdfs:subClassOf ex:Tier .
Vordefinierte Klassen (owl:Thing & owl:Nothing)
owl:Thing
Oberklasse aller Klassen. Enthält alle Individuen. Jede Klasse C ist Unterklasse von owl:Thing.
C rdfs:subClassOf owl:Thing .
owl:Nothing
Subklasse aller Klassen. Enthält keine Individuen. Jede Klasse C ist Oberklasse von owl:Nothing.
owl:Nothing rdfs:subClassOf C .
Klassenbeziehungen
Disjunktion: Keine gemeinsamen Elemente (owl:disjointWith)
Zwei Klassen sind disjunkt, wenn sie keine gemeinsamen Elemente beinhalten (leere Schnittmenge).
Definition
owl:disjointWith
Beispiel
fhgr:Dozent rdfs:subClassOf fhgr:Mitarbeiter .
fhgr:Freshman rdfs:subClassOf fhgr:Student .
fhgr:Mitarbeiter owl:disjointWith fhgr:Student .
→ Folgerung Dozent und Freshman sind ebenfalls disjunkt.
Äquivalenz: dieselben Elemente beinhalten (owl:equivalentClass)
Zwei Klassen sind äquivalent, wenn sie dieselben Elemente beinhalten, d.h. Teilmenge der jeweils
anderen Klasse sind.
owl:equivalentClass
Beispiel
fhgr:Buch rdfs:subClassOf fhgr:Publikation .
fhgr:Publikation owl:equivalentClass fhgr:Veröffentlichung .
→ Folgerung fhgr:Buch ist auch Unterklasse von fhgr:Veröffentlichung.
Logische Konstruktoren
Erzeugung komplexer Klassen aus einfachen Klassen mittels logischer Konstruktoren
Konjunktion: Und (owl:intersectionOf)
Umfasst alle Objekte zweier Klassen, die gleichzeitig zu beiden Klassen gehören
Definition
owl:intersectionOf
Beispiel
fhgr:DozentDAViS rdf:type owl:Class ;
owl:equivalentClass [
rdf:type owl:Class ;
owl:intersectionOf ( fhgr:Dozent fhgr:MitarbeiterDAViS )
] .
→ Folgerung: jede(r) :DozentDAViS ist :Dozent und :MitarbeiterDAViS
→ Folgerung: jede(r) :Dozent
und
:MitarbeiterDAViS ist auch :DozentDAViS
Disjunktion: Oder (owl:unionOf)
Umfasst alle Objekte mehrerer Klassen, die zu (mindestens) einer der Klassen gehören
Definition
owl:unionOf
Beispiel
fhgr:Mitarbeiter rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Class ;
owl:unionOf ( fhgr:Dozentin fhgr:Assistentin fhgr:Sekretärin
)
] .
→ Folgerung: jede(r) :Dozentin, :Assistentin und :Sekretärin ist :Mitarbeiter
Komplement: Nicht (owl:complementOf)
Umfasst alle Objekte die nicht zu einer Klasse gehören
Definition
owl:complementOf
Beispiel
fhgr:Dozent rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Class ;
owl:complementOf fhgr:Student
] .
→ Folgerung: Kein :Dozent ist :Student
Individuen (owl:NamedIndividual)
Vergleichbar mit Objekten in RDFS. Muss nicht zwingend angegeben werden
Definition
owl:NamedIndividual
Beispiel einer Instanz
ex:Pingu a owl:NamedIndividual , ex:Pinguin .
Gleichheit (owl:sameAs)
Besagt, dass zwei Individuen identisch sind (Eigentlich zwei Bezeichner bezeichnen dasselbe Individum). Behebt Problematik non unique naming assumption.
Definition
owl:sameAs
Beispiel
ch:Graubünden owl:sameAs ch:Grischun .
Ungleichheit (owl:differentFrom)
Gegenteil von owl:sameAs.
Definition
owl:differentFrom
Beispiel
ch:Chur owl:differentFrom ch:Bern .
Einfachere Notation für viele Individuen
Verschiedenheit einer Menge von Individuen mithilfe von Listen.
owl:AllDifferent / owl:distinctMembers
Beispiel
[] rdf:type owl:AllDifferent ;
owl:distinctMembers ( ex:Fisch ex:Säugetier ex:Amphibie ) .
Individuen als Klassen (owl:oneOf)
Definition von Klassen durch Aufzählung der darin enthaltenen Individuen.
Definition
owl:oneOf
Beispiel
fhgr:TeamDAViS owl:equivalentClass [
owl:oneOf ( fhgr:Rölke fhgr:Mundani fhgr:Burch )
] .
→ Folgerung: fhgr:TeamDAViS besteht aus fhgr:Rölke, fhgr:Mundani und fhgr:Burch
Rollen
Sind Properties wie in RDFS, allerdings wird zwischen zwei Arten von Rollen unterschieden. Beides ist Unterklasse von rdf:Property. Beschränkungen werden wie bei RDFS definiert (rdfs:domain, rdfs:range).
Abstrakte Rolle (owl:ObjectProperty)
Verbindet Individuen mit Individuen.
owl:ObjectProperty
Beispiel
ex:lehrt rdf:type owl:ObjectProperty ;
rdfs:domain fhgr:Person ;
rdfs:range fhgr:Vorlesung .
fhgr:Mundani fhgr:lehrt fhgr:SESY .
Konkrete Rolle (owl:DatatypeProperty)
Verbindet Individuen mit Datenwerten (Elementen von Datentypen).
owl:DatatypeProperty
Beispiel
fhgr:hatBüro rdf:type owl:DatatypeProperty ;
rdfs:domain fhgr:Person ;
rdfs:range xsd:string .
fhgr:Mundani fhgr:hatBüro "B4.05" .
Gleichheit (owl:equivalentProperty)
besagt, dass zwei Rollen identisch sind (d.h. zwei Bezeichner bezeichnen dieselbe Rolle).
Definition
owl:equivalentProperty
Beispiel
fhgr:lehrt owl:equivalentProperty ch:unterrichtet .
Ungleichheit (owl:differentFrom)
Gegenteil von owl:sameAs.
Definition
owl:differentFrom
Beispiel
ch:Chur owl:differentFrom ch:Bern .
Symmetrische Rolle (owl:symmetricProperty)
Nur abstrakte Rollen dürfen symmetrisch, inverse und transitiv sein
Definition
owl:symmetricProperty
Beispiel
fhgr:teiltBüroMit rdf:type owl:symmetricProperty .
fhgr:Mundani fhgr:teiltBüroMit fhgr:Rölke .
→ Folgerung: fhgr:Rölke fhgr:teiltBüroMit fhgr:Mundani
Inverse Rolle (owl:inverseOf)
Nur abstrakte Rollen dürfen symmetrisch, inverse und transitiv sein
Definition
owl:inverseOf
Beispiel
fhgr:betreut owl:inverseOf fhgr:wirdBetreut .
fhgr:Dozent fhgr:betreut fhgr:Student .
→ Folgerung: fhgr:Student fhgr:wirdBetreut fhgr:Dozent
Transitive Rolle (owl:TransitiveProperty)
Nur abstrakte Rollen dürfen symmetrisch, inverse und transitiv sein
Definition
owl:TransitiveProperty
Beispiel
fhgr:kennt rdf:type owl:TransitiveProperty .
fhgr:Mundani fhgr:kennt fhgr:Rölke .
fhgr:Rölke fhgr:kennt fhgr:Barkow .
→ Folgerung: fhgr:Mundani fhgr:kennt fhgr:Barkow
Funktionale Rolle (owl:FunctionalProperty)
Besagt, dass eine Rolle einen eindeutigen Wert hat (d.h. aus A steht in Beziehung zu B und A steht in Beziehung zu C folgt, dass B und C identisch sind)
Definition
owl:FunctionalProperty
Beispiel
ch:hatHauptort rdf:type owl:FunctionalProperty .
ch:Graubünden ch:hatHauptort ch:Chur .
ch:Graubünden ch:hatHauptort ch:Cuira .
→ Folgerung: ch:Chur owl:sameAs ch:Cuira
Inverse Funktionale Rolle (owl:InverseFunctionalProperty)
besagt, dass eine Rolle ein Argument eindeutig identifiziert (d.h. aus A steht in Beziehung zu C und B steht in Beziehung zu C folgt, dass A und B identisch sind)
Definition
owl:InverseFunctionalProperty
Beispiel
ch:istHauptortVon rdf:type owl:InverseFunctionalProperty .
ch:Chur ch:istHauptortVon ch:Graubünden .
ch:Cuira ch:istHauptortVon ch:Graubünden .
→ Folgerung: ch:Chur owl:sameAs ch:Cuira
Rollenbeschränkungen
Können auf Klassen (owl:Class) oder Definitions uns Wertebereiche (rdfs:domain, rdfs:range) angewandt werden. Können auch geschachtelt werden.
Aufbau von Restriktionen:
- Angabe der Rolle (owl:onProperty), auf die sich die Restriktion bezieht
- Angabe der Beschränkung auf
- Werte (owl:allValuesFrom, owl:someValuesFrom)
- Kardinalitäten (owl:minCardinality, owl:maxCardinality, owl:Cardinality)
- Kardinalitäts- und Wertrestriktionen sind nicht kombinierbar
owl:allValuesFrom
Deklaration von Aussagen über alle Elemente einer Klasse. Das bedeutet, alle Werte müssen einer bestimmten Klasse angehören
Beispiel
kochen:vegRezept rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty kochen:hatZutat ;
owl:allValuesFrom kochen:Gemüse
] .
owl:someValuesFrom
Deklaration von Aussagen über mindestens ein Element einer Klasse. Das bedeutet, mindestens ein Wert muss einer bestimmten Klasse angehören.
Beispiel
sport:Ballsport rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty sport:benötigt ;
owl:someValuesFrom sport:Ball
] .
→ Folgerung: für Ballsportarten wird ein Ball benötigt
owl:hasValue
Sonderfall: existentielle Quantifizierung (owl:hasValue). Problem: owl:someValuesFrom benötigt Klasse als Objekt
Beispiel
fhgr:Prüfung rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty fhgr:hatPrüfer ;
owl:hasValue fhgr:Mundani
] .
→ Folgerung: jede fhgr:Prüfung hat fhgr:Mundani als Prüfer
owl:maxCardinality
Deklaration von Aussagen über obere Schranken von Elementen einer Klasse. Das bedeutet, es darf höchstens xx Werte geben
Beispiel
fhgr:BachelorArbeit rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty fhgr:hatReferent ;
owl:maxCardinality 2^^xsd:nonNegativeInteger
] .
→ Folgerung: jede fhgr:BachelorArbeit hat höchstens zwei Referenten
owl:minCardinality
Deklaration von Aussagen über untere Schranken von Elementen einer Klasse. Das bedeutet, es muss mindestens xx Werte geben
Beispiel
fhgr:Prüfung rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty fhgr:hatThemen ;
owl:minCardinality 5^^xsd:nonNegativeInteger
] .
→ Folgerung: jede fhgr:Prüfung hat mindestens fünf Themengebiete
owl:cardinality
Deklaration von Aussagen über exakte Kardinalitäten von Elementen einer Klasse. Das bedeutet, es muss exakt xx Werte geben
Beispiel
bio:Mensch rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty bio:hatMutter ;
owl:cardinality 1^^xsd:nonNegativeInteger
] .
→ Folgerung: jeder :Mensch hat genau eine (biologische) Mutter
owl:hasSelf
Beispiel
ex:Narzisst rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty ex:liebt ;
owl:hasSelf "true"^^xsd:boolean
] .
owl:dataRange
Beispiel
fhgr:Fresh-wo-man rdf:type owl:Class ;
owl:subClassOf [
rdf:type owl:Restriction ;
owl:onProperty fhgr:studiertImSemester
owl:dataRange ( "1"^^xsd:integer "2"^^xsd:integer )
] .
owl:withRestrictions
Neue Datentypen als Teilmenge bereits existierender Datentypen
Beispiel
tv:PrimeTime rdf:type rdfs:Datatype ;
owl:equivalentClass [
rdf:type rdfs:Datatype ;
owl:onDatatype xsd:integer ;
owl:withRestrictions (
[ xsd:minInclusive "20"^^xsd:integer ]
[ xsd:maxInclusive "23"^^xsd:integer ]
)
] .
tv:Abendprogramm rdf:type owl:Class ;
owl:equivalentClass [
rdf:type owl:Restriction ;
owl:onProperty tv:hatSendezeit ;
owl:someValuesFrom tv:PrimeTime
] .
owl:NegativePropertyAssertion
negative Rollenaussagen. Drückt aus, dass zwei Individuen nicht durch eine Rolle in Beziehung stehen.
Beispiel
[] rdf:type owl:NegativePropertyAssertion ;
owl:sourceIndividual ex:Romulus ;
owl:assertionProperty ex:istVaterVon ;
owl:targetIndividual ex:Remus .
owl:propertyChainAxiom
Liste von Rollen, die sequentiell ausgewertet werden.
Beispiel
Das Kind eines Kindes ist ein Enkel.
owl:propertyChainAxiom ( ex:hatKind ex:hatKind ) ;
owl:subPropertyOf ex:hatEnkel .
Der Feind meines Freundes ist mein Feind.
owl:propertyChainAxiom ( ex:hatFreund ex:hatFeind ) ;
owl:subPropertyOf ex:hatFeind .
Links
Sematic Web Rule Language (SWRL)
SWRL ist eine Regelsprache welche von vielen Reasoner unterstützt wird. Mit ihr lassen sich mittels Regeln Beziehungen modellieren, welche mit OWL nicht modellierbar sind.
Die Grundsyntax hat die Form Vorausgegangenes ⇒ Konsequenz. Variablen beginnen mit einem ?. Es können ausschliesslich Konjunktionen (UND, ^) verwendet werden.
Beispiel
elternteil(?x,?y) ∧ bruder(?y,?z) ⇒ onkel(?x,?z)
Vom RDF Tripel zum SWRL Baustein
Einstelliges Prädikat (OWL Klassen)
ex:Rainer_Kuhlen a ex:Scientist .
Scientist(Rainer_Kuhlen)
Zweistelliges Prädikat (OWL Object- / Datatypeproperties)
ex:Rainer_Kuhlen ex:lehrt ex:Informationswissenschaft ;
ex:geburtstag '1944-01-07'^^xsd:date .
lehrt(Rainer_Kuhlen, Informationswissenschaft)
geburtstag(Rainer_Kuhlen, 1944-01-07)
Gleichheit und Verschiedenheit
Mit sameAs und differentFrom wird auf Gleichheit resp. Verschiedenheit überpüft.
Gleichheit
Wahr wenn beide Ressourcen die gleiche ISBN haben.
isbn(?x,?n) ^ isbn(?y,?n) → sameAs(?x,?y)
Verschiedenheit
Wahr wenn beide Ressourcen (?x, ?y) unterschiedlich sind.
hatMutter(?x,?z) ^ hatMutter(?y,?z) ^ differentFrom(?x,?y) → hatGeschwister(?x,?y) ^ hatGeschwister(?y,?x)
Negation
SWRL hat keine Möglichkeit der Negation. Mithilfe von owl:complementOf kann dies trotzdem bewerkstelligt werden.
Beispiel
«Lebewesen, die im Wasser leben, sind keine Menschen»
ex:keinMensch owl:complementOf ex:Mensch .
Lebewesen(?x) ^ lebtIn(?x,Wasser) ⇒ keinMensch(?x)
Built-Ins
Built-Ins dienen um komplexe Operationen möglich zu machen wie z.B. Arithmetische Operationen. Mittels Built-Ins können freie Variablen gebunden werden.
Beispiel
Hier wird das Alter einer Person in Jahre zum Alter der Person in Sekunden umgerechnet. ?sekunden entspricht hier der freien Variable welche mit dem Produkt (?alter * 86400) belegt wird.
hatAlter(?person,?alter) ^ swrlb:multiply(?sekunden,?alter,86400) → alterInSekunden(?person,?sekunden)
Liste Built-Ins
Semantic Query-Enhanced Web Rule Language (SQWRL)
Abfragesprache für semantische Schlussfolgerungen (inkl. Regeln)
sqwrl:select
Erlaubt die Selektion von Ergebnissen.
hatBeruf(?x,?y) → sqwrl:select(?x)
sqwrl:orderBy
Sortiert Ergebnisse aufsteigend.
hatAlter(?x,?age) ^ swrlb:greaterThan(?age,25) → sqwrl:select(?x,?age) ^ sqwrl:orderBy(?age)
sqwrl:count
Zählt Ergebnisse.
Mensch(?x) → sqwrl:count(?x)
Aggregation
- sqwrl:min
- sqwrl:max
- sqwrl:sum
- sqwrl:avg
Person(?x) ^ hatAlter(?x,?age) → sqwrl:avg(?age)
Quellen: https://www.w3.org/TR/rdf-schema/, https://www.w3.org/TR/2013/REC-sparql11-overview-20130321/