Lab Solutions: Difference between revisions

From info216
(Proposed solution for Lab 10 - RDFS)
No edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Here we will present suggested solutions after each lab. ''The page will be updated as the course progresses''
Here we will present suggested solutions after each lab. ''The page will be updated as the course progresses''


<!--
=Getting started (Lab 1)=
=Getting started (Lab 1)=


Line 334: Line 335:
       OPTIONAL{
       OPTIONAL{
         ?s ns1:pardoned ?pardon .
         ?s ns1:pardoned ?pardon .
         FILTER (?pardon = ns1:true)
         FILTER (?pardon = true)
       }
       }
}
}
Line 1,549: Line 1,550:


</syntaxhighlight>
</syntaxhighlight>
=OWL 1 (Lab 11)=
<syntaxhighlight lang="Python">
from rdflib import Graph, RDFS, Namespace, RDF, FOAF, BNode, OWL, URIRef, Literal, XSD
from rdflib.collection import Collection
import owlrl
g = Graph()
ex = Namespace('http://example.org/')
schema = Namespace('http://schema.org/')
dbr = Namespace('https://dbpedia.org/page/')
g.bind("ex", ex)
# g.bind("schema", schema)
g.bind("foaf", FOAF)
# Donald Trump and Robert Mueller are two different persons.
g.add((ex.Donald_Trump, OWL.differentFrom, ex.Robert_Mueller))
# Actually, all the names mentioned in connection with the Mueller investigation refer to different people.
b1 = BNode()
b2 = BNode()
Collection(g, b2, [ex.Robert_Mueller, ex.Paul_Manafort, ex.Rick_Gates, ex.George_Papadopoulos, ex.Michael_Flynn, ex.Michael_Cohen, ex.Roger_Stone, ex.Donald_Trump])
g.add((b1, RDF.type, OWL.AllDifferent))
g.add((b1, OWL.distinctMembers, b2))
# All these people are foaf:Persons as well as schema:Persons
g.add((FOAF.Person, OWL.equivalentClass, schema.Person))
# Tax evation is a kind of bank and tax fraud.
g.add((ex.TaxEvation, RDFS.subClassOf, ex.BankFraud))
g.add((ex.TaxEvation, RDFS.subClassOf, ex.TaxFraud))
# The Donald Trump involved in the Mueller investigation is dbpedia:Donald_Trump and not dbpedia:Donald_Trump_Jr.
g.add((ex.Donald_Trump, OWL.sameAs, dbr.Donald_Trump))
g.add((ex.Donald_Trump, OWL.differentFrom, URIRef(dbr + "Donald_Trump_Jr.")))
# Congress, FBI and the Mueller investigation are foaf:Organizations.
g.add((ex.Congress, RDF.type, FOAF.Organization))
g.add((ex.FBI, RDF.type, FOAF.Organization))
g.add((ex.Mueller_Investigation, RDF.type, FOAF.Organization))
# Nothing can be both a person and an organization.
g.add((FOAF.Person, OWL.disjointWith, FOAF.Organization))
# Leading an organization is a way of being involved in an organization.
g.add((ex.leading, RDFS.subPropertyOf, ex.involved))
# Being a campaign manager or an advisor for is a way of supporting someone.
g.add((ex.campaignManagerTo, RDFS.subPropertyOf, ex.supports))
g.add((ex.advisorTo, RDFS.subPropertyOf, ex.supports))
# Donald Trump is a politician and a Republican.
g.add((ex.Donald_Trump, RDF.type, ex.Politician))
g.add((ex.Donald_Trump, RDF.type, ex.Republican))
# A Republican politician is both a politician and a Republican.
g.add((ex.RepublicanPolitician, RDFS.subClassOf, ex.Politician))
g.add((ex.RepublicanPolitician, RDFS.subClassOf, ex.Republican))
#hasBusinessPartner
g.add((ex.Paul_Manafort, ex.hasBusinessPartner, ex.Rick_Gates))
g.add((ex.hasBusinessPartner, RDF.type, OWL.SymmetricProperty))
g.add((ex.hasBusinessPartner, RDF.type, OWL.IrreflexiveProperty))
#adviserTo
g.add((ex.Michael_Flynn, ex.adviserTo, ex.Donald_Trump))
g.add((ex.adviserTo, RDF.type, OWL.IrreflexiveProperty))
# Not necessarily asymmetric as it's not a given that they couldn't be advisors to each other 
#wasLyingTo
g.add((ex.Rick_Gates_Lying, ex.wasLyingTo, ex.FBI))
g.add((ex.wasLyingTo, RDF.type, OWL.IrreflexiveProperty))
# Not asymmetric as the subject and object could lie to each other; also in this context, the FBI can lie to you
#presidentOf
g.add((ex.Donald_Trump, ex.presidentOf, ex.USA))
g.add((ex.presidentOf, RDF.type, OWL.AsymmetricProperty))
g.add((ex.presidentOf, RDF.type, OWL.IrreflexiveProperty))
g.add((ex.presidentOf, RDF.type, OWL.FunctionalProperty)) #can only be president of one country
#not inversefunctionalproperty as Bosnia has 3 presidents https://www.culturalworld.org/do-any-countries-have-more-than-one-president.htm
#hasPresident
g.add((ex.USA, ex.hasPresident, ex.Donald_Trump))
g.add((ex.hasPresident, RDF.type, OWL.AsymmetricProperty))
g.add((ex.hasPresident, RDF.type, OWL.IrreflexiveProperty))
g.add((ex.hasPresident, RDF.type, OWL.InverseFunctionalProperty)) #countries do not share their president with another
#not functionalproperty as a country (Bosnia) can have more than one president
#Closure
owlrl.DeductiveClosure(owlrl.OWLRL_Semantics).expand(g)
#Serialization
print(g.serialize(format="ttl"))
# g.serialize("lab8.xml", format="xml") #serializes to XML file
</syntaxhighlight>
=OWL 2 (Lab 12)=
<syntaxhighlight lang="Python">
@prefix : <http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#> .
@prefix dc: <http://purl.org/dc/terms#> .
@prefix io: <http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#> .
@prefix dbr: <http://dbpedia.org/resource/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#> .
<http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology> rdf:type owl:Ontology .
#################################################################
#    Object Properties
#################################################################
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#indictedIn
io:indictedIn rdf:type owl:ObjectProperty ;
              rdfs:subPropertyOf io:involvedIn ;
              rdfs:domain io:InvestigatedPerson ;
              rdfs:range io:Investigation .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#investigating
