MPSPARQL-7: Use sql:GROUP_DIGEST instead of GROUP_BY
authorHeikki Levanto <heikki@indexdata.dk>
Wed, 18 Feb 2015 13:04:51 +0000 (14:04 +0100)
committerHeikki Levanto <heikki@indexdata.dk>
Wed, 18 Feb 2015 13:04:51 +0000 (14:04 +0100)
An easier way to return one row for each $work, with multiple
subjects (etc) concatenated into one field.

bibframe/triplestore.xml

index f5fd644..aae5725 100644 (file)
@@ -1,14 +1,14 @@
 <filters  xmlns="http://indexdata.com/metaproxy">
   <filter type="sparql">
-    <defaults uri="http://bibframe.indexdata.com:21/sparql/"/>
+    <defaults uri="http://bibframe.indexdata.com/sparql/"/>
     <db path="work" schema="sparql-results">
       <prefix>rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns</prefix>
       <prefix>bf: http://bibframe.org/vocab/</prefix>
       <form>SELECT
               ?work
-              MAX(?wtitle) AS ?title
-              MAX(?creatorlabel) AS ?creator
-              MAX(?subjectlabel) AS ?subject
+              (sql:GROUP_DIGEST (?wtitle, ' ; ', 1000, 1)) AS ?title
+              (sql:GROUP_DIGEST (?creatorlabel, ' ; ', 1000, 1))AS ?creator
+              (sql:GROUP_DIGEST (?subjectlabel, ' ; ', 1000, 1))AS ?subject
       </form>
       <criteria>?work a bf:Work</criteria>
 
       <index type="21">?subject bf:label %v FILTER(contains(%v, %s))</index>
       <index type="1016"> {
             ?work ?op1 ?child .
-            ?child ?op2 ?val FILTER(contains(STR(?val), %s))
+            ?child ?op2 %v FILTER(contains(STR(%v), %s))
           }
       </index>
-      <modifier>GROUP BY $work</modifier>
     </db>
     <db path="works" schema="rdf">
       <prefix>rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns</prefix>