-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask06.py
More file actions
146 lines (102 loc) · 5.7 KB
/
Copy pathtask06.py
File metadata and controls
146 lines (102 loc) · 5.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# -*- coding: utf-8 -*-
"""Task06_2025.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1GKS6qAm9T4y76LWtB8ZP-ToTFBSDENE_
**Task 06: Modifying RDF(s)**
"""
#!pip install rdflib
import urllib.request
url = 'https://raw.githubusercontent.com/FacultadInformatica-LinkedData/Curso2025-2026/refs/heads/master/Assignment4/course_materials/python/validation.py'
urllib.request.urlretrieve(url, 'validation.py')
github_storage = "https://raw.githubusercontent.com/FacultadInformatica-LinkedData/Curso2025-2026/master/Assignment4/course_materials"
"""Import RDFLib main methods"""
from rdflib import Graph, Namespace, Literal, XSD
from rdflib.namespace import RDF, RDFS
from validation import Report
g = Graph()
g.namespace_manager.bind('ns', Namespace("http://somewhere#"), override=False)
r = Report()
"""Create a new class named Researcher"""
ns = Namespace("http://mydomain.org#")
g.add((ns.Researcher, RDF.type, RDFS.Class))
for s, p, o in g:
print(s,p,o)
"""**Task 6.0: Create new prefixes for "ontology" and "person" as shown in slide 14 of the Slidedeck 01a.RDF(s)-SPARQL shown in class.**"""
# this task is validated in the next step
ontology = Namespace("http://oeg.fi.upm.es/def/ontology#")
person = Namespace("http://oeg.fi.upm.es/def/people#")
"""**TASK 6.1: Reproduce the taxonomy of classes shown in slide 34 in class (all the classes under "Vocabulario", Slidedeck: 01a.RDF(s)-SPARQL). Add labels for each of them as they are in the diagram (exactly) with no language tags. Remember adding the correct datatype (xsd:String) when appropriate**
"""
# TO DO
g.add((person.Person, RDF.type, RDFS.Class))
g.add((person.Person, RDFS.label, Literal("Person", datatype=XSD.string)))
g.add((person.Professor, RDF.type, RDFS.Class))
g.add((person.Professor, RDFS.subClassOf, person.Person))
g.add((person.Professor, RDFS.label, Literal("Professor", datatype=XSD.string)))
g.add((person.FullProfessor, RDF.type, RDFS.Class))
g.add((person.FullProfessor, RDFS.subClassOf, person.Professor))
g.add((person.FullProfessor, RDFS.label, Literal("FullProfessor", datatype=XSD.string)))
g.add((person.AssociateProfessor, RDF.type, RDFS.Class))
g.add((person.AssociateProfessor, RDFS.subClassOf, person.Professor))
g.add((person.AssociateProfessor, RDFS.label, Literal("AssociateProfessor", datatype=XSD.string)))
g.add((person.InterimAssociateProfessor, RDF.type, RDFS.Class))
g.add((person.InterimAssociateProfessor, RDFS.subClassOf, person.AssociateProfessor))
g.add((person.InterimAssociateProfessor, RDFS.label, Literal("InterimAssociateProfessor", datatype=XSD.string)))
# Visualize the results
for s, p, o in g:
print(s,p,o)
# Validation. Do not remove
r.validate_task_06_01(g)
"""**TASK 6.2: Add the 3 properties shown in slide 36. Add labels for each of them (exactly as they are in the slide, with no language tags), and their corresponding domains and ranges using RDFS. Remember adding the correct datatype (xsd:String) when appropriate. If a property has no range, make it a literal (string)**"""
# TO DO
g.add((person.hasName, RDF.type, RDF.Property))
g.add((person.hasName, RDFS.domain, person.Person))
g.add((person.hasName, RDFS.range, RDFS.Literal))
g.add((person.hasName, RDFS.label, Literal("hasName", datatype=XSD.string)))
g.add((person.hasColleague, RDF.type, RDF.Property))
g.add((person.hasColleague, RDFS.domain, person.Person))
g.add((person.hasColleague, RDFS.range, person.Person))
g.add((person.hasColleague, RDFS.label, Literal("hasColleague", datatype=XSD.string)))
g.add((person.hasHomePage, RDF.type, RDF.Property))
g.add((person.hasHomePage, RDFS.domain, person.FullProfessor))
g.add((person.hasHomePage, RDFS.range, RDFS.Literal))
g.add((person.hasHomePage, RDFS.label, Literal("hasHomePage", datatype=XSD.string)))
# Visualize the results
for s, p, o in g:
print(s,p,o)
# Validation. Do not remove
r.validate_task_06_02(g)
"""**TASK 6.3: Create the individuals shown in slide 36 under "Datos". Link them with the same relationships shown in the diagram."**"""
# TO DO
data = Namespace("http://oeg.fi.upm.es/resource/person/")
g.add((data.Oscar, RDF.type, person.AssociateProfessor))
g.add((data.Oscar, person.hasColleague, data.Asun))
g.add((data.Oscar, person.hasName, Literal("Oscar Corcho García", datatype=XSD.string)))
g.add((data.Oscar, RDFS.label, Literal("Oscar", datatype=XSD.string)))
g.add((data.Asun, RDF.type, person.FullProfessor))
g.add((data.Asun, person.hasColleague, data.Raul))
g.add((data.Asun, person.hasHomePage, Literal("http://www.oeg-upm.net/", datatype=XSD.string)))
g.add((data.Asun, RDFS.label, Literal("Asun", datatype=XSD.string)))
g.add((data.Raul, RDF.type, person.InterimAssociateProfessor))
g.add((data.Raul, RDFS.label, Literal("Raul", datatype=XSD.string)))
# Visualize the results
for s, p, o in g:
print(s,p,o)
r.validate_task_06_03(g)
"""**TASK 6.4: Add to the individual person:Oscar the email address, given and family names. Use the properties already included in example 4 to describe Jane and John (https://raw.githubusercontent.com/FacultadInformatica-LinkedData/Curso2025-2026/master/Assignment4/course_materials/rdf/example4.rdf). Do not import the namespaces, add them manually**
"""
# TO DO
vcard = Namespace("http://www.w3.org/2001/vcard-rdf/3.0/")
foaf = Namespace("http://xmlns.com/foaf/0.1/")
g.namespace_manager.bind("vcard", vcard)
g.namespace_manager.bind("foaf", foaf)
g.add((data.Oscar, vcard.Given, Literal("Oscar", datatype=XSD.string)))
g.add((data.Oscar, vcard.Family, Literal("Corcho García", datatype=XSD.string)))
g.add((data.Oscar, foaf.email, Literal("ocorcho@fi.upm.es", datatype=XSD.string)))
# Visualize the results
for s, p, o in g:
print(s,p,o)
# Validation. Do not remove
r.validate_task_06_04(g)
r.save_report("_Task_06")