updates for adding concepts, including urls for agrovoc and umls services and updating person has educational training to add the inverse property from organization to educational training

This commit is contained in:
hjkhjk54 2011-11-30 21:47:28 +00:00
parent c240321458
commit 49ff104d3a
7 changed files with 39 additions and 33 deletions

View file

@ -206,7 +206,7 @@ var addConceptForm = {
var htmlAdd = "<li class='concepts'>" + var htmlAdd = "<li class='concepts'>" +
"<div class='row'>" + "<div class='row'>" +
"<span class='column conceptLabel'>" + "<span class='column conceptLabel'>" +
addConceptForm.generateIndividualCUIInput(cuiURI, label, definition, type, definedBy) + addConceptForm.generateIndividualCUIInput(cuiURI, label, type, definedBy) +
label + addConceptForm.generateIndividualTypeDisplay(type) + "</span>" + label + addConceptForm.generateIndividualTypeDisplay(type) + "</span>" +
addConceptForm.generateIndividualDefinitionDisplay(definition) + addConceptForm.generateIndividualDefinitionDisplay(definition) +
"</div>" + "</div>" +

View file

@ -3,6 +3,7 @@
<#assign existingConcepts = editConfiguration.pageData.existingConcepts/> <#assign existingConcepts = editConfiguration.pageData.existingConcepts/>
<#assign userDefinedConceptUrl = editConfiguration.pageData.userDefinedConceptUrl/> <#assign userDefinedConceptUrl = editConfiguration.pageData.userDefinedConceptUrl/>
<#assign sources = editConfiguration.pageData.searchServices/>
<#--If edit submission exists, then retrieve validation errors if they exist--> <#--If edit submission exists, then retrieve validation errors if they exist-->
<#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content> <#if editSubmission?has_content && editSubmission.submissionExists = true && editSubmission.validationErrors?has_content>
@ -10,10 +11,6 @@
</#if> </#if>
<#--This is set for testing purposes - will be retrieved dynamically from the generator later-->
<#assign sources = [{"uri":"http://link.informatics.stonybrook.edu/umls/", "label":"UMLS"}, {"uri":"http://www.fao.org/webservices/Agrovoc", "label":"Agrovoc"}]/>
<#assign selectedSource = "UMLS" />
<h2>Manage Concepts</h2> <h2>Manage Concepts</h2>
@ -81,9 +78,9 @@
</div> </div>
<form id="addConceptForm" class="customForm" action="${submitUrl}"> <form id="addConceptForm" class="customForm" action="${submitUrl}">
<#list sources as source> <#list sources?keys as sourceUri>
<input type="radio" id="source" name="source" value="${source.uri}" role="radio" <#if selectedSource = source.uri>checked</#if> /> <input type="radio" id="source" name="source" value="${sourceUri}" role="radio" />
<label class="inline" for="${source.label}"> ${source.label}</label> <label class="inline" for="${sources[sourceUri]}"> ${sources[sourceUri]}</label>
<br /> <br />
</#list> </#list>

View file

@ -66,7 +66,7 @@ public class AgrovocService implements ExternalConceptService {
//XMLUtils.serializeNode(node); System.out.println(); //XMLUtils.serializeNode(node); System.out.println();
Concept concept = new Concept(); Concept concept = new Concept();
concept.setDefinedBy("Agrovoc"); concept.setDefinedBy("http://aims.fao.org/aos/agrovoc/agrovocScheme");
concept.setConceptId(termcode); concept.setConceptId(termcode);
NamedNodeMap attrs = node.getAttributes(); NamedNodeMap attrs = node.getAttributes();

View file

@ -82,7 +82,7 @@ public class UMLSService implements ExternalConceptService {
JSONObject o = bestMatchArray.getJSONObject(i); JSONObject o = bestMatchArray.getJSONObject(i);
//System.out.println(o.toString()); //System.out.println(o.toString());
Concept concept = new Concept(); Concept concept = new Concept();
concept.setDefinedBy("UMLS"); concept.setDefinedBy("http://link.informatics.stonybrook.edu/umls");
concept.setBestMatch("true"); concept.setBestMatch("true");
String cui = getJsonValue(o, "CUI"); String cui = getJsonValue(o, "CUI");
bestMatchIdList.add(cui); bestMatchIdList.add(cui);

View file

@ -54,6 +54,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.web.MiscWebUtils; import edu.cornell.mannlib.vitro.webapp.web.MiscWebUtils;
import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch; import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils;
import edu.cornell.mannlib.vitro.webapp.utils.ConceptSearchService.ConceptSearchServiceUtils;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils;
/** /**
@ -306,19 +307,12 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements
//Form specific data //Form specific data
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
HashMap<String, Object> formSpecificData = new HashMap<String, Object>(); HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
//Existing concepts should probably be a hash map or a hash map of classes //These are the concepts that already exist currently
//with URI of concept node to label and information about existing URI formSpecificData.put("existingConcepts", getExistingConcepts(vreq));
//This would be a sparql query and would need to be run here?
//-------------------->For test purposes
List<AssociatedConceptInfo> testInfo = new ArrayList<AssociatedConceptInfo>();
testInfo.add(new AssociatedConceptInfo("testLabel", "testURI", "testVocabURI", "testVocabLabel", null));
testInfo.add(new AssociatedConceptInfo("user defined label", "testUserURI", null, null, "http://www.w3.org/2004/02/skos/core#Concept"));
//Adding concepts
testInfo.addAll(getExistingConcepts(vreq));
formSpecificData.put("existingConcepts", testInfo);
//Return url for adding user defined concept //Return url for adding user defined concept
formSpecificData.put("userDefinedConceptUrl", getUserDefinedConceptUrl(vreq)); formSpecificData.put("userDefinedConceptUrl", getUserDefinedConceptUrl(vreq));
//Add URIs and labels for different services
formSpecificData.put("searchServices", ConceptSearchServiceUtils.getVocabSources());
editConfiguration.setFormSpecificData(formSpecificData); editConfiguration.setFormSpecificData(formSpecificData);
} }
@ -342,17 +336,17 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements
//TODO: Check if sorted correctly //TODO: Check if sorted correctly
sortConceptIndividuals(concepts); sortConceptIndividuals(concepts);
return getAssociatedConceptInfo(concepts); return getAssociatedConceptInfo(concepts, vreq);
} }
private void sortConceptIndividuals(List<Individual> authorships) { private void sortConceptIndividuals(List<Individual> concepts) {
DataPropertyComparator comp = new DataPropertyComparator(RDFS.label.getURI()); DataPropertyComparator comp = new DataPropertyComparator(RDFS.label.getURI());
Collections.sort(authorships, comp); Collections.sort(concepts, comp);
} }
private List<AssociatedConceptInfo> getAssociatedConceptInfo( private List<AssociatedConceptInfo> getAssociatedConceptInfo(
List<Individual> concepts) { List<Individual> concepts, VitroRequest vreq) {
List<AssociatedConceptInfo> info = new ArrayList<AssociatedConceptInfo>(); List<AssociatedConceptInfo> info = new ArrayList<AssociatedConceptInfo>();
for ( Individual conceptIndividual : concepts ) { for ( Individual conceptIndividual : concepts ) {
boolean isSKOSConcept = false; boolean isSKOSConcept = false;
@ -376,8 +370,9 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements
String vocabLabel = null; String vocabLabel = null;
if(vocabList != null && vocabList.size() > 0) { if(vocabList != null && vocabList.size() > 0) {
vocabSource = vocabList.get(0).getObjectURI(); vocabSource = vocabList.get(0).getObjectURI();
//vocab label? Right now set as same to vocab source until we get the correct input Individual sourceIndividual = EditConfigurationUtils.getIndividual(vreq, vocabSource);
vocabLabel = vocabSource; //Assuming name will get label
vocabLabel = sourceIndividual.getName();
} }
info.add(new AssociatedConceptInfo(conceptLabel, conceptUri, vocabSource, vocabLabel, null)); info.add(new AssociatedConceptInfo(conceptLabel, conceptUri, vocabSource, vocabLabel, null));

View file

@ -89,7 +89,7 @@ public class PersonHasEducationalTraining extends VivoBaseGenerator implements
conf.setN3Optional(Arrays.asList( conf.setN3Optional(Arrays.asList(
n3ForEdTrainingToOrg, majorFieldAssertion, degreeAssertion, n3ForEdTrainingToOrg, majorFieldAssertion, degreeAssertion,
deptAssertion, infoAssertion, deptAssertion, infoAssertion,
n3ForStart, n3ForEnd )); n3ForStart, n3ForEnd, n3ForOrgToEdTraining ));
conf.addNewResource("edTraining", DEFAULT_NS_FOR_NEW_RESOURCE); conf.addNewResource("edTraining", DEFAULT_NS_FOR_NEW_RESOURCE);
conf.addNewResource("org",DEFAULT_NS_FOR_NEW_RESOURCE); conf.addNewResource("org",DEFAULT_NS_FOR_NEW_RESOURCE);
@ -119,6 +119,8 @@ public class PersonHasEducationalTraining extends VivoBaseGenerator implements
conf.addSparqlForExistingUris("endNode", existingEndNodeQuery); conf.addSparqlForExistingUris("endNode", existingEndNodeQuery);
conf.addSparqlForExistingUris("startField-precision", existingStartPrecisionQuery); conf.addSparqlForExistingUris("startField-precision", existingStartPrecisionQuery);
conf.addSparqlForExistingUris("endField-precision", existingEndPrecisionQuery); conf.addSparqlForExistingUris("endField-precision", existingEndPrecisionQuery);
//Add sparql to include inverse property as well
conf.addSparqlForAdditionalUrisInScope("inverseTrainingAtOrg", inverseTrainingAtOrgQuery);
conf.addField( new FieldVTwo(). conf.addField( new FieldVTwo().
setName("degree"). setName("degree").
@ -228,7 +230,9 @@ public class PersonHasEducationalTraining extends VivoBaseGenerator implements
final static String n3ForEdTrainingToOrg = final static String n3ForEdTrainingToOrg =
"?edTraining <"+ trainingAtOrg +"> ?org ."; "?edTraining <"+ trainingAtOrg +"> ?org .";
//The inverse of the above
final static String n3ForOrgToEdTraining =
"?org ?inverseTrainingAtOrg ?edTraining .";
/* Queries for editing an existing educational training entry */ /* Queries for editing an existing educational training entry */
final static String orgQuery = final static String orgQuery =
@ -318,6 +322,13 @@ public class PersonHasEducationalTraining extends VivoBaseGenerator implements
"?endNode <"+ type +"> <"+ dateTimeValueType +"> .\n"+ "?endNode <"+ type +"> <"+ dateTimeValueType +"> .\n"+
"?endNode <"+ dateTimePrecision +"> ?existingEndPrecision . }"; "?endNode <"+ dateTimePrecision +"> ?existingEndPrecision . }";
//Query for inverse property
final static String inverseTrainingAtOrgQuery =
"PREFIX owl: <http://www.w3.org/2002/07/owl#>"
+ " SELECT ?inverseTrainingAtOrg "
+ " WHERE { ?inverseTrainingAtOrg owl:inverseOf <"+ trainingAtOrg +"> . } ";
//Adding form specific data such as edit mode //Adding form specific data such as edit mode
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
HashMap<String, Object> formSpecificData = new HashMap<String, Object>(); HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
@ -331,4 +342,6 @@ public class PersonHasEducationalTraining extends VivoBaseGenerator implements
return EditModeUtils.getEditMode(vreq, predicates); return EditModeUtils.getEditMode(vreq, predicates);
} }
} }

