Removing rdfs:label from search index document field ALLTEXT. Moving vivo specific DocumentModifiers out of vitro. NIHVIVO-2975
This commit is contained in:
parent
3717da7fea
commit
bc9c3d215c
2 changed files with 114 additions and 331 deletions
|
@ -1,14 +1,10 @@
|
||||||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.search.solr;
|
package edu.cornell.mannlib.vitro.webapp.search.solr;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Future;
|
|
||||||
import java.util.concurrent.ThreadFactory;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -25,346 +21,127 @@ import com.hp.hpl.jena.query.ResultSet;
|
||||||
import com.hp.hpl.jena.query.Syntax;
|
import com.hp.hpl.jena.query.Syntax;
|
||||||
import com.hp.hpl.jena.rdf.model.Model;
|
import com.hp.hpl.jena.rdf.model.Model;
|
||||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
import com.hp.hpl.jena.rdf.model.RDFNode;
|
||||||
import com.hp.hpl.jena.rdf.model.Resource;
|
|
||||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||||
import com.hp.hpl.jena.shared.Lock;
|
import com.hp.hpl.jena.shared.Lock;
|
||||||
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||||
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DocumentModifier that will run SPARQL queries for an
|
||||||
|
* Individual and add all the columns from all the rows
|
||||||
|
* in the solution set to the ALLTEXT field.
|
||||||
|
*
|
||||||
|
* @author bdc34
|
||||||
|
*
|
||||||
|
*/
|
||||||
public class ContextNodeFields implements DocumentModifier{
|
public class ContextNodeFields implements DocumentModifier{
|
||||||
protected Model model;
|
protected Model model;
|
||||||
|
protected List<String> queries = new ArrayList<String>();
|
||||||
|
|
||||||
protected boolean shutdown = false;
|
protected boolean shutdown = false;
|
||||||
protected static ExecutorService threadPool = null;
|
|
||||||
protected static final int THREAD_POOL_SIZE = 10;
|
|
||||||
|
|
||||||
protected static final List<String> singleValuedQueriesForAgent = new ArrayList<String>();
|
|
||||||
protected static final List<String> singleValuedQueriesForInformationResource = new ArrayList<String>();
|
|
||||||
protected static final List<String> multiValuedQueriesForAgent = new ArrayList<String>();
|
|
||||||
protected static final String multiValuedQueryForInformationResource;
|
|
||||||
|
|
||||||
protected Log log = LogFactory.getLog(ContextNodeFields.class);
|
protected Log log = LogFactory.getLog(ContextNodeFields.class);
|
||||||
|
|
||||||
public ContextNodeFields(Model model){
|
|
||||||
|
/**
|
||||||
|
* Construct this with a model to query when building Solr Documents and
|
||||||
|
* a list of the SPARQL queries to run.
|
||||||
|
*/
|
||||||
|
protected ContextNodeFields(Model model, List<String> queries){
|
||||||
this.model = model;
|
this.model = model;
|
||||||
|
this.queries = queries;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement this method to get values that will be added to ALLTEXT
|
||||||
|
* field of solr Document for each individual.
|
||||||
|
*
|
||||||
|
* @param individual
|
||||||
|
* @return StringBuffer with text values to add to ALLTEXT field of solr Document.
|
||||||
|
*/
|
||||||
|
protected StringBuffer getValues( Individual individual ){
|
||||||
|
return executeQueryForValues( individual, queries );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void modifyDocument(Individual individual, SolrInputDocument doc, StringBuffer addUri) {
|
public void modifyDocument(Individual individual, SolrInputDocument doc, StringBuffer addUri) {
|
||||||
log.debug("retrieving context node values..");
|
if( individual == null )
|
||||||
|
return;
|
||||||
|
|
||||||
StringBuffer objectProperties = singleThreadExecute( individual, multiValuedQueriesForAgent);
|
log.debug( "doing context nodes for: " + individual.getURI());
|
||||||
|
|
||||||
SolrInputField field = doc.getField(VitroSearchTermNames.ALLTEXT);
|
/* get text from the context nodes and add the to ALLTEXT */
|
||||||
if( field == null ){
|
StringBuffer values = getValues( individual );
|
||||||
doc.addField(VitroSearchTermNames.ALLTEXT,
|
|
||||||
objectProperties + " " +
|
|
||||||
runQuery(individual, multiValuedQueryForInformationResource));
|
|
||||||
}else{
|
|
||||||
field.addValue(objectProperties + " " +
|
|
||||||
runQuery(individual, multiValuedQueryForInformationResource),
|
|
||||||
field.getBoost());
|
|
||||||
}
|
|
||||||
log.debug("context node values are retrieved");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected StringBuffer singleThreadExecute(Individual individual, List<String> queries ){
|
SolrInputField field = doc.getField(VitroSearchTermNames.ALLTEXT);
|
||||||
StringBuffer propertyValues = new StringBuffer(" ");
|
if( field == null ){
|
||||||
for(String query : queries ){
|
doc.addField(VitroSearchTermNames.ALLTEXT, values);
|
||||||
propertyValues.append(runQuery(individual, query));
|
}else{
|
||||||
|
field.addValue(values, field.getBoost());
|
||||||
}
|
}
|
||||||
return propertyValues;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringBuffer runQuery( Individual individual, String query ){
|
|
||||||
StringBuffer propertyValues = new StringBuffer();
|
protected StringBuffer executeQueryForValues( Individual individual, Collection<String> queries){
|
||||||
|
/* execute all the queries on the list and concat the values to add to all text */
|
||||||
|
|
||||||
|
StringBuffer allValues = new StringBuffer("");
|
||||||
|
|
||||||
QuerySolutionMap initialBinding = new QuerySolutionMap();
|
QuerySolutionMap initialBinding = new QuerySolutionMap();
|
||||||
Resource uriResource = ResourceFactory.createResource(individual.getURI());
|
initialBinding.add("uri", ResourceFactory.createResource(individual.getURI()));
|
||||||
initialBinding.add("uri", uriResource);
|
|
||||||
|
|
||||||
Query sparqlQuery = QueryFactory.create( query, Syntax.syntaxARQ);
|
for(String query : queries ){
|
||||||
model.getLock().enterCriticalSection(Lock.READ);
|
StringBuffer valuesForQuery = new StringBuffer();
|
||||||
try{
|
|
||||||
QueryExecution qExec = QueryExecutionFactory.create(sparqlQuery, model, initialBinding);
|
Query sparqlQuery = QueryFactory.create( query, Syntax.syntaxARQ);
|
||||||
|
model.getLock().enterCriticalSection(Lock.READ);
|
||||||
try{
|
try{
|
||||||
ResultSet results = qExec.execSelect();
|
QueryExecution qExec =
|
||||||
while(results.hasNext()){
|
QueryExecutionFactory.create(sparqlQuery, model, initialBinding);
|
||||||
QuerySolution soln = results.nextSolution();
|
try{
|
||||||
Iterator<String> iter = soln.varNames() ;
|
ResultSet results = qExec.execSelect();
|
||||||
while( iter.hasNext()){
|
while(results.hasNext()){
|
||||||
String name = iter.next();
|
valuesForQuery.append(
|
||||||
RDFNode node = soln.get( name );
|
getTextForRow( results.nextSolution() ) ) ;
|
||||||
if( node != null ){
|
|
||||||
propertyValues.append(" " + node.toString());
|
|
||||||
}else{
|
|
||||||
log.debug(name + " is null");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}catch(Throwable t){
|
||||||
|
if( ! shutdown )
|
||||||
|
log.error(t,t);
|
||||||
|
} finally{
|
||||||
|
qExec.close();
|
||||||
}
|
}
|
||||||
}catch(Throwable t){
|
}finally{
|
||||||
if( ! shutdown )
|
model.getLock().leaveCriticalSection();
|
||||||
log.error(t,t);
|
|
||||||
} finally{
|
|
||||||
qExec.close();
|
|
||||||
}
|
}
|
||||||
}finally{
|
if(log.isDebugEnabled()){
|
||||||
model.getLock().leaveCriticalSection();
|
log.debug("query: '" + query + "'");
|
||||||
|
log.debug("text for query: '" + valuesForQuery.toString() + "'");
|
||||||
|
}
|
||||||
|
allValues.append(valuesForQuery);
|
||||||
}
|
}
|
||||||
|
return allValues;
|
||||||
|
}
|
||||||
|
|
||||||
return propertyValues;
|
protected String getTextForRow( QuerySolution row){
|
||||||
|
if( row == null )
|
||||||
|
return "";
|
||||||
|
|
||||||
|
StringBuffer text = new StringBuffer();
|
||||||
|
Iterator<String> iter = row.varNames() ;
|
||||||
|
while( iter.hasNext()){
|
||||||
|
String name = iter.next();
|
||||||
|
RDFNode node = row.get( name );
|
||||||
|
if( node != null ){
|
||||||
|
text.append(" ").append( node.toString() );
|
||||||
|
}else{
|
||||||
|
log.debug(name + " is null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return text.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected static final String prefix = "prefix owl: <http://www.w3.org/2002/07/owl#> "
|
public void shutdown(){
|
||||||
+ " prefix vitroDisplay: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> "
|
shutdown=true;
|
||||||
+ " prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
|
}
|
||||||
+ " prefix core: <http://vivoweb.org/ontology/core#> "
|
|
||||||
+ " prefix foaf: <http://xmlns.com/foaf/0.1/> "
|
|
||||||
+ " prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> "
|
|
||||||
+ " prefix localNav: <http://vitro.mannlib.cornell.edu/ns/localnav#> "
|
|
||||||
+ " prefix bibo: <http://purl.org/ontology/bibo/> ";
|
|
||||||
|
|
||||||
//single valued queries for foaf:Agent
|
|
||||||
static {
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Position . " +
|
|
||||||
" ?c core:hrJobTitle ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Position . " +
|
|
||||||
" ?c core:involvedOrganizationName ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Position . " +
|
|
||||||
" ?c core:positionForPerson ?f . ?f rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Position . " +
|
|
||||||
" ?c core:positionInOrganization ?i . ?i rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Position . " +
|
|
||||||
" ?c core:titleOrRole ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Relationship . " +
|
|
||||||
" ?c core:advisee ?d . ?d rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Relationship . " +
|
|
||||||
" ?c core:degreeCandidacy ?e . ?e rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Relationship . " +
|
|
||||||
" ?c core:linkedAuthor ?f . ?f rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:Relationship . " +
|
|
||||||
" ?c core:linkedInformationResource ?h . ?h rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:AwardReceipt . " +
|
|
||||||
" ?c core:awardConferredBy ?d . ?d rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:AwardReceipt . " +
|
|
||||||
" ?c core:awardOrHonorFor ?e . ?e rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT " +
|
|
||||||
"(str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {" +
|
|
||||||
"?uri rdf:type foaf:Agent ; ?b ?c . " +
|
|
||||||
" ?c rdf:type core:AwardReceipt . " +
|
|
||||||
" ?c core:description ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT DISTINCT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:Role ; core:roleIn ?Organization ."
|
|
||||||
+ " ?Organization rdfs:label ?ContextNodeProperty . "
|
|
||||||
+ " } ORDER BY ?ContextNodeProperty ");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:EducationalTraining . "
|
|
||||||
+ " ?c core:degreeEarned ?d . ?d rdfs:label ?ContextNodeProperty ."
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:EducationalTraining . "
|
|
||||||
+ " ?c core:degreeEarned ?d . ?d core:abbreviation ?ContextNodeProperty ."
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:EducationalTraining . "
|
|
||||||
+ " ?c core:majorField ?ContextNodeProperty ."
|
|
||||||
+ " }");
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:EducationalTraining . "
|
|
||||||
+ " ?c core:departmentOrSchool ?ContextNodeProperty ."
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
singleValuedQueriesForAgent.add(prefix + "SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:EducationalTraining . "
|
|
||||||
+ " ?c core:trainingAtOrganization ?e . ?e rdfs:label ?ContextNodeProperty . "
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//single valued queries for core:InformationResource
|
|
||||||
static {
|
|
||||||
singleValuedQueriesForInformationResource.add(prefix +
|
|
||||||
"SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ " ?uri rdf:type core:InformationResource . "
|
|
||||||
+ "?uri core:informationResourceInAuthorship ?a . ?a core:linkedAuthor ?b ."
|
|
||||||
+ "?b rdfs:label ?ContextNodeProperty .}");
|
|
||||||
|
|
||||||
singleValuedQueriesForInformationResource.add(prefix +
|
|
||||||
"SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ " ?uri rdf:type core:InformationResource . "
|
|
||||||
+ " ?uri core:linkedInformationResource ?d ."
|
|
||||||
+ " ?d rdfs:label ?ContextNodeProperty . }");
|
|
||||||
|
|
||||||
singleValuedQueriesForInformationResource.add(prefix +
|
|
||||||
"SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type core:InformationResource . "
|
|
||||||
+ "?uri core:features ?i . ?i rdfs:label ?ContextNodeProperty ."
|
|
||||||
+ "}");
|
|
||||||
|
|
||||||
singleValuedQueriesForInformationResource.add(prefix +
|
|
||||||
"SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type core:InformationResource . "
|
|
||||||
+ "?uri bibo:editor ?e . ?e rdfs:label ?ContextNodeProperty ."
|
|
||||||
+ "}");
|
|
||||||
|
|
||||||
singleValuedQueriesForInformationResource.add(prefix +
|
|
||||||
"SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type core:InformationResource . "
|
|
||||||
+ "?uri core:hasSubjectArea ?f . ?f rdfs:label ?ContextNodeProperty ."
|
|
||||||
+ "}");
|
|
||||||
|
|
||||||
singleValuedQueriesForInformationResource.add(prefix +
|
|
||||||
"SELECT (str(?ContextNodeProperty) as ?contextNodeProperty) WHERE {"
|
|
||||||
+ "?uri rdf:type core:InformationResource . "
|
|
||||||
+ "?uri core:hasSubjectArea ?f . ?f core:researchAreaOf ?h . ?h rdfs:label ?ContextNodeProperty ."
|
|
||||||
+ "}");
|
|
||||||
}
|
|
||||||
|
|
||||||
//multi valued queries
|
|
||||||
|
|
||||||
static{
|
|
||||||
multiValuedQueriesForAgent.add(prefix +
|
|
||||||
"SELECT " +
|
|
||||||
"(str(?HRJobTitle) as ?hrJobTitle) (str(?InvolvedOrganizationName) as ?involvedOrganizationName) " +
|
|
||||||
" (str(?PositionForPerson) as ?positionForPerson) (str(?PositionInOrganization) as ?positionInOrganization) " +
|
|
||||||
" (str(?TitleOrRole) as ?titleOrRole) WHERE {"
|
|
||||||
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:Position . "
|
|
||||||
|
|
||||||
+ " OPTIONAL { ?c core:hrJobTitle ?HRJobTitle . } . "
|
|
||||||
+ " OPTIONAL { ?c core:involvedOrganizationName ?InvolvedOrganizationName . } ."
|
|
||||||
+ " OPTIONAL { ?c core:positionForPerson ?f . ?f rdfs:label ?PositionForPerson . } . "
|
|
||||||
+ " OPTIONAL { ?c core:positionInOrganization ?i . ?i rdfs:label ?PositionInOrganization . } . "
|
|
||||||
+ " OPTIONAL { ?c core:titleOrRole ?TitleOrRole . } . "
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
multiValuedQueriesForAgent.add(prefix +
|
|
||||||
"SELECT (str(?Advisee) as ?advisee) (str(?DegreeCandidacy) as ?degreeCandidacy) " +
|
|
||||||
" (str(?LinkedAuthor) as ?linkedAuthor) (str(?LinkedInformationResource) as ?linkedInformationResource) WHERE {"
|
|
||||||
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:Relationship . "
|
|
||||||
|
|
||||||
+ " OPTIONAL { ?c core:advisee ?d . ?d rdfs:label ?Advisee . } . "
|
|
||||||
+ " OPTIONAL { ?c core:degreeCandidacy ?e . ?e rdfs:label ?DegreeCandidacy . } ."
|
|
||||||
+ " OPTIONAL { ?c core:linkedAuthor ?f . ?f rdfs:label ?LinkedAuthor . } . "
|
|
||||||
+ " OPTIONAL { ?c core:linkedInformationResource ?h . ?h rdfs:label ?LinkedInformationResource . } . "
|
|
||||||
+ " } ");
|
|
||||||
|
|
||||||
multiValuedQueriesForAgent.add(prefix +
|
|
||||||
"SELECT (str(?AwardConferredBy) as ?awardConferredBy) (str(?AwardOrHonorFor) as ?awardOrHonorFor) " +
|
|
||||||
" (str(?Description) as ?description) WHERE {"
|
|
||||||
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:AwardReceipt . "
|
|
||||||
|
|
||||||
+ " OPTIONAL { ?c core:awardConferredBy ?d . ?d rdfs:label ?AwardConferredBy . } . "
|
|
||||||
+ " OPTIONAL { ?c core:awardOrHonorFor ?e . ?e rdfs:label ?AwardOrHonorFor . } ."
|
|
||||||
+ " OPTIONAL { ?c core:description ?Description . } . "
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
multiValuedQueriesForAgent.add(prefix +
|
|
||||||
"SELECT (str(?OrganizationLabel) as ?organizationLabel) WHERE {"
|
|
||||||
+ "?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:Role ; core:roleIn ?Organization ."
|
|
||||||
+ " ?Organization rdfs:label ?OrganizationLabel . "
|
|
||||||
+ " }");
|
|
||||||
|
|
||||||
multiValuedQueriesForAgent.add(prefix +
|
|
||||||
"SELECT (str(?AcademicDegreeLabel) as ?academicDegreeLabel) (str(?AcademicDegreeAbbreviation) as ?academicDegreeAbbreviation) "
|
|
||||||
+ "(str(?MajorField) as ?majorField) (str(?DepartmentOrSchool) as ?departmentOrSchool) " +
|
|
||||||
"(str(?TrainingAtOrganizationLabel) as ?trainingAtOrganizationLabel) WHERE {"
|
|
||||||
|
|
||||||
+ " ?uri rdf:type foaf:Agent ; ?b ?c . "
|
|
||||||
+ " ?c rdf:type core:EducationalTraining . "
|
|
||||||
|
|
||||||
+ "OPTIONAL { ?c core:degreeEarned ?d . ?d rdfs:label ?AcademicDegreeLabel ; core:abbreviation ?AcademicDegreeAbbreviation . } . "
|
|
||||||
+ "OPTIONAL { ?c core:majorField ?MajorField .} ."
|
|
||||||
+ " OPTIONAL { ?c core:departmentOrSchool ?DepartmentOrSchool . }"
|
|
||||||
+ " OPTIONAL { ?c core:trainingAtOrganization ?e . ?e rdfs:label ?TrainingAtOrganizationLabel . } . "
|
|
||||||
+"}");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//multivalued query for core:InformationResource
|
|
||||||
static {
|
|
||||||
|
|
||||||
multiValuedQueryForInformationResource = prefix +
|
|
||||||
"SELECT (str(?LinkedAuthor) as ?linkedAuthor) (str(?LinkedInformationResource) as ?linkedInformationResource) "
|
|
||||||
+ "(str(?Editor) as ?editor) (str(?SubjectArea) as ?subjectArea) " +
|
|
||||||
"(str(?Features) as ?features) WHERE {"
|
|
||||||
|
|
||||||
+ " ?uri rdf:type core:InformationResource . "
|
|
||||||
|
|
||||||
+ "OPTIONAL { ?uri core:informationResourceInAuthorship ?a . ?a core:linkedAuthor ?b ; core:linkedInformationResource ?d ." +
|
|
||||||
"?b rdfs:label ?LinkedAuthor . ?d rdfs:label ?LinkedInformationResource .} . "
|
|
||||||
+ "OPTIONAL { ?uri bibo:editor ?e . ?e rdfs:label ?Editor . } ."
|
|
||||||
+ " OPTIONAL { ?uri core:hasSubjectArea ?f . ?f rdfs:label ?SubjectArea . } "
|
|
||||||
+ " OPTIONAL { ?uri core:features ?i . ?i rdfs:label ?Features . } . "
|
|
||||||
+"}" ;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public void shutdown(){
|
|
||||||
shutdown=true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,9 +80,15 @@ public class SolrSetup implements javax.servlet.ServletContextListener{
|
||||||
|
|
||||||
OntModel jenaOntModel = ModelContext.getJenaOntModel(context);
|
OntModel jenaOntModel = ModelContext.getJenaOntModel(context);
|
||||||
|
|
||||||
List<DocumentModifier> modifiers = new ArrayList<DocumentModifier>();
|
|
||||||
modifiers.add(new CalculateParameters(dataset));
|
/* try to get context attribute DocumentModifiers
|
||||||
modifiers.add(new ContextNodeFields(jenaOntModel));
|
* and use that as the start of the list of DocumentModifier
|
||||||
|
* objects. This allows other listeners to add to the basic set of
|
||||||
|
* DocumentModifiers. */
|
||||||
|
List<DocumentModifier> modifiers = (List<DocumentModifier>)context.getAttribute("DocumentModifiers");
|
||||||
|
if( modifiers == null )
|
||||||
|
modifiers = new ArrayList<DocumentModifier>();
|
||||||
|
|
||||||
modifiers.add(new NameBoost());
|
modifiers.add(new NameBoost());
|
||||||
modifiers.add(new ThumbnailImageURL(jenaOntModel));
|
modifiers.add(new ThumbnailImageURL(jenaOntModel));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue