Skip to main content

Google Custom Synonyms Report

The report creates a synonym list which can be used to extend Google's Customized Search Engine (CSE) . The named query in the PoolParty configuration (SesameSetup.xml) for the report looks like the following:

 <namedQueries>
...
        <entry>
            <key>GoogleSynonyms</key>
            <value>
                <sparqlQueryParameterMap/>
                <sparqlQueryTemplate>
                    PREFIX skos: &lt;http://www.w3.org/2004/02/skos/core#&gt;
 
                    SELECT ?term ?synonym
                    WHERE {
                    ?x a ?Concept.
                    ?x skos:prefLabel ?term.
                    OPTIONAL { ?x skos:altLabel ?synonym }
                    OPTIONAL { ?x skos:hiddenLabel ?synonym }
                    FILTER (bound(?synonym) &amp;&amp; lang(?term) = lang(?synonym))
                    }
 
                </sparqlQueryTemplate>
            </value>
        </entry>
...
    </namedQueries>

The velocity template for the report looks like the following:

<?xml version="1.0" encoding="UTF-8"?>
<Synonyms>
#set ($lastTerm = '')
#set ($numVariants = 0)
#set ($firstTerm = true)
#foreach ($row in $result)
#if ($lastTerm != $row.get('term').getLabel())
#if ($firstTerm)
#set ($firstTerm = false)
#else
  </Synonym>
#end
  <Synonym term="$row.get('term').getLabel().replaceAll('&','&amp;')">
#set ($numVariants = 0)
#end
#if ($numVariants < 10)
    <Variant>$row.get('synonym').getLabel().replaceAll('&','&amp;')</Variant>
#set($lastTerm = $row.get('term').getLabel())
#set($numVariants = $numVariants + 1)
#end
#end
  </Synonym>
</Synonyms>

The report entry in the PoolParty configuration (SesameSetup.xml) for the report looks like the following:

 <reports>
...
        <entry>
            <key>Google Custom Synonyms</key>
            <value>
                <contentType>application/xml</contentType>
                <namedQuery>GoogleSynonyms</namedQuery>
                <template>synonyms.vm</template>
            </value>
        </entry>
...
    </reports>