io:investigating rdf:type owl:ObjectProperty ;
                rdfs:subPropertyOf io:involvedIn ;
                rdfs:domain io:Investigator ;
                rdfs:range io:Investigation .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#involvedIn
io:involvedIn rdf:type owl:ObjectProperty ;
              rdfs:domain foaf:Person ;
              rdfs:range io:Investigation .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#leading
io:leading rdf:type owl:ObjectProperty ;
          rdfs:subPropertyOf io:investigating ;
          rdfs:domain io:InvestigationLeader ;
          rdfs:range io:Investigation .
#################################################################
#    Data properties
#################################################################
###  http://purl.org/dc/elements/1.1/description
<http://purl.org/dc/elements/1.1/description> rdf:type owl:DatatypeProperty ;
                                              rdfs:domain io:Investigation ;
                                              rdfs:range xsd:string .
###  http://www.w3.org/ns/prov#endedAtTime
prov:endedAtTime rdf:type owl:DatatypeProperty ,
                          owl:FunctionalProperty ;
                rdfs:domain io:Investigation ;
                rdfs:range xsd:dateTime .
###  http://www.w3.org/ns/prov#startedAtTime
prov:startedAtTime rdf:type owl:DatatypeProperty ,
                            owl:FunctionalProperty ;
                  rdfs:domain io:Investigation ;
                  rdfs:range xsd:dateTime .
