Mercurial > hg > may
changeset 72:875e78fd245c
Basics of retrieving Vamp plugin metadata from RDF
author | Chris Cannam |
---|---|
date | Wed, 27 Feb 2013 13:55:23 +0000 |
parents | 3a13af4bd8ba |
children | dce097536346 |
files | vamprdf.yeti |
diffstat | 1 files changed, 119 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/vamprdf.yeti Tue Feb 26 11:50:57 2013 +0000 +++ b/vamprdf.yeti Wed Feb 27 13:55:23 2013 +0000 @@ -4,7 +4,7 @@ vamp = load vamp; read = load yertle.read; -store = load yertle.store; +{ newRdfStore } = load yertle.store; import java.io: File; @@ -21,19 +21,131 @@ done (listDirectory false p)) done (vamp.pluginPath)); -loadVampRdfStore () = - (st = store.newStore (); +loadVampRdfStore store = for (listVampRdfFiles ()) do file: - case read.loadTurtleFile st ("file://" ^ file) file of + case read.loadTurtleFile store ("file://" ^ file) file of OK (): (); Error e: eprintln "WARNING: Failed to load Vamp plugin RDF file \"\(file)\": \(e)"; esac done; - st); + +addVampPrefixes store = + (store.addPrefix "vamp" "http://purl.org/ontology/vamp/"; + store.addPrefix "dc" "http://purl.org/dc/elements/1.1/"; + store.addPrefix "foaf" "http://xmlns.com/foaf/0.1/"; + store.addPrefix "owl" "http://www.w3.org/2002/07/owl#"); + +store = newRdfStore (); +var loaded = false; + +getSystemVampRdfStore () = + synchronized store do: + if not loaded then + addVampPrefixes store; + loadVampRdfStore store; + loaded := true; + fi; + store + done; + +filterIRIsFromNodes nodes = + map do r: case r of IRI iri: iri; esac done + (filter do r: case r of IRI iri: true; _: false esac done nodes); + +subjects = map (.s); + +iriTypes = map do t: case t of IRI iri: IRI iri; Blank n: Blank n esac done; + +iriSubjects = iriTypes . subjects; + +libraryNodes store = + iriSubjects + (store.match { + s = Wildcard (), + p = Known (store.expand "a"), + o = Known (store.expand "vamp:PluginLibrary") + }); + +pluginNodes store = + iriSubjects + (store.match { + s = Wildcard (), + p = Known (store.expand "a"), + o = Known (store.expand "vamp:Plugin") + }); + +pluginsWithId store id = + iriTypes + (filter do pnode: + store.contains { + s = pnode, + p = store.expand "vamp:identifier", + o = Literal { value = id, type = "", language = "" } + } + done (pluginNodes store)); + +librariesWithId store id = + iriTypes + (filter do lnode: + store.contains { + s = lnode, + p = store.expand "vamp:identifier", + o = Literal { value = id, type = "", language = "" } + } + done (libraryNodes store)); + +pluginNodesById store libraryId pluginId = + (candidatePlugins = pluginsWithId store pluginId; + candidateLibraries = librariesWithId store libraryId; + filter do pnode: + any do lnode: + store.contains { + s = lnode, + p = store.expand "vamp:available_plugin", + o = pnode + } + done candidateLibraries + done candidatePlugins + ); + +textProperty store subject name = + case store.match { + s = Known subject, p = Known (store.expand name), o = Wildcard () + } of + { o = Literal { value = text } }::others: text; + _: ""; + esac; + +inputDomainOf store pluginIRI = + case store.match { + s = Known pluginIRI, p = Known (store.expand "vamp:input_domain"), o = Wildcard () + } of + { o = IRI iri }::others: + if IRI iri == store.expand "vamp:FrequencyDomain" + then FrequencyDomain () + else TimeDomain () + fi; + _: TimeDomain (); + esac; + +getPluginData store pluginIRI = { + get apiVersion () = textProperty store pluginIRI "vamp:vamp_API_version", //!!! number not text + get identifier () = textProperty store pluginIRI "vamp:identifier", + get name () = textProperty store pluginIRI "dc:title", + get description () = textProperty store pluginIRI "dc:description", + get maker () = textProperty store pluginIRI "foaf:maker", //!!! is an IRI or blank node + get copyright () = textProperty store pluginIRI "dc:rights", + get version () = textProperty store pluginIRI "owl:versionInfo", + get category () = textProperty store pluginIRI "vamp:category", + get inputDomain () = inputDomainOf store pluginIRI +}; { -get vampRdfFiles = listVampRdfFiles, -loadVampRdfStore, +getSystemVampRdfStore, +vampPluginNodes = pluginNodes, +vampLibraryNodes = libraryNodes, +vampPluginNodesById = pluginNodesById, +vampPluginData = getPluginData, }