Source code for ordf.vocab.foaf
"""
.. autoclass:: Agent
"""
__all__ = ["Agent", "Person"]
from ordf.term import BNode, Literal, URIRef
from ordf.graph import Graph
from ordf.namespace import RDF, FOAF
from logging import getLogger
from hashlib import sha1
log = getLogger(__name__)
def rdf_data():
log.info("Fetching %s" % FOAF)
g = Graph(identifier=FOAF[""]).parse(FOAF)
log.info("Parsed %s (%d triples)" % (FOAF, len(g)))
yield g
def inference_rules(handler, network):
from FuXi.DLP.DLNormalization import NormalFormReduction
foaf = handler.get(FOAF[""])
if len(foaf) == 0:
for foaf in rdf_data():
handler.put(foaf)
NormalFormReduction(foaf)
return network.setupDescriptionLogicProgramming(foaf, addPDSemantics=False)
[docs]class Agent(Graph):
"""
.. autoattribute:: __types__
.. autoattribute:: __rules__
.. automethod:: nick
.. automethod:: name
.. automethod:: homepage
"""
__types__ = [FOAF["Agent"]]
"* *foaf:Agent*"
__rules__ = [
"{ ?a foaf:homepage ?u . ?b foaf:homepage ?u } => { ?a owl:sameAs ?b }"
]
"""
* Inverse functional property *foaf:homepage* means if two things have
the same homepage then they are the same
"""
def __init__(self, *av, **kw):
super(Agent, self).__init__(*av, **kw)
self.add((self.identifier, RDF["type"], FOAF["Agent"]))
[docs] def nick(self, nick):
"""
Set the *foaf:nick* on the present :class:`Graph`
"""
self.add((self.identifier, FOAF["nick"], Literal(nick)))
[docs] def name(self, name):
"""
Set the *foaf:name* on the present :class:`Graph`
"""
self.add((self.identifier, FOAF["name"], Literal(name)))
[docs] def homepage(self, homepage):
"""
Set the *foaf:homepage* on the present :class:`Graph`
"""
self.add((self.identifier, FOAF["homepage"], URIRef(homepage)))
def mbox(self, email):
hash = sha1(email)
self.add((self.identifier, FOAF["mbox_sha1sum"], Literal(hash.hexdigest())))
class Person(Agent):
__types__ = [FOAF["Person"]]