diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 09b5b3bd..a2515869 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -28,4 +28,4 @@ jobs:
java-version: 11
- name: Maven Build
- run: mvn clean install
+ run: mvn clean package -s installer/example-settings.xml
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 84431d85..82012b89 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -35,7 +35,7 @@ jobs:
server-password: MAVEN_PASSWORD
- name: Maven Deploy
- run: mvn --batch-mode deploy
+ run: mvn --batch-mode deploy -Pskip
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 602ae6b1..26a2cf4a 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -32,7 +32,7 @@ jobs:
java-version: 11
- name: Maven Build
- run: mvn clean install
+ run: mvn clean package -s installer/example-settings.xml
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
diff --git a/Dockerfile b/Dockerfile
index ccfe74a7..6632d8b3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,20 +1,18 @@
FROM tomcat:9-jdk11-openjdk
ARG SOLR_URL=http://localhost:8983/solr/vivocore
-ARG VIVO_DIR=/opt/vivo/home
+ARG VIVO_DIR=/usr/local/vivo/home
ARG TDB_FILE_MODE=direct
ENV SOLR_URL=${SOLR_URL}
-ENV JAVA_OPTS="${JAVA_OPTS} -Dvivo-dir=$VIVO_DIR -Dtdb:fileMode=$TDB_FILE_MODE"
+ENV JAVA_OPTS="${JAVA_OPTS} -Dtdb:fileMode=$TDB_FILE_MODE"
-RUN mkdir /opt/vivo
-RUN mkdir /opt/vivo/home
+RUN mkdir /usr/local/vivo
+RUN mkdir /usr/local/vivo/home
+COPY ./installer/home/target/vivo /vivo-home
COPY ./installer/webapp/target/vivo.war /usr/local/tomcat/webapps/ROOT.war
-COPY ./home/src/main/resources/config/default.applicationSetup.n3 /applicationSetup.n3
-COPY ./home/src/main/resources/config/default.runtime.properties /runtime.properties
-
COPY start.sh /start.sh
EXPOSE 8080
diff --git a/LICENSE b/LICENSE
index 361eead5..3f840177 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2018, Cornell University
+Copyright (c) 2021, Cornell University
All rights reserved.
Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
index 0deb596c..08fc328a 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ https://wiki.duraspace.org/display/VIVO/
### Installation Instructions
Installation instructions for the latest release can be found at this location on the wiki:
-https://wiki.duraspace.org/display/VIVODOC110x/Installing+VIVO
+https://wiki.duraspace.org/display/VIVODOC112x/Installing+VIVO
### Docker
@@ -27,7 +27,7 @@ VIVO docker container is available at [vivoweb/vivo](https://hub.docker.com/repo
### Docker Compose
-Docker Compose environment variables.
+Docker Compose environment variables:
.env defaults
```
@@ -36,14 +36,27 @@ RESET_HOME=false
RESET_CORE=false
```
-- `LOCAL_VIVO_HOME`: VIVO home directory on your host machine which will mount to volume in docker container.
-- `RESET_HOME`: Convinience to reset VIVO home when starting container. **Caution** will delete local configuration, content, and configuration model.
-- `RESET_CORE`: Convinience to reset VIVO Solr core when starting container. **Caution** will require complete reindex.
+- `LOCAL_VIVO_HOME`: VIVO home directory on your host machine which will mount to volume in docker container. Set this environment variable to persist your VIVO data on your host machine.
+- `RESET_HOME`: Convenience to reset VIVO home when starting container. **Caution**, will delete local configuration, content, and configuration model.
+- `RESET_CORE`: Convenience to reset VIVO Solr core when starting container. **Caution**, will require complete reindex.
+
+Before building VIVO, you will also need to clone (and switch to the same branch, if other than main) of [Vitro](https://github.com/vivo-project/Vitro). The Vitro project must be cloned to a sibling directory next to VIVO so that it can be found during the build. You will also need to clone (and switch to the appropriate branch) of [Vitro-languages](https://github.com/vivo-project/Vitro-languages) and [VIVO-languages](https://github.com/vivo-project/VIVO-languages).
Build and start VIVO.
+1. In Vitro-languages, run:
```
-mvn clean install
+mvn install
+```
+
+2. In VIVO-languages, run:
+```
+mvn install
+```
+
+3. In VIVO (with Vitro cloned alongside it), run:
+```
+mvn clean package -s installer/example-settings.xml
docker-compose up
```
diff --git a/api/pom.xml b/api/pom.xml
index 3b3bfb19..20bd479e 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -7,13 +7,13 @@
org.vivoweb
vivo-api
- 1.11.2-SNAPSHOT
+ 1.12.1-SNAPSHOT
jar
org.vivoweb
vivo-project
- 1.11.2-SNAPSHOT
+ 1.12.1-SNAPSHOT
..
diff --git a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java
index 59653f3f..040f7904 100644
--- a/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java
+++ b/api/src/main/java/edu/cornell/mannlib/semservices/service/impl/UMLSService.java
@@ -4,12 +4,18 @@ package edu.cornell.mannlib.semservices.service.impl;
import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.fluent.Form;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.client.utils.URIBuilder;
+import org.springframework.util.StringUtils;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -18,11 +24,6 @@ import edu.cornell.mannlib.semservices.bo.Concept;
import edu.cornell.mannlib.semservices.exceptions.ConceptsNotFoundException;
import edu.cornell.mannlib.semservices.service.ExternalConceptService;
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils;
-import org.apache.http.HttpVersion;
-import org.apache.http.client.fluent.Form;
-import org.apache.http.client.fluent.Request;
-import org.apache.http.client.utils.URIBuilder;
-import org.springframework.util.StringUtils;
/**
* @author jaf30
@@ -54,11 +55,13 @@ public class UMLSService implements ExternalConceptService {
private static String UMLS_AUTH_USER_URL = "https://utslogin.nlm.nih.gov/cas/v1/tickets";
private static String UMLS_AUTH_KEY_URL = "https://utslogin.nlm.nih.gov/cas/v1/api-key";
private static String UTS_SERVICE_URL = "http://umlsks.nlm.nih.gov";
+ private static final String UMLS_PROPERTIES = "/umls.properties";
+ private static final Log log = LogFactory.getLog(UMLSService.class);
{
if (username == null || apikey == null) {
final Properties properties = new Properties();
- try (InputStream stream = getClass().getResourceAsStream("/umls.properties")) {
+ try (InputStream stream = getClass().getResourceAsStream(UMLS_PROPERTIES)) {
properties.load(stream);
username = properties.getProperty("username");
password = properties.getProperty("password");
@@ -73,11 +76,18 @@ public class UMLSService implements ExternalConceptService {
}
}
} catch (Exception e) {
+ log.error(e, e);
}
} catch (IOException e) {
+ log.error(e, e);
}
}
}
+
+ public static boolean configurationFileExists() {
+ URL config = UMLSService.class.getResource(UMLS_PROPERTIES);
+ return (config != null);
+ }
public boolean isConfigured() {
return !(StringUtils.isEmpty(username) && StringUtils.isEmpty(apikey));
diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java
index d1e6ff1c..dd836679 100644
--- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java
+++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/ManagePublicationsForIndividualController.java
@@ -69,7 +69,7 @@ public class ManagePublicationsForIndividualController extends FreemarkerHttpSer
+ "PREFIX core: \n"
+ "PREFIX rdfs: \n"
+ "PREFIX vitro: \n"
- + "SELECT DISTINCT ?subclass ?authorship (str(?label) as ?title) ?pub ?hideThis WHERE { \n"
+ + "SELECT DISTINCT ?subclass ?authorship (?label as ?title) ?pub ?hideThis WHERE { \n"
+ " ?subject core:relatedBy ?authorship . \n"
+ " ?authorship a core:Authorship . \n"
+ " OPTIONAL { \n "
diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java
index fe2f2609..d9146213 100644
--- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java
+++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/ManageLabelsForPersonGenerator.java
@@ -15,6 +15,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import javax.servlet.http.HttpSession;
@@ -41,6 +42,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.FoafNameToRdfsLabelPreprocessor;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.ManageLabelsForPersonPreprocessor;
import edu.cornell.mannlib.vitro.webapp.i18n.selection.SelectedLocale;
+import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringUtils;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.DataPropertyStatementTemplateModel;
/**
@@ -246,12 +248,12 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
private void addFormSpecificData(EditConfigurationVTwo config,
VitroRequest vreq) {
- //Get all language codes/labels in the system, and this list is sorted by language name
- List> locales = this.getLocales(vreq);
+ ArrayList existingLabels = this.getExistingLabels(config.getSubjectUri(), vreq);
+ //Get language codes/labels for existing labels, and this list is sorted by language name
+ List> locales = this.getLocales(vreq, existingLabels);
//Get code to label hashmap - we use this to get the language name for the language code returned in the rdf literal
HashMap localeCodeToNameMap = this.getFullCodeToLanguageNameMap(locales);
//the labels already added by the user
- ArrayList existingLabels = this.getExistingLabels(config.getSubjectUri(), vreq);
int numberExistingLabels = existingLabels.size();
//existing labels keyed by language name and each of the list of labels is sorted by language name
HashMap> existingLabelsByLanguageName = this.getLabelsSortedByLanguageName(existingLabels, localeCodeToNameMap, config, vreq);
@@ -432,28 +434,27 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
+ " ?subject rdfs:label ?label \n"
+ "} ORDER BY ?label";
-
+
private ArrayList getExistingLabels(String subjectUri, VitroRequest vreq) {
String queryStr = QueryUtils.subUriForQueryVar(LABEL_QUERY, "subject", subjectUri);
log.debug("queryStr = " + queryStr);
ArrayList labels = new ArrayList();
try {
- //We want to get the labels for all the languages, not just the display language
- ResultSet results = QueryUtils.getLanguageNeutralQueryResults(queryStr, vreq);
+ // No longer retrieving language-neutral results here, so that
+ // language editing is consistent with other editing forms.
+ // Editable values depend on the interface's locale selector.
+ ResultSet results = QueryUtils.getQueryResults(queryStr, vreq);
while (results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal nodeLiteral = soln.get("label").asLiteral();
labels.add(nodeLiteral);
-
-
}
} catch (Exception e) {
log.error(e, e);
}
return labels;
-}
-
+ }
//Putting this into a method allows overriding it in subclasses
@@ -467,30 +468,32 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
return template;
}
+ //get locales present in list of literals
+ public List> getLocales(VitroRequest vreq,
+ List existingLiterals) {
+ Set locales = new HashSet();
+ for(Literal literal : existingLiterals) {
+ String language = literal.getLanguage();
+ if(!StringUtils.isEmpty(language)) {
+ locales.add(LanguageFilteringUtils.languageToLocale(language));
+ }
+ }
+ if (locales.isEmpty()) {
+ return Collections.emptyList();
+ }
+ List> list = new ArrayList>();
+ Locale currentLocale = SelectedLocale.getCurrentLocale(vreq);
+ for (Locale locale : locales) {
+ try {
+ list.add(buildLocaleMap(locale, currentLocale));
+ } catch (FileNotFoundException e) {
+ log.warn("Can't show locale '" + locale + "': " + e);
+ }
+ }
-
- //get locales
- public List> getLocales(VitroRequest vreq) {
- List selectables = SelectedLocale.getSelectableLocales(vreq);
- if (selectables.isEmpty()) {
- return Collections.emptyList();
- }
- List> list = new ArrayList>();
- Locale currentLocale = SelectedLocale.getCurrentLocale(vreq);
- for (Locale locale : selectables) {
- try {
- list.add(buildLocaleMap(locale, currentLocale));
- } catch (FileNotFoundException e) {
- log.warn("Can't show the Locale selector for '" + locale
- + "': " + e);
- }
- }
-
- return list;
+ return list;
}
-
-
public HashMap getFullCodeToLanguageNameMap(List> localesList) {
HashMap codeToLanguageMap = new HashMap();
for(Map locale: localesList) {
diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java
index 70268cd9..d6b0e733 100644
--- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java
+++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/ConceptSearchService/ConceptSearchServiceUtils.java
@@ -12,6 +12,7 @@ import org.apache.commons.logging.LogFactory;
import edu.cornell.mannlib.semservices.bo.Concept;
import edu.cornell.mannlib.semservices.service.ExternalConceptService;
+import edu.cornell.mannlib.semservices.service.impl.UMLSService;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
/**
* Utilities for search
@@ -38,7 +39,9 @@ public class ConceptSearchServiceUtils {
//URL to label
public static HashMap getVocabSources() {
HashMap map = new HashMap();
- map.put(UMLSVocabSource, new VocabSourceDescription("UMLS", UMLSVocabSource, "http://www.nlm.nih.gov/research/umls/", "Unified Medical Language System"));
+ if(UMLSService.configurationFileExists()) {
+ map.put(UMLSVocabSource, new VocabSourceDescription("UMLS", UMLSVocabSource, "http://www.nlm.nih.gov/research/umls/", "Unified Medical Language System"));
+ }
//Commenting out agrovoc for now until implementation is updated
map.put(AgrovocVocabSource, new VocabSourceDescription("AGROVOC", AgrovocVocabSource, "http://www.fao.org/agrovoc/", "Agricultural Vocabulary"));
map.put(GemetVocabSource, new VocabSourceDescription("GEMET", GemetVocabSource, "http://www.eionet.europa.eu/gemet", "GEneral Multilingual Environmental Thesaurus"));
@@ -53,6 +56,7 @@ public class ConceptSearchServiceUtils {
//Get the hashmap mapping service name to Service class
private static HashMap getMapping() {
HashMap map = new HashMap();
+
map.put(UMLSVocabSource, "edu.cornell.mannlib.semservices.service.impl.UMLSService");
map.put(AgrovocVocabSource, "edu.cornell.mannlib.semservices.service.impl.AgrovocService");
map.put(GemetVocabSource, "edu.cornell.mannlib.semservices.service.impl.GemetService");
diff --git a/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java b/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java
index 51fadef5..23b536d8 100644
--- a/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java
+++ b/api/src/main/java/org/vivoweb/webapp/sitemap/SiteMapServlet.java
@@ -2,29 +2,40 @@
package org.vivoweb.webapp.sitemap;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.jena.query.QuerySolution;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
-import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
-import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
-import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
-import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer;
-import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants;
-import org.apache.commons.io.IOUtils;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jena.query.QuerySolution;
+
+import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
+import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
+import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
+import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
+import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer;
+import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants;
@WebServlet(name = "SiteMapServlet", urlPatterns = {"/robots.txt","/sitemap.xml"})
public class SiteMapServlet extends VitroHttpServlet {
+
+ private static final int MAX_URLS = 50000; // max URLs per sitemap
+ private static final Log log = LogFactory.getLog(SiteMapServlet.class);
+
@Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
String requestURI = request.getRequestURI();
if (requestURI != null) {
@@ -60,7 +71,7 @@ public class SiteMapServlet extends VitroHttpServlet {
"WHERE\n" +
"{\n" +
" ?person a foaf:Person .\n" +
- "}\n";
+ "} LIMIT " + MAX_URLS + "\n";
final VitroRequest vreq = new VitroRequest(request);
final ServletOutputStream out = response.getOutputStream();
@@ -68,28 +79,33 @@ public class SiteMapServlet extends VitroHttpServlet {
out.println("");
out.println("");
+ List personURIs = new ArrayList();
+
try {
vreq.getRDFService().sparqlSelectQuery(query, new ResultSetConsumer() {
@Override
protected void processQuerySolution(QuerySolution qs) {
- String person = qs.getResource("person").getURI();
-
- String profileUrl = UrlBuilder.getIndividualProfileUrl(person, vreq);
-
- if (!StringUtils.isEmpty(profileUrl)) {
- try {
- out.println(" ");
- out.println(" " + schemeAndServer + profileUrl + "");
- out.println(" weekly");
- out.println(" ");
- } catch (Exception e) {
- }
- }
+ personURIs.add(qs.getResource("person").getURI());
}
});
} catch (RDFServiceException rse) {
+ log.error(rse, rse);
}
+ for(String person : personURIs) {
+ String profileUrl = UrlBuilder.getIndividualProfileUrl(person, vreq);
+ if (!StringUtils.isEmpty(profileUrl)) {
+ try {
+ out.println(" ");
+ out.println(" " + schemeAndServer + profileUrl + "");
+ out.println(" weekly");
+ out.println(" ");
+ } catch (Exception e) {
+ log.error(e, e);
+ }
+ }
+ }
+
out.println("");
}
}
@@ -104,7 +120,8 @@ public class SiteMapServlet extends VitroHttpServlet {
if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) {
StringBuilder builder = new StringBuilder();
builder.append(scheme).append("://").append(serverName);
- if (("http".equalsIgnoreCase(scheme) && serverPort != 80) || ("https".equalsIgnoreCase(scheme) && serverPort != 443) ) {
+ if (("http".equalsIgnoreCase(scheme) && serverPort != 80)
+ || ("https".equalsIgnoreCase(scheme) && serverPort != 443) ) {
builder.append(":").append(serverPort);
}
diff --git a/docker-compose.yml b/docker-compose.yml
index e6386a71..d47dcf7d 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -19,7 +19,7 @@ services:
context: ./
dockerfile: Dockerfile
args:
- - VIVO_DIR=/opt/vivo/home
+ - VIVO_DIR=/usr/local/vivo/home
- TDB_FILE_MODE=direct
- SOLR_URL=http://solr:8983/solr/vivocore
environment:
@@ -28,7 +28,7 @@ services:
ports:
- 8080:8080
volumes:
- - ${LOCAL_VIVO_HOME}:/opt/vivo/home
+ - ${LOCAL_VIVO_HOME}:/usr/local/vivo/home
networks:
- vivo
diff --git a/home/pom.xml b/home/pom.xml
index 18357bdf..4d076948 100644
--- a/home/pom.xml
+++ b/home/pom.xml
@@ -7,13 +7,13 @@
org.vivoweb
vivo-home
- 1.11.2-SNAPSHOT
+ 1.12.1-SNAPSHOT
pom
org.vivoweb
vivo-project
- 1.11.2-SNAPSHOT
+ 1.12.1-SNAPSHOT
..
diff --git a/home/src/main/resources/config/default.applicationSetup.n3 b/home/src/main/resources/config/example.applicationSetup.n3
similarity index 100%
rename from home/src/main/resources/config/default.applicationSetup.n3
rename to home/src/main/resources/config/example.applicationSetup.n3
diff --git a/home/src/main/resources/config/default.runtime.properties b/home/src/main/resources/config/example.runtime.properties
similarity index 88%
rename from home/src/main/resources/config/default.runtime.properties
rename to home/src/main/resources/config/example.runtime.properties
index 6b6f8bf8..7dfda99e 100644
--- a/home/src/main/resources/config/default.runtime.properties
+++ b/home/src/main/resources/config/example.runtime.properties
@@ -19,6 +19,26 @@
# BASIC PROPERTIES
# -----------------------------------------------------------------------------
+ #
+ # This namespace will be used when generating URIs for objects created in the
+ # editor. In order to serve linked data, the default namespace must be composed
+ # as follows (optional elements in parentheses):
+ #
+ # scheme + server_name (+ port) (+ servlet_context) + "/individual/"
+ #
+ # For example, Cornell's default namespace is:
+ #
+ # http://vivo.cornell.edu/individual/
+ #
+Vitro.defaultNamespace = http://vivo.mydomain.edu/individual/
+
+ #
+ # The email address of the root user for the VIVO application. The password
+ # for this user is initially set to "rootPassword", but you will be asked to
+ # change the password the first time you log in.
+ #
+rootUser.emailAddress = vivo_root@mydomain.edu
+
#
# Argon2 password hashing parameters for time, memory and parallelism required to
# compute a hash.
@@ -51,8 +71,12 @@ argon2.time = 1000
# Email parameters which VIVO can use to send mail. If these are left empty,
# the "Contact Us" form will be disabled and users will not be notified of
# changes to their accounts.
-# email.smtpHost = smtp.mydomain.edu
-# email.replyTo = vivoAdmin@mydomain.edu
+ # Example:
+ # email.smtpHost = smtp.mydomain.edu
+ # email.replyTo = vivoAdmin@mydomain.edu
+ #
+# email.smtpHost =
+# email.replyTo =
#
# URL of Solr context used in local VIVO search. This will usually consist of:
@@ -90,6 +114,22 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId
#
#externalAuth.netIdHeaderName = remote_userID
+# -----------------------------------------------------------------------------
+# OPTIMIZING LIST VIEW QUERIES
+# -----------------------------------------------------------------------------
+
+ #
+ # Include sections between
+ # tags when executing 'list view' queries that retrieve data
+ # for property lists on profile pages.
+ #
+ # Including these optional sections does not change the query
+ # semantics, but may improve performance.
+ #
+ # Default is true if not set.
+ # (Prior to v1.12, default was true for SDB and false for TDB.)
+ #
+# listview.usePreciseSubquery = true
# -----------------------------------------------------------------------------
# TUNING THE DATABASE CONNECTION POOL
@@ -108,7 +148,6 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId
#
# VitroConnection.DataSource.pool.maxIdle = 10
-
# -----------------------------------------------------------------------------
# USING A DIFFERENT DATABASE
# -----------------------------------------------------------------------------
@@ -387,7 +426,15 @@ Vitro.reconcile.defaultTypeList = http://vivoweb.org/ontology/core#Role, core:Ro
# If you do not wish to use the claiming interface, set this property to nothing (empty)
createAndLink.providers = doi, pmid
- # Triple pattern fragments is a very fast, very simple means for querying a triple store.
- # The triple pattern fragments API in VIVO puts little load on the server, providing a simple means for getting data from the triple store. The API has a web interface for manual use, can be used from the command line via curl, and can be used by programs.
+ # Triple Pattern Fragments is a very fast, very simple means for querying a
+ # triple store. The Triple Pattern Fragments API in VIVO puts little load on
+ # the server, providing a simple means for getting data from the triple store.
+ # The API has a web interface for manual use, can be used from the command
+ # line via curl, and can be used by programs.
+ #
+ # VIVO's Triple Pattern Fragments API does not require authentication and
+ # makes the full RDF graph available regardless of display or publish levels
+ # set on particular properties. Enable Triple Pattern Fragments only if your
+ # VIVO does not contain restricted data that should not be shared with others.
#
# tpf.activeFlag = true
diff --git a/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3 b/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3
index 85abdeae..bdc8a4fa 100644
--- a/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3
+++ b/home/src/main/resources/rdf/display/everytime/searchIndexerConfigurationVivo.n3
@@ -117,6 +117,22 @@
}
""" .
+# URI finder that will find the relevant person to update when the
+# property linking to the email or preferred title resource is removed
+:vivoUriFinder_VCard_2
+ a searchIndex:indexing.IndexingUriFinder ,
+ searchIndex:indexing.SelectQueryUriFinder ;
+ rdfs:label "Preferred title / email person URI finder #2" ;
+ :hasPredicateRestriction "http://www.w3.org/2006/vcard/ns#hasTitle" ;
+ :hasPredicateRestriction "http://www.w3.org/2006/vcard/ns#hasEmail" ;
+ :hasSelectQuery """
+ PREFIX obo:
+ SELECT ?uri
+ WHERE {
+ ?uri obo:ARG_2000028 ?subject .
+ }
+ """ .
+
:vivodocumentModifier_PreferredTitle
a searchIndex:documentBuilding.SelectQueryDocumentModifier ,
searchIndex:documentBuilding.DocumentModifier ;
diff --git a/home/src/main/resources/rdf/tbox/firsttime/README.md b/home/src/main/resources/rdf/tbox/firsttime/README.md
index 2ee229c1..151cc2e7 100644
--- a/home/src/main/resources/rdf/tbox/firsttime/README.md
+++ b/home/src/main/resources/rdf/tbox/firsttime/README.md
@@ -1,6 +1,20 @@
-This directory contains ontology "TBox" files with class and property definitions.
-These are loaded by the VIVO application when it starts for the first time, after
-the initial installation or after an upgrade installation that involves changes
-to these files.
+This directory contains ontology "TBox" files with class and property
+definitions or annotations that are intended to be editable in the VIVO GUI.
+
+These files are loaded by the VIVO application when it starts for the first time
+and during later restarts if the contents have changed. A triple is updated
+if there is no conflicting value for the same subject and predicate that was
+added to the triple store via the GUI or data ingest (e.g. SPARQL UPDATE).
+
+The file vitroAnnotations.n3 contains triples with predicates in the vitro
+namespace and objects that are not literals with language tags.
+
+The VIVO-languages project contains additional language-specific
+vitroAnnotations.n3 files where all of the triples contain language-tagged
+literals.
+
+VIVO-languages also provides additional annotation files
+(e.g. initialTBoxAnnotations_en_US.n3) containing triples with predicates
+in ontologies/voabularies outside the vitro namespace (e.g. rdfs:label).
See ../filegraph/README.md for more information about "TBox" files.
diff --git a/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3 b/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3
new file mode 100644
index 00000000..2fcfd609
--- /dev/null
+++ b/home/src/main/resources/rdf/tbox/firsttime/vitroAnnotations.n3
@@ -0,0 +1,7232 @@
+@prefix bibo: .
+@prefix cito: .
+@prefix c4o: .
+@prefix dcterms: .
+@prefix event: .
+@prefix fabio: .
+@prefix foaf: .
+@prefix geo: .
+@prefix obo: .
+@prefix ocrer: .
+@prefix ocresd: .
+@prefix ocresp: .
+@prefix ocrest: .
+@prefix owl: .
+@prefix rdf: .
+@prefix rdfs: .
+@prefix ro: .
+@prefix scires: .
+@prefix skos: .
+@prefix swo: .
+@prefix vann: .
+@prefix vcard: .
+@prefix vitro: .
+@prefix vitro-public: .
+@prefix vivo: .
+@prefix xsd: .
+
+
+ vitro:ontologyPrefixAnnot "bibo" .
+
+
+ vitro:ontologyPrefixAnnot "skos" .
+
+
+ vitro:ontologyPrefixAnnot "vivo" .
+
+
+ vitro:ontologyPrefixAnnot "ocrer" .
+
+
+ vitro:ontologyPrefixAnnot "ocresd" .
+
+
+ vitro:ontologyPrefixAnnot "ocresp" .
+
+
+ vitro:ontologyPrefixAnnot "ocresst" .
+
+
+ vitro:ontologyPrefixAnnot "geo" .
+
+
+ vitro:ontologyPrefixAnnot "event" .
+
+
+ vitro:ontologyPrefixAnnot "obo" .
+
+
+ vitro:ontologyPrefixAnnot "vcard" .
+
+
+ vitro:ontologyPrefixAnnot "foaf" .
+
+
+ vitro:ontologyPrefixAnnot "scires" .
+
+
+ vitro:ontologyPrefixAnnot "fabio" .
+
+
+ vitro:ontologyPrefixAnnot "c4o" .
+
+
+ vitro:ontologyPrefixAnnot "cito" .
+
+
+ vitro:ontologyPrefixAnnot "dcterms" .
+
+
+ vitro:ontologyPrefixAnnot "vann" .
+
+
+ vitro:ontologyPrefixAnnot "ro" .
+
+
+ vitro:ontologyPrefixAnnot "swo" .
+
+vivo:pmcid
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:ERO_0000071
+ vitro:inClassGroup .
+
+bibo:Note
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:offeredBy
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "4"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+vivo:dateTimeValue
+ vitro:customEntryFormAnnot
+ "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DateTimePropertyGenerator"^^xsd:string ;
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "5"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:selectFromExistingAnnot
+ "false"^^xsd:boolean .
+
+vivo:isCorrespondingAuthor
+ vitro:displayLimitAnnot
+ "1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "60"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:publicDescriptionAnnot
+ "Indicates whether the author handles correspondence about the work and is in effect the guarantor of the published work. The response is either 'true' or 'false' (without the quotes)."@en-US .
+
+vivo:SeminarSeries
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:ARG_0000172
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:supplementalInformation
+ vitro:displayLimitAnnot
+ "3"^^xsd:int ;
+ vitro:displayRankAnnot
+ "40"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+bibo:chapter
+ vitro:displayRankAnnot
+ "53"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:Student
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:non_self_governing
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "4"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:assigneeFor
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "60"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean ;
+ vitro:inPropertyGroupAnnot
+ .
+
+geo:GDPTotalInCurrentPrices
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:Company
+ vitro:displayLimitAnnot
+ "2"^^xsd:int ;
+ vitro:displayRankAnnot
+ "2"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:NonAcademicPosition
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "4"^^xsd:int ;
+ vitro:extendedLinkedData
+ "true"^^xsd:boolean ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:other
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+bibo:sici
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:placeOfPublication
+ vitro:displayLimitAnnot
+ "1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "55"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:hasCollaborator
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:GovernmentAgency
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+skos:narrower
+ vitro:customEntryFormAnnot
+ "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.AddConceptThroughObjectPropertyGenerator"^^xsd:string ;
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "52"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean ;
+ vitro:inPropertyGroupAnnot
+ .
+
+vivo:affiliatedOrganization
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "40"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+
+vivo:License
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "5"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+foaf:Person
+ vitro:customDisplayViewAnnot
+ "individual--foaf-person.ftl"^^xsd:string ;
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:OBI_0000272
+ vitro:inClassGroup .
+
+bibo:pageStart
+ vitro:displayLimitAnnot
+ "1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "12"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:countryAreaYear
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:reportId
+ vitro:displayLimitAnnot
+ "1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "20"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:hasMinLongitude
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+bibo:Manuscript
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+owl:sameAs
+ a owl:ObjectProperty ;
+ rdfs:domain owl:Thing ;
+ rdfs:range owl:Thing ;
+ rdfs:subPropertyOf owl:topObjectProperty ;
+ vitro:displayLimitAnnot
+ "5" ;
+ vitro:displayRankAnnot
+ "1"^^xsd:int ;
+ vitro:forceStubDeletionAnnot
+ "false"^^xsd:boolean ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean ;
+ vitro:stubObjectPropertyAnnot
+ "false"^^xsd:boolean .
+
+vivo:Presentation
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:ERO_0000007
+ vitro:inClassGroup .
+
+vivo:SubnationalRegion
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "10"^^xsd:int ;
+ vitro:inClassGroup ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:territory
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:researchAreaOf
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "10"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+vivo:subjectAreaOf
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "10"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+geo:populationTotal
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:nationalityFR
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:ERO_0000006
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:conceptAssociatedWith
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "20"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+geo:nameOfficialIT
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:reproduces
+ vitro:displayLimitAnnot
+ "5"^^xsd:int ;
+ vitro:displayRankAnnot
+ "60"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inPropertyGroupAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:offerCreateNewOptionAnnot
+ "true"^^xsd:boolean ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+vivo:EmeritusFaculty
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:Video
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:IAO_0000142
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+bibo:Issue
+ vitro:displayLimitAnnot
+ "1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "21"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:inClassGroup ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vitro-public:File
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+vivo:AcademicYear
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:nameShortRU
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+
+
+geo:codeISO3
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+obo:ERO_0000005
+ vitro:inClassGroup .
+
+vitro:moniker
+ vitro:displayLimitAnnot
+ "3"^^xsd:int ;
+ vitro:displayRankAnnot
+ "100"^^xsd:int ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+geo:codeFAOSTAT
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ .
+
+
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+ ;
+ vitro:hiddenFromPublishBelowRoleLevelAnnot
+ ;
+ vitro:prohibitedFromUpdateBelowRoleLevelAnnot
+ ;
+ vitro:selectFromExistingAnnot
+ "true"^^xsd:boolean .
+
+vivo:AttendeeRole
+ vitro:displayLimitAnnot
+ "-1"^^xsd:int ;
+ vitro:displayRankAnnot
+ "-1"^^xsd:int ;
+ vitro:extendedLinkedData
+ "true"^^xsd:boolean ;
+ vitro:hiddenFromDisplayBelowRoleLevelAnnot
+