View file

@ -19,8 +19,9 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
public class ConceptSearchServiceUtils { public class ConceptSearchServiceUtils {
private static final Log log = LogFactory.getLog(ConceptSearchServiceUtils.class); private static final Log log = LogFactory.getLog(ConceptSearchServiceUtils.class);
//Get the appropriate search service class //Get the appropriate search service class
private static final String UMLSVocabSource = "http://link.informatics.stonybrook.edu/umls/"; //TODO: Change this so retrieved from the system instead using a query
private static final String AgrovocVocabSource = "http://www.fao.org/webservices/Agrovoc"; private static final String UMLSVocabSource = "http://link.informatics.stonybrook.edu/umls";
private static final String AgrovocVocabSource = "http://aims.fao.org/aos/agrovoc/agrovocScheme";
//Get the class that corresponds to the appropriate search //Get the class that corresponds to the appropriate search
public static String getConceptSearchServiceClassName(String searchServiceName) { public static String getConceptSearchServiceClassName(String searchServiceName) {
HashMap<String, String> map = getMapping(); HashMap<String, String> map = getMapping();
@ -44,8 +45,8 @@ public class ConceptSearchServiceUtils {
//Get the hashmap mapping service name to Service class //Get the hashmap mapping service name to Service class
private static HashMap<String, String> getMapping() { private static HashMap<String, String> getMapping() {
HashMap<String, String> map = new HashMap<String, String>(); HashMap<String, String> map = new HashMap<String, String>();
map.put("http://link.informatics.stonybrook.edu/umls/", "edu.cornell.mannlib.semservices.service.impl.UMLSService"); map.put(UMLSVocabSource, "edu.cornell.mannlib.semservices.service.impl.UMLSService");
map.put("http://www.fao.org/webservices/Agrovoc", "edu.cornell.mannlib.semservices.service.impl.AgrovocService"); map.put(AgrovocVocabSource, "edu.cornell.mannlib.semservices.service.impl.AgrovocService");
return map; return map;
} }