|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +"""task06.py |
| 3 | +
|
| 4 | +Automatically generated by Colab. |
| 5 | +
|
| 6 | +Original file is located at |
| 7 | + https://colab.research.google.com/drive/107-7n1v0TnGM56KiXLUxrwTFF5U3qWnr |
| 8 | +""" |
| 9 | + |
| 10 | +#!pip install rdflib |
| 11 | + |
| 12 | +import rdflib |
| 13 | +print(rdflib.__version__) |
| 14 | + |
| 15 | +import urllib.request |
| 16 | + |
| 17 | +url = 'https://raw.githubusercontent.com/FacultadInformatica-LinkedData/Curso2025-2026/refs/heads/master/Assignment4/course_materials/python/validation.py' |
| 18 | +urllib.request.urlretrieve(url, 'validation.py') |
| 19 | + |
| 20 | +from validation import Report |
| 21 | + |
| 22 | +from rdflib import Graph, Namespace, Literal, XSD |
| 23 | +from rdflib.namespace import RDF, RDFS |
| 24 | +from validation import Report |
| 25 | + |
| 26 | + |
| 27 | +g = Graph() |
| 28 | + |
| 29 | +r = Report() |
| 30 | + |
| 31 | +ns = Namespace("http://mydomain.org#") |
| 32 | +g.namespace_manager.bind('ns', ns, override=False) |
| 33 | + |
| 34 | + |
| 35 | +g.add((ns.Researcher, RDF.type, RDFS.Class)) |
| 36 | +for s, p, o in g: |
| 37 | + print(s, p, o) |
| 38 | + |
| 39 | +ontology = Namespace("http://www.oeg-upm.net/Ontology#") |
| 40 | +person = Namespace("http://oeg.fi.upm.es/def/people#") |
| 41 | + |
| 42 | +g.namespace_manager.bind('ontology', ontology) |
| 43 | +g.namespace_manager.bind('person', person) |
| 44 | + |
| 45 | +# Clases |
| 46 | +g.add((person.Person , RDF.type, RDFS.Class)) |
| 47 | +g.add((person.Professor , RDF.type, RDFS.Class)) |
| 48 | +g.add((person.FullProfessor , RDF.type, RDFS.Class)) |
| 49 | +g.add((person.AssociateProfessor , RDF.type, RDFS.Class)) |
| 50 | +g.add((person.InterimAssociateProfessor , RDF.type, RDFS.Class)) |
| 51 | + |
| 52 | +# Etiquetas |
| 53 | +g.add((person.Person, RDFS.label, Literal("Person", datatype=XSD.string))) |
| 54 | +g.add((person.Professor, RDFS.label, Literal("Professor", datatype=XSD.string))) |
| 55 | +g.add((person.FullProfessor, RDFS.label, Literal("FullProfessor", datatype=XSD.string))) |
| 56 | +g.add((person.AssociateProfessor, RDFS.label, Literal("AssociateProfessor", datatype=XSD.string))) |
| 57 | +g.add((person.InterimAssociateProfessor, RDFS.label, Literal("InterimAssociateProfessor", datatype=XSD.string))) |
| 58 | + |
| 59 | +# Subclases |
| 60 | +g.add((person.Professor, RDFS.subClassOf, person.Person)) |
| 61 | +g.add((person.FullProfessor, RDFS.subClassOf, person.Professor)) |
| 62 | +g.add((person.AssociateProfessor, RDFS.subClassOf, person.Professor)) |
| 63 | +g.add((person.InterimAssociateProfessor, RDFS.subClassOf, person.AssociateProfessor)) |
| 64 | + |
| 65 | +r.validate_task_06_01(g) |
| 66 | + |
| 67 | +# Propiedades |
| 68 | +g.add((person.hasName , RDF.type, RDF.Property)) |
| 69 | +g.add((person.hasHomePage , RDF.type, RDF.Property)) |
| 70 | +g.add((person.hasColleague , RDF.type, RDF.Property)) |
| 71 | + |
| 72 | +# Labels |
| 73 | +g.add((person.hasName, RDFS.label, Literal("hasName", datatype=XSD.string))) |
| 74 | +g.add((person.hasHomePage, RDFS.label, Literal("hasHomePage", datatype=XSD.string))) |
| 75 | +g.add((person.hasColleague, RDFS.label, Literal("hasColleague", datatype=XSD.string))) |
| 76 | + |
| 77 | +# Dominios |
| 78 | +g.add((person.hasName, RDFS.domain, person.Person)) |
| 79 | +g.add((person.hasHomePage, RDFS.domain, person.FullProfessor)) |
| 80 | +g.add((person.hasColleague, RDFS.domain, person.Person)) |
| 81 | + |
| 82 | +# Rangos |
| 83 | +g.add((person.hasName, RDFS.range, RDFS.Literal)) |
| 84 | +g.add((person.hasColleague, RDFS.range, person.Person)) |
| 85 | +g.add((person.hasHomePage, RDFS.range, RDFS.Literal)) |
| 86 | + |
| 87 | +r.validate_task_06_02(g) |
| 88 | + |
| 89 | +data = Namespace("http://oeg.fi.upm.es/resource/person/") |
| 90 | + |
| 91 | +# Instancias |
| 92 | +g.add((data.Oscar, RDF.type, person.AssociateProfessor)) |
| 93 | +g.add((data.Asun, RDF.type, person.FullProfessor)) |
| 94 | +g.add((data.Raul, RDF.type, person.InterimAssociateProfessor)) |
| 95 | + |
| 96 | +# Etiquetas |
| 97 | +g.add((data.Oscar, RDFS.label, Literal("Oscar", datatype=XSD.string))) |
| 98 | +g.add((data.Asun, RDFS.label, Literal("Asun", datatype=XSD.string))) |
| 99 | +g.add((data.Raul, RDFS.label, Literal("Raul", datatype=XSD.string))) |
| 100 | + |
| 101 | +# Relaciones / propiedades |
| 102 | +g.add((data.Oscar, person.hasName, Literal("Óscar Corcho García", datatype=XSD.string))) |
| 103 | +g.add((data.Oscar, person.hasColleague, data.Asun)) |
| 104 | +g.add((data.Asun, person.hasColleague, data.Raul)) |
| 105 | +g.add((data.Asun, person.hasHomePage, Literal("http://www.oeg-upm.net/", datatype=XSD.string))) |
| 106 | + |
| 107 | +r.validate_task_06_03(g) |
| 108 | + |
| 109 | +vcard = Namespace("http://www.w3.org/2001/vcard-rdf/3.0/") |
| 110 | +foaf = Namespace("http://xmlns.com/foaf/0.1/") |
| 111 | + |
| 112 | +# Tipos |
| 113 | +g.add((foaf.email , RDF.type, RDFS.Datatype)) |
| 114 | +g.add((vcard.Family , RDF.type, RDF.Property)) |
| 115 | +g.add((vcard.Given , RDF.type, RDFS.Datatype)) |
| 116 | + |
| 117 | +# Rangos |
| 118 | +g.add((foaf.email , RDFS.range, XSD.string)) |
| 119 | +g.add((vcard.Family , RDFS.range, XSD.string)) |
| 120 | +g.add((vcard.Given , RDFS.range, XSD.string)) |
| 121 | + |
| 122 | +# Datos de Oscar |
| 123 | +g. add(( data. Oscar, foaf. email, Literal( "[email protected]"))) |
| 124 | +g.add((data.Oscar, vcard.Family, Literal("Corcho García"))) |
| 125 | +g.add((data.Oscar, vcard.Given, Literal("Oscar"))) |
| 126 | + |
| 127 | +r.validate_task_06_04(g) |
| 128 | +r.save_report("_Task_06") |
| 129 | + |
0 commit comments