From 5b4b5eec4062062050112a58a151768d7ab7e579 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 18 Feb 2015 13:19:35 +0100 Subject: [PATCH 1/1] allow triplestore endpoint to be given once MPSPARQL-10 --- bibframe/triplestore.xml | 13 +++++++------ doc/filter_sparql.rnc | 4 +++- src/filter_sparql.cpp | 17 ++++++++++++++++- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/bibframe/triplestore.xml b/bibframe/triplestore.xml index dcfbc93..f5fd644 100644 --- a/bibframe/triplestore.xml +++ b/bibframe/triplestore.xml @@ -1,10 +1,11 @@ - + + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns bf: http://bibframe.org/vocab/ -
SELECT - ?work + SELECT + ?work MAX(?wtitle) AS ?title MAX(?creatorlabel) AS ?creator MAX(?subjectlabel) AS ?subject @@ -26,14 +27,14 @@ ?wt bf:titleValue %v FILTER(contains(%v, %s)) ?creator bf:label %v FILTER(contains(%v, %s)) ?subject bf:label %v FILTER(contains(%v, %s)) - { + { ?work ?op1 ?child . ?child ?op2 ?val FILTER(contains(STR(?val), %s)) } GROUP BY $work - + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns bf: http://bibframe.org/vocab/ CONSTRUCT { ?work bf:title ?title . ?work bf:author ?creator . ?work bf:instanceTitle ?it } @@ -49,7 +50,7 @@ ?subject bf:label ?subjectlabel ?subject bf:label %v FILTER(contains(%v, %s)) - + rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns bf: http://bibframe.org/vocab/
SELECT DISTINCT ?instance ?title ?format
diff --git a/doc/filter_sparql.rnc b/doc/filter_sparql.rnc index 3a97465..3b6e817 100644 --- a/doc/filter_sparql.rnc +++ b/doc/filter_sparql.rnc @@ -6,6 +6,9 @@ filter_sparql = attribute type { "xquery" }, attribute id { xsd:NCName }?, attribute name { xsd:NCName }?, + element mp:defaults { + attribute uri { xsd:string } + }?, element mp:db { attribute path { xsd:string }, attribute uri { xsd:string }, @@ -19,4 +22,3 @@ filter_sparql = }*, element mp:modifier { xsd:string }* }+ - diff --git a/src/filter_sparql.cpp b/src/filter_sparql.cpp index bfb18c7..3a824f0 100644 --- a/src/filter_sparql.cpp +++ b/src/filter_sparql.cpp @@ -129,16 +129,31 @@ void yf::SPARQL::configure(const xmlNode *xmlnode, bool test_only, const char *path) { const xmlNode *ptr = xmlnode->children; + std::string uri; for (; ptr; ptr = ptr->next) { if (ptr->type != XML_ELEMENT_NODE) continue; - if (!strcmp((const char *) ptr->name, "db")) + if (!strcmp((const char *) ptr->name, "defaults")) + { + const struct _xmlAttr *attr; + for (attr = ptr->properties; attr; attr = attr->next) + { + if (!strcmp((const char *) attr->name, "uri")) + uri = mp::xml::get_text(attr->children); + else + throw mp::filter::FilterException( + "Bad attribute " + std::string((const char *) + attr->name)); + } + } + else if (!strcmp((const char *) ptr->name, "db")) { yaz_sparql_t s = yaz_sparql_create(); ConfPtr conf(new Conf); conf->s = s; + conf->uri = uri; const struct _xmlAttr *attr; for (attr = ptr->properties; attr; attr = attr->next) -- 1.7.10.4