Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .idea/Curso2025-2026-DataScience.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

47 changes: 47 additions & 0 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

152 changes: 152 additions & 0 deletions Assignment4/Assigment4_Pablo_GranoDeOro_24C047/task06.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# -*- coding: utf-8 -*-
"""Task06.ipynb

Automatically generated by Colab.

Original file is located at
https://colab.research.google.com/drive/18YzMnyRdqtOpVefxMgfXE84uTL03oXGj

**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.**"""

ontology = Namespace("http://www.oeg-upm.net/Ontology#")
person = Namespace("http://www.oeg-upm.net/Person#")

g.bind("ontology", ontology)
g.bind("person", person)

"""**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**

"""

PEOPLE = Namespace("http://oeg.fi.upm.es/def/people#")
g.bind("people", PEOPLE)


person = PEOPLE.Person
g.add((person, RDF.type, RDFS.Class))
g.add((person, RDFS.label, Literal("Person", datatype=XSD.string)))


professor = PEOPLE.Professor
g.add((professor, RDF.type, RDFS.Class))
g.add((professor, RDFS.label, Literal("Professor", datatype=XSD.string)))
g.add((professor, RDFS.subClassOf, person))


associate = PEOPLE.AssociateProfessor
g.add((associate, RDF.type, RDFS.Class))
g.add((associate, RDFS.label, Literal("AssociateProfessor", datatype=XSD.string)))
g.add((associate, RDFS.subClassOf, professor))


interim = PEOPLE.InterimAssociateProfessor
g.add((interim, RDF.type, RDFS.Class))
g.add((interim, RDFS.label, Literal("InterimAssociateProfessor", datatype=XSD.string)))
g.add((interim, RDFS.subClassOf, associate))


full = PEOPLE.FullProfessor
g.add((full, RDF.type, RDFS.Class))
g.add((full, RDFS.label, Literal("FullProfessor", datatype=XSD.string)))
g.add((full, RDFS.subClassOf, professor))

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)**"""

hasName = PEOPLE.hasName
g.add((hasName, RDF.type, RDF.Property))
g.add((hasName, RDFS.label, Literal("hasName", datatype=XSD.string)))
g.add((hasName, RDFS.domain, person))
g.add((hasName, RDFS.range, RDFS.Literal))

hasColleague = PEOPLE.hasColleague
g.add((hasColleague, RDF.type, RDFS.subPropertyOf))
g.add((hasColleague, RDFS.label, Literal("hasColleague", datatype=XSD.string)))
g.add((hasColleague, RDFS.domain, person))
g.add((hasColleague, RDFS.range, person))

hasHomePage = PEOPLE.hasHomePage
g.add((hasHomePage, RDF.type, RDFS.subPropertyOf))
g.add((hasHomePage, RDFS.label, Literal("hasHomePage", datatype=XSD.string)))
g.add((hasHomePage, RDFS.domain, full))
g.add((hasHomePage, RDFS.range, RDFS.Literal))

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."**"""

RES = Namespace("http://oeg.fi.upm.es/resource/person/")

oscar = RES.Oscar
g.add((oscar, RDF.type, full))
g.add((oscar, RDFS.label, Literal("Oscar", datatype=XSD.string)))
g.add((oscar, hasColleague, RES.Asun))
g.add((oscar, hasName, Literal("Oscar García", datatype=XSD.string)))


asun = RES.Asun
g.add((asun, RDF.type, full))
g.add((asun, RDFS.label, Literal("Asun", datatype=XSD.string)))
g.add((asun, hasColleague, oscar))
g.add((asun, hasHomePage, Literal("https://www.oeg-upm.net/", datatype=XSD.string)))


raul = RES.Raul
g.add((raul, RDFS.label, Literal("Raul", datatype=XSD.string)))
g.add((raul, RDF.type, interim))
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**

"""

VCARD = Namespace("http://www.w3.org/2001/vcard-rdf/3.0/")
FOAF = Namespace("http://xmlns.com/foaf/0.1/")

g.add((oscar, VCARD.Given, Literal("Oscar", datatype=XSD.string)))
g.add((oscar, VCARD.Family, Literal("García", datatype=XSD.string)))
g.add((oscar, FOAF.email, Literal("oscar@upm.es", datatype=XSD.string)))

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")
Loading