From a9ebf8f94b2cd439a94ffba35a5fa16c58d2e5dd Mon Sep 17 00:00:00 2001 From: hudajkhan Date: Thu, 5 Sep 2013 15:45:49 -0400 Subject: [PATCH 1/5] updates for concept search and label management --- .../filegraph/tbox/ConceptSemanticType.owl | 47 ------- productMods/images/individual/manage-icon.png | Bin 442 -> 0 bytes .../individual--foaf-person-2column.ftl | 5 +- .../individual--foaf-person-quickview.ftl | 5 +- .../manageLabelsForIndividualTerms.ftl | 4 + .../edit/forms/addAssociatedConcept.ftl | 3 + rdf/abox/filegraph/vocabularySource.n3 | 5 +- rdf/abox/firsttime/vocabularySource-labels.n3 | 3 - .../AddAssociatedConceptGenerator.java | 42 +++--- .../AddAssociatedConceptsPreprocessor.java | 2 + .../ConceptSemanticTypesPreprocessor.java | 125 ++++++++++++++++++ themes/wilma/i18n/all.properties | 1 - .../templates/individual--foaf-person.ftl | 5 +- 13 files changed, 171 insertions(+), 76 deletions(-) delete mode 100644 productMods/WEB-INF/filegraph/tbox/ConceptSemanticType.owl delete mode 100644 productMods/images/individual/manage-icon.png create mode 100644 productMods/templates/freemarker/body/individual/manageLabelsForIndividualTerms.ftl delete mode 100644 rdf/abox/firsttime/vocabularySource-labels.n3 create mode 100644 src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/ConceptSemanticTypesPreprocessor.java diff --git a/productMods/WEB-INF/filegraph/tbox/ConceptSemanticType.owl b/productMods/WEB-INF/filegraph/tbox/ConceptSemanticType.owl deleted file mode 100644 index 04ab3d10..00000000 --- a/productMods/WEB-INF/filegraph/tbox/ConceptSemanticType.owl +++ /dev/null @@ -1,47 +0,0 @@ - - - 0.7 - - - - Semantic Type for given concept, for example UMLS's type returned for concepts - Semantic Type for given concept, for example UMLS's type returned for concepts. - - Concept Semantic Type - - - - - - - - diff --git a/productMods/images/individual/manage-icon.png b/productMods/images/individual/manage-icon.png deleted file mode 100644 index 18ab57568ac41b966310fb3d4a49d01ec26b1007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmV;r0Y(0aP)II%X%=)f=|b;ts6j8F*SVX<{f~-$7it|P;nuY{f7cOVRrNb@grg^ z)&*iGDn{!rWQ(!JF(V@*%@P&NJ{BDD5ecL;f%rQW?c@aF>p;95Ur=WPF+UAFY!9=T z35SAEG{2qv3 zQrY55$R!{Po?y8N#7anFYoV@Y2I6QSmcXJ9Bamu_vs+0pb}z z{0ho9#9=YWSBs!*K_K>rIurzMBP(RWWAOvzQWRRX2|yjAheMAMw0s8@K2=DTenU^N z_$+>kUQGkB5D@zTu?P-5!ccV}-?|}*zXswr#0K?qAf5umvPfbdfp{;}AY9-S5Pt&V kjYwkqf%qS?B7gt`051qma(^>G%m4rY07*qoM6N<$f}_l>>Hq)$ diff --git a/productMods/templates/freemarker/body/individual/individual--foaf-person-2column.ftl b/productMods/templates/freemarker/body/individual/individual--foaf-person-2column.ftl index d3a63df8..b50f47af 100644 --- a/productMods/templates/freemarker/body/individual/individual--foaf-person-2column.ftl +++ b/productMods/templates/freemarker/body/individual/individual--foaf-person-2column.ftl @@ -10,6 +10,9 @@ <#if !labelCount??> <#assign labelCount = 0 > +<#if !localesCount??> + <#assign localesCount = 1> + <#assign qrCodeIcon = "qr-code-icon.png"> <#assign visRequestingTemplate = "foaf-person-2column">
@@ -40,7 +43,7 @@ <#else>

style="float:left;border-right:1px solid #A6B1B0;"> <#-- Label --> - <@p.label individual editable labelCount/> + <@p.label individual editable labelCount localesCount/>

<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#assign title = propertyGroups.pullProperty("${core}preferredTitle")!> diff --git a/productMods/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl b/productMods/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl index 810250b5..006f1f8e 100644 --- a/productMods/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl +++ b/productMods/templates/freemarker/body/individual/individual--foaf-person-quickview.ftl @@ -12,6 +12,9 @@ <#if !labelCount??> <#assign labelCount = 0 > +<#if !localesCount??> + <#assign localesCount = 1> + <#assign qrCodeIcon = "qr-code-icon.png"> <#assign individualImage> <@p.image individual=individual @@ -52,7 +55,7 @@
${individualImage}

style="float:left;border-right:1px solid #A6B1B0;"> <#-- Label --> - <@p.label individual editable labelCount/> + <@p.label individual editable labelCount localesCount/>

<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#assign title = propertyGroups.pullProperty("${core}preferredTitle")!> diff --git a/productMods/templates/freemarker/body/individual/manageLabelsForIndividualTerms.ftl b/productMods/templates/freemarker/body/individual/manageLabelsForIndividualTerms.ftl new file mode 100644 index 00000000..cca1dcb6 --- /dev/null +++ b/productMods/templates/freemarker/body/individual/manageLabelsForIndividualTerms.ftl @@ -0,0 +1,4 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#--Some values for labels etc. may be different between vitro and other systems --> +<#assign returnText = "${i18n().return_to_profile}" /> \ No newline at end of file diff --git a/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl b/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl index f08e0f35..bacdf43f 100644 --- a/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl +++ b/productMods/templates/freemarker/edit/forms/addAssociatedConcept.ftl @@ -51,6 +51,9 @@ <#if existingConcept.vocabURI?has_content && existingConcept.vocabLabel?has_content> (${existingConcept.vocabLabel}) + <#if existingConcept.conceptSemanticTypeLabel?has_content> + ${existingConcept.conceptSemanticTypeLabel} +  ${i18n().remove_capitalized} diff --git a/rdf/abox/filegraph/vocabularySource.n3 b/rdf/abox/filegraph/vocabularySource.n3 index 97690dd7..a111d896 100644 --- a/rdf/abox/filegraph/vocabularySource.n3 +++ b/rdf/abox/filegraph/vocabularySource.n3 @@ -1,3 +1,6 @@ . . - . \ No newline at end of file + . + "UMLS"^^ . + "AGROVOC"^^ . + "GEMET"^^ . \ No newline at end of file diff --git a/rdf/abox/firsttime/vocabularySource-labels.n3 b/rdf/abox/firsttime/vocabularySource-labels.n3 deleted file mode 100644 index a0a7966e..00000000 --- a/rdf/abox/firsttime/vocabularySource-labels.n3 +++ /dev/null @@ -1,3 +0,0 @@ - "UMLS"^^ . - "AGROVOC"^^ . - "GEMET"^^ . \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java index 9b9ce7f5..23f4e1bf 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/AddAssociatedConceptGenerator.java @@ -396,37 +396,38 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements } + //To determine whether or not a concept is a user generated or one from an external vocab source. + //we cannot rely on whether or not it is a skos concept because incorporating UMLS semantic network classes as + //SKOS concept subclasses means that even concepts from an external vocab source might be considered SKOS concepts + //Instead, we will simply determine whether a concept is defined by an external vocabulary source and use that + //as the primary indicator of whether a concept is from an external vocabulary source or a user generated concept private List getAssociatedConceptInfo( List concepts, VitroRequest vreq) { List info = new ArrayList(); for ( Individual conceptIndividual : concepts ) { - boolean isSKOSConcept = false; + boolean userGenerated = true; + //Note that this isn't technically String conceptUri = conceptIndividual.getURI(); String conceptLabel = conceptIndividual.getName(); - //Check if SKOS Concept type - List osl = conceptIndividual.getObjectPropertyStatements(RDF.type.getURI()); - for(ObjectPropertyStatement os: osl) { - if(os.getObjectURI().equals(SKOSConceptType)) { - isSKOSConcept = true; - break; - } - } + //Check if defined by an external vocabulary source + List vocabList = conceptIndividual.getObjectPropertyStatements(RDFS.isDefinedBy.getURI()); + String vocabSource = null; + String vocabLabel = null; + if(vocabList != null && vocabList.size() > 0) { + userGenerated = false; + vocabSource = vocabList.get(0).getObjectURI(); + Individual sourceIndividual = EditConfigurationUtils.getIndividual(vreq, vocabSource); + //Assuming name will get label + vocabLabel = sourceIndividual.getName(); + } + - if(isSKOSConcept) { + + if(userGenerated) { //if the concept in question is skos - which would imply a user generated concept info.add(new AssociatedConceptInfo(conceptLabel, conceptUri, null, null, SKOSConceptType, null, null)); } else { - //Get the vocab source and vocab label - List vocabList = conceptIndividual.getObjectPropertyStatements(RDFS.isDefinedBy.getURI()); - String vocabSource = null; - String vocabLabel = null; - if(vocabList != null && vocabList.size() > 0) { - vocabSource = vocabList.get(0).getObjectURI(); - Individual sourceIndividual = EditConfigurationUtils.getIndividual(vreq, vocabSource); - //Assuming name will get label - vocabLabel = sourceIndividual.getName(); - } String conceptSemanticTypeURI = null; String conceptSemanticTypeLabel = null; //Can a concept have multiple semantic types? Currently we are only returning the first one @@ -438,7 +439,6 @@ public class AddAssociatedConceptGenerator extends VivoBaseGenerator implements if(typeAndLabel.containsKey("semanticTypeLabel")) { conceptSemanticTypeLabel = typeAndLabel.get("semanticTypeLabel"); } - //Assuming this is from an external vocabulary source info.add(new AssociatedConceptInfo(conceptLabel, conceptUri, vocabSource, vocabLabel, null, conceptSemanticTypeURI, conceptSemanticTypeLabel)); diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/AddAssociatedConceptsPreprocessor.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/AddAssociatedConceptsPreprocessor.java index b4429094..1b81dbf1 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/AddAssociatedConceptsPreprocessor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/AddAssociatedConceptsPreprocessor.java @@ -84,6 +84,8 @@ public class AddAssociatedConceptsPreprocessor extends //This will put the URI value in scope for the first semantic type label //and generate the rest if need be processConceptSemanticValues(); + //Also need to see if any broader or narrower uris for the concepts that already exist in the system + //and set up the appropriate relationships between this concept and the broader/narrower uri if (numberConcepts > 1) { processConceptNodes(numberConcepts); } diff --git a/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/ConceptSemanticTypesPreprocessor.java b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/ConceptSemanticTypesPreprocessor.java new file mode 100644 index 00000000..b95733b4 --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/ConceptSemanticTypesPreprocessor.java @@ -0,0 +1,125 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.query.Dataset; +import com.hp.hpl.jena.query.Query; +import com.hp.hpl.jena.query.QueryExecution; +import com.hp.hpl.jena.query.QueryExecutionFactory; +import com.hp.hpl.jena.query.QueryFactory; +import com.hp.hpl.jena.query.QuerySolutionMap; +import com.hp.hpl.jena.query.Syntax; +import com.hp.hpl.jena.rdf.model.Literal; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.rdf.model.Property; +import com.hp.hpl.jena.rdf.model.ResIterator; +import com.hp.hpl.jena.rdf.model.Resource; +import com.hp.hpl.jena.rdf.model.ResourceFactory; +import com.hp.hpl.jena.rdf.model.Statement; +import com.hp.hpl.jena.shared.Lock; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; + +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapper; +import edu.cornell.mannlib.vitro.webapp.dao.jena.DatasetWrapperFactory; + +//We are representing semantic types from the UMLS Semantic Network as OWL Classes +//and this preprocessor will add the appropriate class information to the TBox + +public class ConceptSemanticTypesPreprocessor implements ModelChangePreprocessor { + + private static String VIVOCore = "http://vivoweb.org/ontology/core#"; + private static String SKOSConceptType = "http://www.w3.org/2004/02/skos/core#Concept"; + private Log log = LogFactory.getLog(ConceptSemanticTypesPreprocessor.class); + + private OntModel toUpdateModel = null; + + //Custom constructor + public ConceptSemanticTypesPreprocessor(OntModel updateModel) { + this.toUpdateModel = updateModel; + } + + @Override + public void preprocess(Model retractionsModel, Model additionsModel, + HttpServletRequest request) { + //Run a construct query against the additions model + String prefixes = "PREFIX rdfs:<" + RDFS.getURI() + "> " + + "PREFIX owl: " + + "PREFIX rdf:<" + RDF.getURI() + ">" + + "PREFIX skos:"; + String constructQuery = prefixes + " CONSTRUCT { " + + "?semanticType rdf:type owl:Class. " + + "?semanticType rdfs:subClassOf skos:Concept . " + + "?semanticType rdfs:label ?label. " + + "} WHERE { " + + "?concept rdf:type ?semanticType. " + + "?semanticType rdfs:label ?label . " + + "?semanticType rdfs:subClassOf skos:Concept . " + + "}"; + + //Execute construct query + Model constructedModel = ModelFactory.createDefaultModel(); + + + log.debug("CONSTRUCT query string " + constructQuery); + + Query query = null; + try { + query = QueryFactory.create(constructQuery, Syntax.syntaxARQ); + } catch(Throwable th){ + log.error("Could not create CONSTRUCT SPARQL query for query " + + "string. " + th.getMessage()); + log.error(constructQuery); + return; + } + + + + additionsModel.getLock().enterCriticalSection(Lock.READ); + QueryExecution qe = null; + try { + qe = QueryExecutionFactory.create( + query, additionsModel); + qe.execConstruct(constructedModel); + } catch (Exception e) { + log.error("Error getting constructed model for query string " + constructQuery); + } finally { + if (qe != null) { + qe.close(); + } + additionsModel.getLock().leaveCriticalSection(); + } + + //Add constructed model to the designated update model + toUpdateModel.enterCriticalSection(Lock.WRITE); + try { + toUpdateModel.add(constructedModel); + } catch (Exception e) { + log.error("Error adding statements to update model for " + constructQuery); + } finally { + toUpdateModel.leaveCriticalSection(); + } + + //Take this constructed model and remove from the additions model + additionsModel.enterCriticalSection(Lock.WRITE); + try { + additionsModel.remove(constructedModel.listStatements().toList()); + } catch (Exception e) { + log.error("Error removing statements from additions model for " + constructQuery); + } finally { + additionsModel.leaveCriticalSection(); + } + + } + + + +} diff --git a/themes/wilma/i18n/all.properties b/themes/wilma/i18n/all.properties index 38583523..a0f2585f 100644 --- a/themes/wilma/i18n/all.properties +++ b/themes/wilma/i18n/all.properties @@ -280,7 +280,6 @@ change_selection = change selection # custom form templates ( /templates/freemarker/edit/forms ) # manage_concepts = Manage Concepts -remove_capitalized = Remove no_concepts_specified = There are currently no concepts specified. return_to_profile = Return to Profile Page external_vocabulary_services = External Vocabulary Services diff --git a/themes/wilma/templates/individual--foaf-person.ftl b/themes/wilma/templates/individual--foaf-person.ftl index 6e2161fb..761333be 100644 --- a/themes/wilma/templates/individual--foaf-person.ftl +++ b/themes/wilma/templates/individual--foaf-person.ftl @@ -11,6 +11,9 @@ <#if !labelCount??> <#assign labelCount = 0 > +<#if !localesCount??> + <#assign localesCount = 1> + <#assign visRequestingTemplate = "foaf-person-wilma">
@@ -55,7 +58,7 @@ <#else>

<#-- Label --> - <@p.label individual editable labelCount/> + <@p.label individual editable labelCount localesCount/> <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#assign title = propertyGroups.pullProperty("${core}preferredTitle")!> From 42fd5bee012ad196a4f16efab1073d637fa0003e Mon Sep 17 00:00:00 2001 From: j2blake Date: Fri, 6 Sep 2013 10:19:09 -0400 Subject: [PATCH 2/5] Clarify instructions on setting up runtime.properties --- doc/install.html | 4 ++-- doc/upgrade-1.6.html | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/doc/install.html b/doc/install.html index 33423d77..da502ae8 100644 --- a/doc/install.html +++ b/doc/install.html @@ -321,13 +321,13 @@

5. Specify runtime properties

- In Step 4, you defined the location of the Vitro home directory, + In Step 4, you defined the location of the VIVO home directory, by specifying vitro.home in the build.properties file. Create that directory now.

At the top level of the VIVO distribution directory, you will find a file called - example.runtime.properties. Copy this to the Vitro home directory you have created, + example.runtime.properties. Copy this to the VIVO home directory you have created, renaming the copy to runtime.properties. Edit the file to suit your installation, as described in the following table.

diff --git a/doc/upgrade-1.6.html b/doc/upgrade-1.6.html index 39a6e0f3..181888a7 100644 --- a/doc/upgrade-1.6.html +++ b/doc/upgrade-1.6.html @@ -394,7 +394,7 @@ rdf/tbox/filegraph/tbox/vivo-skos-1.5.owl -

III. Upgrade Instructions

+

III. Upgrade Instructions

1. Download the new distribution file and unpack it into a new @@ -402,9 +402,9 @@ rdf/tbox/filegraph/tbox/vivo-skos-1.5.owl

2. Separate your existing deploy.properties file into two files, - as described below. The new build.properties file is stored in - the top level of the VIVO distribution directory. The new runtime.properties - file is stored in your Vitro home directory. + as described below. Store the new build.properties file in + the top level of the VIVO distribution directory. Store the new runtime.properties + file in your VIVO home directory.

@@ -441,7 +441,8 @@ rdf/tbox/filegraph/tbox/vivo-skos-1.5.owl

If you prefer, you may start with example.build.properties and example.runtime.properties, make copies, - and edit them to suit your installation. + and edit them to suit your installation. Remember, the runtime.properties file + goes into your VIVO home directory.

From e3227af798b0fa5b1ce97308b942f3d87ca5022e Mon Sep 17 00:00:00 2001 From: j2blake Date: Mon, 9 Sep 2013 12:23:36 -0400 Subject: [PATCH 3/5] VIVO-262 Add languages to VIVO at build time. Move the language-specific files out of the default build area. Add a build property that will cause the selected language(s) to be copied into the build area. --- build.xml | 1 + .../firsttime/classgroups_labels_es.n3 | 0 .../firsttime/propertygroups_labels_es.n3 | 0 .../rdf/display/firsttime}/aboutPage_es.n3 | 0 .../example/rdf/display/firsttime}/menu_es.n3 | 0 .../tbox/firsttime/vivo-core-1.5-labels_es.n3 | 0 .../freemarker}/aboutMapOfScience_es.ftl | 0 .../templates/freemarker}/aboutQrCodes_es.ftl | 0 .../freemarker}/mapOfScienceTooltips_es.ftl | 0 .../example/themes}/wilma/i18n/all_es.properties | 0 .../wilma/i18n/images/select_locale_es_ES.GIF | Bin themes/wilma/i18n/images/select_locale_en_AU.GIF | Bin 1613 -> 0 bytes themes/wilma/i18n/images/select_locale_es_MX.GIF | Bin 1296 -> 0 bytes 13 files changed, 1 insertion(+) rename {rdf => languages/example/rdf}/applicationMetadata/firsttime/classgroups_labels_es.n3 (100%) rename {rdf => languages/example/rdf}/applicationMetadata/firsttime/propertygroups_labels_es.n3 (100%) rename {rdf/display/everytime => languages/example/rdf/display/firsttime}/aboutPage_es.n3 (100%) rename {rdf/display/everytime => languages/example/rdf/display/firsttime}/menu_es.n3 (100%) rename {rdf => languages/example/rdf}/tbox/firsttime/vivo-core-1.5-labels_es.n3 (100%) rename {productMods/templates/freemarker/visualization/mapOfScience => languages/example/templates/freemarker}/aboutMapOfScience_es.ftl (100%) rename {productMods/templates/freemarker/body => languages/example/templates/freemarker}/aboutQrCodes_es.ftl (100%) rename {productMods/templates/freemarker/visualization/mapOfScience => languages/example/templates/freemarker}/mapOfScienceTooltips_es.ftl (100%) rename {themes => languages/example/themes}/wilma/i18n/all_es.properties (100%) rename {themes => languages/example/themes}/wilma/i18n/images/select_locale_es_ES.GIF (100%) delete mode 100644 themes/wilma/i18n/images/select_locale_en_AU.GIF delete mode 100644 themes/wilma/i18n/images/select_locale_es_MX.GIF diff --git a/build.xml b/build.xml index 2100f27f..c19a9b9a 100644 --- a/build.xml +++ b/build.xml @@ -72,6 +72,7 @@ + diff --git a/rdf/applicationMetadata/firsttime/classgroups_labels_es.n3 b/languages/example/rdf/applicationMetadata/firsttime/classgroups_labels_es.n3 similarity index 100% rename from rdf/applicationMetadata/firsttime/classgroups_labels_es.n3 rename to languages/example/rdf/applicationMetadata/firsttime/classgroups_labels_es.n3 diff --git a/rdf/applicationMetadata/firsttime/propertygroups_labels_es.n3 b/languages/example/rdf/applicationMetadata/firsttime/propertygroups_labels_es.n3 similarity index 100% rename from rdf/applicationMetadata/firsttime/propertygroups_labels_es.n3 rename to languages/example/rdf/applicationMetadata/firsttime/propertygroups_labels_es.n3 diff --git a/rdf/display/everytime/aboutPage_es.n3 b/languages/example/rdf/display/firsttime/aboutPage_es.n3 similarity index 100% rename from rdf/display/everytime/aboutPage_es.n3 rename to languages/example/rdf/display/firsttime/aboutPage_es.n3 diff --git a/rdf/display/everytime/menu_es.n3 b/languages/example/rdf/display/firsttime/menu_es.n3 similarity index 100% rename from rdf/display/everytime/menu_es.n3 rename to languages/example/rdf/display/firsttime/menu_es.n3 diff --git a/rdf/tbox/firsttime/vivo-core-1.5-labels_es.n3 b/languages/example/rdf/tbox/firsttime/vivo-core-1.5-labels_es.n3 similarity index 100% rename from rdf/tbox/firsttime/vivo-core-1.5-labels_es.n3 rename to languages/example/rdf/tbox/firsttime/vivo-core-1.5-labels_es.n3 diff --git a/productMods/templates/freemarker/visualization/mapOfScience/aboutMapOfScience_es.ftl b/languages/example/templates/freemarker/aboutMapOfScience_es.ftl similarity index 100% rename from productMods/templates/freemarker/visualization/mapOfScience/aboutMapOfScience_es.ftl rename to languages/example/templates/freemarker/aboutMapOfScience_es.ftl diff --git a/productMods/templates/freemarker/body/aboutQrCodes_es.ftl b/languages/example/templates/freemarker/aboutQrCodes_es.ftl similarity index 100% rename from productMods/templates/freemarker/body/aboutQrCodes_es.ftl rename to languages/example/templates/freemarker/aboutQrCodes_es.ftl diff --git a/productMods/templates/freemarker/visualization/mapOfScience/mapOfScienceTooltips_es.ftl b/languages/example/templates/freemarker/mapOfScienceTooltips_es.ftl similarity index 100% rename from productMods/templates/freemarker/visualization/mapOfScience/mapOfScienceTooltips_es.ftl rename to languages/example/templates/freemarker/mapOfScienceTooltips_es.ftl diff --git a/themes/wilma/i18n/all_es.properties b/languages/example/themes/wilma/i18n/all_es.properties similarity index 100% rename from themes/wilma/i18n/all_es.properties rename to languages/example/themes/wilma/i18n/all_es.properties diff --git a/themes/wilma/i18n/images/select_locale_es_ES.GIF b/languages/example/themes/wilma/i18n/images/select_locale_es_ES.GIF similarity index 100% rename from themes/wilma/i18n/images/select_locale_es_ES.GIF rename to languages/example/themes/wilma/i18n/images/select_locale_es_ES.GIF diff --git a/themes/wilma/i18n/images/select_locale_en_AU.GIF b/themes/wilma/i18n/images/select_locale_en_AU.GIF deleted file mode 100644 index e4c2274c8deb7f9f33be2520d0cf3710fc114a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1613 zcmeIx{ZA7I7zglc<)w!bt1zfKet426 zd6H5Rml^VmfEsWEdXE&h#O)D9k05w>3Gd+~oQIXL{|?h)$pZxYmcK_!V2loB=1i@X$?=AAT8*?E%U36jTf9>sZO6t7fsoWQX>=VUnq zIe}#*JWI1IL9sZ&VkCZt<*c6oYToV3A+=wJ2A@PVC{AZV<#OH#ZVMYkTgNiIPS!89K#$KN}-qo zMJ09%N?9y+3qm0lJAz0k1eTD9nLyMC3{x;n!Vn4TQCMMyU=o5Pgc%~uW(i?7VP+*{ zG7%;dZZJqNyIaou2l=#=u}O z+G^?tfNXie+l0oB7SLFgUb42aqr;eMq9$@f*Zk0y+!%gWTap$qGa|f~_^V*u-In+B zpP&2SWii``L4RbXRvt6jbC2A@y8=gdc~3KfA!*zE7dpVF{voNYNmF|pBO5d;D|(X^ zx79iTSXRBgh(PE(6t8f-GBPFN0EG4Wd?UfD8fN2{Tk{#47Yswo<*__rKJyVfqetoDT zm^=}o)Kt1M!@%m+nj?pIy}lj+?2#9qENwGd`@Ivto;5pc-@)~&vSq1;0(;#<&!t0f zbHcL)O?dlxS7(K`@X5YX-EBMwrqttk))nd+Rl2Ju!?9t^m=IL2N@~>XRNrfC_%wDT zC4%a7auL+7IcLy}g1v*OToJZ4WVQAC_LdhNLQ(7M!rx=&Sff)y=>+TY&Qn{12wPtB zkhU0kb$MrD+myD*(t)dqBivE&OO0<1c>Gd(pI7aQZ?DVR7W;+e_x23<7oQ9M`MP(G z>gBcJ%;&n0Sowplfq?0qfg5xuSAug47lhIwuj!R#x1tI)Nx_k0 z!*51#AHSt#w$Zy=_U!dds4w!LKwY*Tg*Lyc{G4-pR_B=ipD}-f_dH;1=i;B9*2}kq yu9%Yja+7Udi0+rz>Cw9THTQPwYUbaGyX2bo?zNZ))Xvr8rW3U>Z^vaaVEI1}_k(Nz diff --git a/themes/wilma/i18n/images/select_locale_es_MX.GIF b/themes/wilma/i18n/images/select_locale_es_MX.GIF deleted file mode 100644 index 11c25782ba3452ebcc14221e15137027ab8356ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1296 zcmeH`|4$r67{>Q(g#(H?!NxnJmJ7D!4r)BK%7KmTXHKA=a>% z&|@vMo!V9=E!C-9OQ#adB+zyfzhs*$)}^GnrL?S}>IQ>#K@-m!c`y?~TY$@AZe&CpF$L(>dZHB{LEf&qXY({w}AT^`-((w$D-ZerJMcJq)X6OCd`gsQHX zjjEbZRgqMMs+6iMtNQ(lt}2>|qNuW>Qbmyzg(|WMQ3#SXRn`<)B{IP>0x}FrnmJD- zg-9}%h$tZ-Azm_l$VviBRf#Hy%8+6}5uhSR1&*l5oF_6Q6cUjorX#R~_YuxTI44#p z{yW`_!xF@jh>3_X#3G9YKawz#5Rw3*2vLYcfJ{^HA>c*4i3h3_$^c3L5&|)T2tt8} zybE$R$l4)m6R99lAesW481#rirx>)0oKs|Ng5N6m8NtT@3IQenBOnF=YXvL={0uOC zFT)ds$CSq`4}*Nr#rqlF#{@;5Lw+-k<9+6RSb=4M-;aS4arOkP4YADs`p*j#B#fVy4V)S6&MQ|f z(R1YL@q(2{ay<2oU)=jdNL}VBB-gt01F4~uz}f44rF-W8{O!@1s#BY~{ne>m4?W*o z*?SRrtKHWIYKEHLyfyLT_~3?-;qSQlnVJuFKHFHG)*jk6&^-OtJ74`0wVc~?=;B2F z{i{1NYd^G34z3%VI^TMJzRuY{_TJN-^SIeDai?xr*ydg+Ty;<5=RNa}G){Vd-ZA`= zqxQt^tQ*d<3htKtM{!~Kl7iN`$QxH4|9*Y?izP~0@nhx7>s~MQrr(ASuD91eyykkz zPdKSEJNoO+jE3@E6+5_W&yDEe&Tm4W^qrjkwk-VQ_Lhikw{kSsw`FFk-JTY$Io1}S za~;Xm%^9T*{zA^CjH;!lEcT~vN-M%Ou7%5%&0hyb*F;*zyHaHtWtCGg Date: Mon, 9 Sep 2013 14:19:04 -0400 Subject: [PATCH 4/5] VIVO-262 Document the language support configuration --- doc/install.html | 17 ++++++++++++ doc/upgrade-1.6.html | 63 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) diff --git a/doc/install.html b/doc/install.html index da502ae8..7740fd0f 100644 --- a/doc/install.html +++ b/doc/install.html @@ -316,6 +316,23 @@ /usr/local/vivo/home +

+ + + + + +
+ Languages (in addition to American English) that will be built into your + VIVO site. The languages must be found in the + languages directory of the VIVO distribution. + See + the VIVO Wiki for more information. +
+ languages.addToBuild + + es_MX +
diff --git a/doc/upgrade-1.6.html b/doc/upgrade-1.6.html index 181888a7..1e25bdfe 100644 --- a/doc/upgrade-1.6.html +++ b/doc/upgrade-1.6.html @@ -49,6 +49,7 @@
  • Multiple foaf:Person Profile Pages
  • Home Page Re-design
  • Auto-loaded RDF files move to the Home directory
  • +
  • Support for additional languages
  • ANYTHING ELSE?
  • @@ -362,6 +363,30 @@ rdf/tbox/filegraph/tbox/vivo-skos-1.5.owl </patternset>

    +

    Support for additional languages

    +

    + VIVO 1.6 includes limited support for other languages, in addition to American English. + This limited support is described as read-only support on public-facing + pages. +

    +

    + Read-only means that there is no provision for editing multi-language + data or displays. Property values, ontology labels, etc. must all be provided in RDF files + and ingested or otherwise inserted into the data model. The Page Management user interface + does not support maintaining pages in multiple languages. +

    +

    + Public-facing means that most of the pages used for site adminstration + are only presented in American English. +

    +

    + These two pages in the VIVO Wiki describe how to + + Build VIVO with multiple languages and how to + + Add a new language to VIVO. +

    +

    ANYTHING ELSE?

    @@ -445,6 +470,44 @@ rdf/tbox/filegraph/tbox/vivo-skos-1.5.owl goes into your VIVO home directory.

    +

    + The properties below are new to build.properties. They are optional, + so you need not add them unless you want a value other than the default. +

    +

    + +

    + + + + + + + + + + + + + + + +
    + Property Name + + Example Value +
    + Languages (in addition to American English) that will be built into your + VIVO site. The languages must be found in the + languages directory of the VIVO distribution. + See + the VIVO Wiki for more information. +
    + languages.addToBuild + + es_MX +
    +

    The properties below are new to runtime.properties. They are optional, so you need not add them, unless you want a value other than the default. From 69a45e573a0bae0dde8f661b8b1d7b6c2122366e Mon Sep 17 00:00:00 2001 From: j2blake Date: Mon, 9 Sep 2013 14:24:07 -0400 Subject: [PATCH 5/5] VIVO-262 Document the language support configuration --- example.build.properties | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/example.build.properties b/example.build.properties index 16c2b598..64fb99f2 100644 --- a/example.build.properties +++ b/example.build.properties @@ -37,3 +37,10 @@ webapp.name = vivo # This includes uploaded files (usually images) and the search index. # vitro.home = /usr/local/vivo/home + +# +# Additional languages to be built into your VIVO site. The locales specified +# here must appear as sub-directories of [vivo]/languages in the distribution. +# Find more information on the VIVO Wiki (https://wiki.duraspace.org/display/VIVO). +# +#languages.addToBuild =