view rdfpy/af-ontology-defs.py @ 18:d5012016bf64 tip

added rdfpy and rdfonto directories
author nothing@tehis.net
date Tue, 23 Apr 2013 11:49:20 +0100
parents
children
line wrap: on
line source
import rdflib
from rdflib import Graph, RDF, RDFS, plugin, URIRef, Literal, OWL, Namespace
from InfixOwl.InfixOwl import *
from datetime import datetime

def writeHeader(graph, title, version, description):
    ontoid = URIRef('')
    graph.add((
        ontoid,
        RDF.type,
        OWL.Ontology
    ))
    graph.add((
        ontoid,
        dc['title'],
        Literal(title, lang="en")
    ))
    graph.add((
        URIRef(''),
        OWL.versionInfo,
        Literal("Version "+version)
    ))
    graph.add((
        ontoid,
        RDFS.label,
        Literal(title, lang="en")
    ))
    graph.add((
        URIRef(''),
        dc['description'],
        Literal(description, lang="en")
    ))
    graph.add((
        URIRef(''),
        dc['date'],
        Literal(datetime.isoformat(datetime.now()))
    ))

def addTerm(graph, label):
    termid = URIRef(af+label.replace(" ", ""))
    graph.add(( termid, RDF.type, OWL.Class ))
    graph.add(( termid, RDFS.label, Literal(label, lang="en") ))
    return termid

def addOriginalOntology(graph):
    orig = Namespace('http://purl.org/ontology/af/')
    origOnto = Graph()
    #origOnto.parse(orig)
    origOnto.parse('/Users/alo/MusicOntology/audiofeaturesonto/rdf/audio_features.rdf')

    importTerms = ["Signal", "signal_feature", "value", "dimensions", "Segment", "Point", "feature"]

    for item in importTerms:    
        sub = URIRef(orig+item)
        oid = URIRef(af+item)
        for pre, obj in origOnto.predicate_objects(sub):
            if pre == RDFS.subClassOf and type(obj) == BNode:
                onProp = origOnto.value(obj,OWL.onProperty,None)
                values = origOnto.value(obj,OWL.someValuesFrom,None)
                Restriction(onProp,ontograph,someValuesFrom=values,identifier=obj)
                ontograph.add(( oid, pre, obj ))
            else:
                if obj.find(orig) > -1:
                    val = URIRef(obj.replace(orig,af))
                else:
                    val = obj
                graph.add(( oid, pre, val ))
                
def addBaseTriples(graph, pypath, rdfpath):
    execfile(pypath)

    base = Graph()
    base.parse(rdfpath)

    for sub, obj in base.subject_objects(RDF.type):
        if obj == OWL.Class or obj == RDF.Property:
            bid = URIRef(af+sub.split("/")[-1])
            for pre, item in base.predicate_objects(sub):
                if item.find(afcns) > -1:
                    addobj = URIRef(item.replace(afcns,af))
                else:
                    addobj = item

                ontograph.add((bid, pre, addobj))
        
            graph.add((bid, vs['term_status'], Literal("testing", lang="en")))
            graph.add((bid, RDFS.comment, Literal("Audio feature taxonomy term (Mitrovic et al)") ))


def addTriples(graph, pypath, rdfpath, tool):
    execfile(pypath)

    source = Graph()
    source.parse(rdfpath)

    for sub, obj in source.subject_objects(RDF.type):
        if obj != URIRef(afcns+"AudioFeature") and obj != OWL.Ontology:
            bid = URIRef(af+sub.split("/")[-1])
            for pre, item in source.predicate_objects(sub):
                if item.find(afcns) > -1:
                    addobj = URIRef(item.replace(afcns,af))
                else:
                    addobj = item

                graph.add((bid, pre, addobj))

            graph.add((bid, vs['term_status'], Literal("testing", lang="en")))
            graph.add((bid, RDFS.comment, Literal(tool + " ontology term") ))

def serialize(graph, path, name):
    graph.serialize(path + name + '.rdf')
    graph.serialize(path + name + '.n3', format="n3")