[TASK] Add memberships with appropriate business_role labels.

Also add acronyms for organizations.
This commit is contained in:
Jan Philipp Timme 2014-02-18 14:54:47 +01:00
parent 2192686872
commit b37360c97d

View File

@ -25,13 +25,14 @@ class HsHMembership(Base):
__tablename__ = 'membership' __tablename__ = 'membership'
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
person = Column(Integer, ForeignKey('person.id')) person = Column(Integer, ForeignKey('person.id'))
organizational_unit = Column(Integer) organizational_unit = Column(Integer, ForeignKey('organizational_unit.id'))
start_date = Column(DateTime) start_date = Column(DateTime)
end_date = Column(DateTime) end_date = Column(DateTime)
active = Column(String) active = Column(String)
business_role = Column(Integer, ForeignKey('business_role.id')) business_role = Column(Integer, ForeignKey('business_role.id'))
mPerson = relationship("HsHPerson") mPerson = relationship("HsHPerson")
mBusinessRole = relationship("HsHBusinessRole") mBusinessRole = relationship("HsHBusinessRole")
mOrg = relationship("HsHOrganizationalUnit")
class HsHBusinessRole(Base): class HsHBusinessRole(Base):
__tablename__ = 'business_role' __tablename__ = 'business_role'
@ -74,8 +75,9 @@ vcard = Namespace('http://www.w3.org/2006/vcard/ns#')
obo = Namespace('http://purl.obolibrary.org/obo/') obo = Namespace('http://purl.obolibrary.org/obo/')
hsh = Namespace('http://vivo.bib.hs-hannover.de/ontology/hshOntologie#') hsh = Namespace('http://vivo.bib.hs-hannover.de/ontology/hshOntologie#')
localPerson = Namespace('http://vivo.bib.hs-hannover.de/individual/person') localPerson = Namespace('http://vivo.bib.hs-hannover.de/individual/p')
localOrg = Namespace('http://vivo.bib.hs-hannover.de/individual/org') localOrg = Namespace('http://vivo.bib.hs-hannover.de/individual/o')
localMembership = Namespace('http://vivo.bib.hs-hannover.de/individual/m')
def get_graph(): def get_graph():
"""Small little helper to create graph with namespaces ;-)""" """Small little helper to create graph with namespaces ;-)"""
@ -88,6 +90,7 @@ def get_graph():
g.bind('obo', obo) g.bind('obo', obo)
g.bind('localperson', localPerson) g.bind('localperson', localPerson)
g.bind('localorg', localOrg) g.bind('localorg', localOrg)
g.bind('localMembership', localMembership)
g.bind('hsh', hsh) g.bind('hsh', hsh)
return g return g
@ -128,6 +131,42 @@ class Organization(hshThing):
rdf_type = foaf.Organization rdf_type = foaf.Organization
label = rdfSingle(RDFS.label) label = rdfSingle(RDFS.label)
parentOe = rdfSingle(obo.BFO_0000050) parentOe = rdfSingle(obo.BFO_0000050)
acronym = rdfSingle(vivo.abbreviation)
class OboMembership(Thing):
rdf_type = obo.BFO_0000020
class Membership(OboMembership):
rdf_type = vivo.Position
label = rdfSingle(RDFS.label)
person = rdfSingle(vivo.relates)
organization = rdfSingle(vivo.relates)
dateTimeInterval = rdfSingle(vivo.dateTimeInterval)
class FacultyPosition(Membership):
rdf_type = vivo.FacultyPosition
class NonFacultyPosition(Membership):
rdf_type = vivo.NonFacultyPosition
class NonAcademicPosition(Membership):
rdf_type = vivo.NonAcademicPosition
class OboDateTimeInterval(Thing):
rdf_type = obo.BFO_0000038
class DateTimeInterval(OboDateTimeInterval):
rdf_type = vivo.DateTimeInterval
start = rdfSingle(vivo.start)
end = rdfSingle(vivo.end)
class OboDateTimeValue(Thing):
rdf_type = obo.BFO_0000148
class DateTimeValue(OboDateTimeValue):
rdf_type = vivo.DateTimeValue
dateTime = rdfSingle(vivo.dateTime)
dateTimePrecision = rdfSingle(vivo.dateTimePrecision)
class IdSequence: class IdSequence:
"""Small Helper for easy sequences""" """Small Helper for easy sequences"""
@ -148,7 +187,7 @@ def addPersonToGraph(sqlP, additionalIdSeq):
else: else:
combined_title += ' ' + sqlP.title_suffix combined_title += ' ' + sqlP.title_suffix
person_uri = URIRef("%s/%s" % (localPerson, sqlP.id)) person_uri = URIRef("%s%s" % (localPerson, sqlP.id))
hshThing(person_uri) hshThing(person_uri)
rdfP = Person(person_uri) #WTF?! rdfP = Person(person_uri) #WTF?!
rdfP.firstname = sqlP.firstname; rdfP.firstname = sqlP.firstname;
@ -156,11 +195,11 @@ def addPersonToGraph(sqlP, additionalIdSeq):
rdfP.label = "%s, %s" % (sqlP.name, sqlP.firstname) rdfP.label = "%s, %s" % (sqlP.name, sqlP.firstname)
# If there is a title to add, do it. # If there is a title to add, do it.
if(combined_title != ''): if(combined_title != ''):
title_uri = URIRef("%s/%s" % (localPerson, additionalIdSeq.getNext())) title_uri = URIRef("%s%s" % (localPerson, additionalIdSeq.getNext()))
rdfTitle = Title(title_uri) rdfTitle = Title(title_uri)
rdfTitle.title = combined_title rdfTitle.title = combined_title
contact_info_uri = URIRef("%s/%s" % (localPerson, additionalIdSeq.getNext())) contact_info_uri = URIRef("%s%s" % (localPerson, additionalIdSeq.getNext()))
rdfCi = ContactInfo(contact_info_uri) rdfCi = ContactInfo(contact_info_uri)
rdfCi.hasTitle = rdfTitle rdfCi.hasTitle = rdfTitle
rdfCi.contactInformationFor = rdfP rdfCi.contactInformationFor = rdfP
@ -168,6 +207,45 @@ def addPersonToGraph(sqlP, additionalIdSeq):
rdfP.hasContactInfo = rdfCi rdfP.hasContactInfo = rdfCi
return person_uri return person_uri
def processMembership(membership, additionalIdSeq):
#create membership
membershipUri = URIRef("%s%s" % (localMembership, membership.id))
personUri = URIRef("%s%s" % (localPerson, membership.mPerson.id))
organizationUri = URIRef("%s%s" % (localOrg, membership.mOrg.id))
dtiUri = URIRef("%s%s" % (localMembership, additionalIdSeq.getNext()))
dtsUri = URIRef("%s%s" % (localMembership, additionalIdSeq.getNext()))
dteUri = URIRef("%s%s" % (localMembership, additionalIdSeq.getNext()))
rdfM = OboMembership(membershipUri)
rdfM = Membership(membershipUri)
rdfM.label = membership.mBusinessRole.name
rdfM.person = personUri
rdfM.organization = organizationUri
rdfM.dateTimeInterval = dtiUri
if membership.mBusinessRole.name == "ProfessorIn":
rdfM = FacultyPosition(membershipUri)
elif membership.mBusinessRole.name == "WiMi":
rdfM = NonFacultyPosition(membershipUri)
else:
rdfM = NonAcademicPosition(membershipUri)
rdfDts = OboDateTimeValue(dtsUri)
rdfDts = DateTimeValue(dtsUri)
rdfDts.dateTime = membership.start_date
rdfDts.dateTimePrecision = vivo.yearPrecision
rdfDte = OboDateTimeValue(dteUri)
rdfDte = DateTimeValue(dteUri)
rdfDte.dateTime = membership.end_date
rdfDte.dateTimePrecision = vivo.yearPrecision
rdfDti = OboDateTimeInterval(dtiUri)
rdfDti = DateTimeInterval(dtiUri)
rdfDti.start = dtsUri
rdfDti.end = dteUri
def processPersons(session, additionalIdSeq): def processPersons(session, additionalIdSeq):
"""Fetch persons, create triples for them.""" """Fetch persons, create triples for them."""
persons = session.query(HsHPerson) persons = session.query(HsHPerson)
@ -186,34 +264,36 @@ def processPersons(session, additionalIdSeq):
if membership.active != 'Y': if membership.active != 'Y':
continue #SKIP INACTIVE MEMBERSHIPS! continue #SKIP INACTIVE MEMBERSHIPS!
processMembership(membership, additionalIdSeq)
#This is an active membership with an id and a business_role. #This is an active membership with an id and a business_role.
if membership.mBusinessRole.name == 'ProfessorIn': if membership.mBusinessRole.name == 'ProfessorIn':
isNonAcademic = False isNonAcademic = False
organization_uri = URIRef("%s/%s" % (localOrg, membership.organizational_unit)) organization_uri = URIRef("%s%s" % (localOrg, membership.organizational_unit))
rdfP = FacultyMember(personUri) rdfP = FacultyMember(personUri)
rdfP.associatedOe = organization_uri rdfP.associatedOe = organization_uri
elif membership.mBusinessRole.name == 'WiMi':
if membership.mBusinessRole.name == 'WiMi':
isNonAcademic = False isNonAcademic = False
organization_uri = URIRef("%s/%s" % (localOrg, membership.organizational_unit)) organization_uri = URIRef("%s%s" % (localOrg, membership.organizational_unit))
rdfP = NonFacultyAcademic(personUri) rdfP = NonFacultyAcademic(personUri)
rdfP.associatedOe = organization_uri rdfP.associatedOe = organization_uri
#assign non-academic person type if neccessary #assign non-academic person type if neccessary
if isNonAcademic: if isNonAcademic:
NonAcademic(personUri) NonAcademic(personUri)
pass
def processOrganizations(session, additionalIdSeq): def processOrganizations(session, additionalIdSeq):
"""Generate triples for organizational units.""" """Generate triples for organizational units."""
organizations = session.query(HsHOrganizationalUnit) organizations = session.query(HsHOrganizationalUnit)
for count, sqlO in enumerate(organizations): for count, sqlO in enumerate(organizations):
organization_uri = URIRef("%s/%s" % (localOrg, sqlO.id)) organization_uri = URIRef("%s%s" % (localOrg, sqlO.id))
rdfO = hshThing(organization_uri) rdfO = hshThing(organization_uri)
rdfO = Organization(organization_uri) rdfO = Organization(organization_uri)
rdfO.label = sqlO.name rdfO.label = sqlO.name
if sqlO.acronym != None:
rdfO.acronym = sqlO.acronym
if sqlO.oParent != None: if sqlO.oParent != None:
parent_organization_uri = URIRef("%s/%s" % (localOrg, sqlO.oParent.id)) parent_organization_uri = URIRef("%s%s" % (localOrg, sqlO.oParent.id))
rdfO.parentOe = parent_organization_uri rdfO.parentOe = parent_organization_uri
def createTriples(): def createTriples():