Lab Solutions
This page will be updated with Python examples related to the labs as the course progresses.
Examples from the lectures
Lecture 1: Introduction to KGs
Turtle example:
@prefix ex: <http://example.org/> .
ex:Roger_Stone
ex:name "Roger Stone" ;
ex:occupation ex:lobbyist ;
ex:significant_person ex:Donald_Trump .
ex:Donald_Trump
ex:name "Donald Trump" .
Lecture 2: RDF
Blank nodes for anonymity, or when we have not decided on a URI:
from rdflib import Graph, Namespace, Literal, BNode, RDF, RDFS, DC, FOAF, XSD
EX = Namespace('http://example.org/')
g = Graph()
g.bind('ex', EX) # this is why the line '@prefix ex: <http://example.org/> .'
# and the 'ex.' prefix are used when we print out Turtle later
robertMueller = BNode()
g.add((robertMueller, RDF.type, EX.Human))
g.add((robertMueller, FOAF.name, Literal('Robert Mueller', lang='en')))
g.add((robertMueller, EX.position_held, Literal('Director of the Federal Bureau of Investigation', lang='en')))
print(g.serialize(format='turtle'))
Blank nodes used to group related properties:
from rdflib import Graph, Namespace, Literal, BNode, RDF, RDFS, DC, FOAF, XSD
EX = Namespace('http://example.org/')
g = Graph()
g.bind('ex', EX)
# This is a task in Exercise 2
print(g.serialize(format='turtle'))
Literals:
from rdflib import Graph, Namespace, Literal, BNode, RDF, RDFS, DC, FOAF, XSD
EX = Namespace('http://example.org/')
g = Graph()
g.bind('ex', EX)
g.add((EX.Robert_Mueller, RDF.type, EX.Human))
g.add((EX.Robert_Mueller, FOAF.name, Literal('Robert Mueller', lang='en')))
g.add((EX.Robert_Mueller, FOAF.name, Literal('رابرت مولر', lang='fa')))
g.add((EX.Robert_Mueller, DC.description, Literal('sixth director of the FBI', datatype=XSD.string)))
g.add((EX.Robert_Mueller, EX.start_time, Literal(2001, datatype=XSD.integer)))
print(g.serialize(format='turtle'))
Alternative container (open):
from rdflib import Graph, Namespace, Literal, BNode, RDF, RDFS, DC, FOAF, XSD
EX = Namespace('http://example.org/')
g = Graph()
g.bind('ex', EX)
muellerReportArchives = BNode()
g.add((muellerReportArchives, RDF.type, RDF.Alt))
archive1 = 'https://archive.org/details/MuellerReportVolume1Searchable/' \
'Mueller%20Report%20Volume%201%20Searchable/'
archive2 = 'https://edition.cnn.com/2019/04/18/politics/full-mueller-report-pdf/index.html'
archive3 = 'https://www.politico.com/story/2019/04/18/mueller-report-pdf-download-text-file-1280891'
g.add((muellerReportArchives, RDFS.member, Literal(archive1, datatype=XSD.anyURI)))
g.add((muellerReportArchives, RDFS.member, Literal(archive2, datatype=XSD.anyURI)))
g.add((muellerReportArchives, RDFS.member, Literal(archive3, datatype=XSD.anyURI)))
g.add((EX.Mueller_Report, RDF.type, FOAF.Document))
g.add((EX.Mueller_Report, DC.contributor, EX.Robert_Mueller))
g.add((EX.Mueller_Report, SCHEMA.archivedAt, muellerReportArchives))
print(g.serialize(format='turtle'))
Sequence container (open):
from rdflib import Graph, Namespace, Literal, BNode, RDF, RDFS, DC, FOAF, XSD
EX = Namespace('http://example.org/')
g = Graph()
g.bind('ex', EX)
donaldTrumpSpouses = BNode()
g.add((donaldTrumpSpouses, RDF.type, RDF.Seq))
g.add((donaldTrumpSpouses, RDF._1, EX.IvanaTrump))
g.add((donaldTrumpSpouses, RDF._2, EX.MarlaMaples))
g.add((donaldTrumpSpouses, RDF._3, EX.MelaniaTrump))
g.add((EX.Donald_Trump, SCHEMA.spouse, donaldTrumpSpouses))
print(g.serialize(format='turtle'))
Collection (closed list):
from rdflib import Graph, Namespace, Literal, BNode, RDF, RDFS, DC, FOAF, XSD
EX = Namespace('http://example.org/')
g = Graph()
g.bind('ex', EX)
from rdflib.collection import Collection
g = Graph()
g.bind('ex', EX)
donaldTrumpSpouses = BNode()
Collection(g, donaldTrumpSpouses, [
EX.IvanaTrump, EX.MarlaMaples, EX.MelaniaTrump
])
g.add((EX.Donald_Trump, SCHEMA.spouse, donaldTrumpSpouses))
print(g.serialize(format='turtle'))
g.serialize(destination='s02_Donald_Trump_spouses_list.ttl', format='turtle')
print(g.serialize(format='turtle'))