def generate_annotation_id(self, collection_uri): collection_id = self._get_id(collection_uri) prefix = collection_uri + "/annotation/" if API.last_generated_ann_id is None: query = prepareQuery('select ?annotation where {?annotation a ?type}') annotations = [] g = Store() g.attach_directory(os.path.join(self.basedir, collection_id)) results = g.graph.query(query, initBindings={'type': DADA.Annotation}) for result in results.bindings: annotations.append(int(result["annotation"].toPython().replace(prefix, ""))) API.last_generated_ann_id = max(annotations) API.last_generated_ann_id += 1 return prefix + str(API.last_generated_ann_id)
def search_sparql(self, collection_uri, query): collection_id = self._get_id(collection_uri) output = {"head":{"vars":[]}, "results":{"bindings":[]}} subgraph = Store() subgraph.attach_directory(os.path.join(self.basedir, collection_id)) subgraph.graph.parse(os.path.join(self.basedir, collection_id+".n3"), format='n3') result = subgraph.graph.query(query) for var in result.vars: output["head"]["vars"].append(str(var)) for binding in result.bindings: temp = {} for var in output["head"]["vars"]: temp[var] = {"type":type(binding[var]).__name__, "value":binding[var].toPython()} output["results"]["bindings"].append(temp) return output