hsh_triplify/vivordftest.py

96 lines
2.9 KiB
Python

import csv
from pprint import pprint
import urllib
from rdflib import Namespace
from rdfalchemy import rdfSingle
from rdfalchemy.rdfSubject import rdfSubject
from rdflib import Literal, BNode, Namespace, URIRef
from rdflib import RDF, RDFS, Graph, OWL
from rdflib.namespace import XSD
foaf = Namespace('http://xmlns.com/foaf/0.1/')
core = Namespace('http://vivoweb.org/ontology/core#')
vitro = Namespace('http://vitro.mannlib.cornell.edu/ns/vitro/0.7')
local = Namespace('http://localhost/core/ontology/core-local#')
#Namespace for the vivo app
vivo_app_url = 'http://localhost/vivo/'
app = Namespace(vivo_app_url)
class Thing(rdfSubject):
rdf_type = OWL.Thing
label = rdfSingle(RDFS.label)
class Person(Thing):
rdf_type = foaf.Person
class FacultyMember(Person):
rdf_type = core.FacultyMember
firstname = rdfSingle(foaf.firstName)
middlename = rdfSingle(core.middleName)
lastname = rdfSingle(foaf.lastName)
work_email = rdfSingle(core.workEmail)
phone = rdfSingle(core.workPhone)
fax = rdfSingle(core.workFax)
research_overview = rdfSingle(core.researchOverview)
preferred_title = rdfSingle(core.preferredTitle)
moniker = rdfSingle(vitro.moniker)
people_id = rdfSingle(local.peopleID)
def get_graph():
"""
Helper for getting a graph and binding namespaces.
"""
g = rdfSubject.db
#Bind the namespaces
g.bind('foaf', foaf)
g.bind('core', core)
g.bind('vitro', vitro)
g.bind('local', local)
return g
g = get_graph()
#Open the sample VIVO people file.
csv_url = 'http://iweb.dl.sourceforge.net/project/vivo/Data%20Ingest/people.csv'
people_file = urllib.urlopen(csv_url)
for count, row in enumerate(csv.DictReader(people_file)):
#Create a URI for the person.
person_uri = URIRef("%sfaculty%s" % (app, count + 1))
fac = FacultyMember(person_uri)
fac.label = row.get('name').strip()
fac.people_id = row.get('person_ID')
fac.moniker = row.get('title')
fac.firstname = row.get('first')
middle_name = row.get('middle')
if middle_name is not None and middle_name != "":
fac.middlename = row.get('middle')
fac.lastname = row.get('last')
fac.work_email = row.get('email')
fac.phone = row.get('phone')
fac.fax = row.get('fax')
print g.serialize(format='n3')
g.close()
"""
#Load the n3 file as a rdfSubject db.
people_n3 = 'http://iweb.dl.sourceforge.net/project/vivo/Data%20Ingest/people.n3'
rdfSubject.db.load(people_n3, format='n3')
#Get all of the assistant professors in the graph.
asst_professors = FacultyMember.filter_by(moniker="Assistant Professor")
print '\n' + '=' * 20
print "Assistant Professors"
print '=' * 20 + '\n'
for fac in asst_professors:
#Print full name, email, and url to vivo profile.
print "%s\t%s\t%s" % (fac.label, fac.work_email, fac.resUri.toPython())
#Use get_by to retrieve a single faculty member
faculty = FacultyMember.get_by(hr_id='3958')
print faculty.label"""