###  http://xmlns.com/foaf/0.1/name
foaf:name rdf:type owl:DatatypeProperty ;
          rdfs:domain foaf:Person ;
          rdfs:range xsd:string .
###  http://xmlns.com/foaf/0.1/title
foaf:title rdf:type owl:DatatypeProperty ;
          rdfs:domain io:Investigation ;
          rdfs:range xsd:string .
#################################################################
#    Classes
#################################################################
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#InvestigatedPerson
io:InvestigatedPerson rdf:type owl:Class ;
                      rdfs:subClassOf io:Person ;
                      owl:disjointWith io:Investigator .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#Investigation
io:Investigation rdf:type owl:Class .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#InvestigationLeader
io:InvestigationLeader rdf:type owl:Class ;
                      rdfs:subClassOf io:Investigator .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#Investigator
io:Investigator rdf:type owl:Class ;
                rdfs:subClassOf io:Person .
###  http://www.semanticweb.org/bruker/ontologies/2023/2/InvestigationOntology#Person
io:Person rdf:type owl:Class ;
          rdfs:subClassOf foaf:Person .
###  http://xmlns.com/foaf/0.1/Person
foaf:Person rdf:type owl:Class .
#################################################################
#    Individuals
#################################################################
###  http://dbpedia.org/resource/Donald_Trump
dbr:Donald_Trump rdf:type owl:NamedIndividual ;
                foaf:name "Donald Trump" .
###  http://dbpedia.org/resource/Elizabeth_Prelogar
dbr:Elizabeth_Prelogar rdf:type owl:NamedIndividual ;
                      io:investigating <http://dbpedia.org/resource/Special_Counsel_investigation_(2017–2019)> ;
                      foaf:name "Elizabeth Prelogar" .
###  http://dbpedia.org/resource/Michael_Flynn
dbr:Michael_Flynn rdf:type owl:NamedIndividual ;
                  foaf:name "Michael Flynn" .
###  http://dbpedia.org/resource/Paul_Manafort
dbr:Paul_Manafort rdf:type owl:NamedIndividual ;
                  io:indictedIn <http://dbpedia.org/resource/Special_Counsel_investigation_(2017–2019)> ;
                  foaf:name "Paul Manafort" .
###  http://dbpedia.org/resource/Robert_Mueller
dbr:Robert_Mueller rdf:type owl:NamedIndividual ;
                  io:leading <http://dbpedia.org/resource/Special_Counsel_investigation_(2017–2019)> ;
                  foaf:name "Robert Mueller" .
###  http://dbpedia.org/resource/Roger_Stone
dbr:Roger_Stone rdf:type owl:NamedIndividual ;
                foaf:name "Roger Stone" .
###  http://dbpedia.org/resource/Special_Counsel_investigation_(2017–2019)
<http://dbpedia.org/resource/Special_Counsel_investigation_(2017–2019)> rdf:type owl:NamedIndividual ;
                                                                        foaf:title "Mueller Investigation" .
#################################################################
#    General axioms
#################################################################
[ rdf:type owl:AllDifferent ;
  owl:distinctMembers ( dbr:Donald_Trump
                        dbr:Elizabeth_Prelogar
                        dbr:Michael_Flynn
                        dbr:Paul_Manafort
                        dbr:Robert_Mueller
                        dbr:Roger_Stone
                      )
] .
###  Generated by the OWL API (version 4.5.25.2023-02-15T19:15:49Z) https://github.com/owlcs/owlapi
</syntaxhighlight>
=Using Graph Embeddings (Lab 13)=
https://colab.research.google.com/drive/1WkRJUeUBVF5yVv7o0pOKfsd4pqG6369k
=Training Graph Embeddings (Lab 14)=
https://colab.research.google.com/drive/1jKpzlQ7gYTVzgphJsrK5iuMpFhkrY96q
-->

Latest revision as of 10:56, 20 January 2025

Here we will present suggested solutions after each lab. The page will be updated as the course progresses