Compare commits

..

40 commits

Author SHA1 Message Date
Brian Lowe
09e4ea732a
Add self-activating profiles for building Vitro-languages and VIVO-l… (#245)
* Add self-activating profiles for compiling Vitro-languages and VIVO-languages in place of i18n profile

* Remove trailing whitespace
2021-06-22 13:48:05 -05:00
Brian Lowe
109b5a4fe1
Update version numbers in pom.xmls (#244)
* Update version numbers in pom.xmls

* Restore -SNAPSHOT
2021-06-21 04:11:24 -05:00
e1dc5c9775
Merge pull request #240 from brianjlowe/issue/VIVO-1983
[VIVO-1983] Limit label management values to current locale
2021-06-17 23:33:40 +02:00
Brian Lowe
3de9a03ab5 Update comment 2021-06-16 21:54:48 +03:00
Brian Lowe
f4f6dddb11 Retrieve locales used in label statements instead of only selectable locales 2021-06-16 21:43:30 +03:00
a9a095397e
Merge pull request #243 from brianjlowe/issue/VIVO-1996
[VIVO-1996] Retain language tags in manage publications query results to allow for language filtering
2021-06-16 17:07:55 +02:00
Brian Lowe
603e7f6bc8
Do not offer UMLS vocabulary in interface if umls.properties is absent. (#241)
* Replace hardcoded en locale with current locale in lang attributes

* Do not offer UMLS vocabulary service in interface if umls.properties is absent
2021-06-09 08:02:46 -06:00
Michel Héon
e3027841aa
integrate in a single Maven call the compilation and installation of (#242)
Integrate in a single Maven call the compilation and installation of VIVO-Languages and Vitro-Languages in VIVO.
2021-06-04 17:17:17 +03:00
Brian Lowe
dc56107d4d Pass languageCount value to label macro 2021-06-04 17:00:26 +03:00
Brian Lowe
49eedfe0a0 Retain language tags in manage publication query results to allow for language filtering 2021-06-03 19:40:07 +03:00
Brian Lowe
43289ba71e Get language-aware results for existing labels in ManageLabelsForPersonGenerator 2021-05-28 15:52:16 +03:00
Brian Lowe
9652127081 Merge branch 'rel-1.12.0-RC' of https://github.com/vivo-project/VIVO into rel-1.12.0-alpha 2021-05-27 16:20:08 +03:00
Brian Lowe
631986a2d5
Issue/vivo 1981 (#239)
* Replace hardcoded en locale with current locale in lang attributes

* Update README with current wiki link; add details to Docker Compose installation instructino.
2021-05-11 10:07:53 -05:00
Ben
5d257cae6b
[VIVO-1982] - Set default email params to blank (#238)
* Set default email params to blank

* Comment out email settings
2021-05-07 11:46:57 +03:00
Brian Lowe
8b161f948e
Add usePreciseSubqueries property to example.runtime.properties (#233) 2021-05-05 10:36:46 -06:00
Brian Lowe
fe764ded51 Merge branch 'rel-1.12.0-alpha' of https://github.com/vivo-project/VIVO into rel-1.12.0-alpha 2021-05-03 19:35:17 +03:00
Brian Lowe
fe1498319a
Add note to runtime.properties that TPF should not be used if VIVO contains restricted data. (#236) 2021-04-27 10:43:59 -06:00
Brian Lowe
f4d187a601
Allow 'create new' for vivo:governingAuthorityFor. Resolve https://jira.lyrasis.org/browse/VIVO-1820 (#234) 2021-04-21 12:38:32 -05:00
Brian Lowe
29728b3b40
Add additional URI finder that will reindex a person if its associate… (#227)
* Add additional URI finder that will reindex a person if its associated title or email resource is deleted altogether.

* Remove redundant identical query; eliminate unused prefix.
2021-04-21 11:54:23 -05:00
Brian Lowe
250566446f
Replace hardcoded en locale with current locale in lang attributes (#237) 2021-04-21 11:53:35 -05:00
Brian Lowe
2be59bbe02
Fix issues preventing rendering and functioning of temporal graph. Resolve https://jira.lyrasis.org/browse/VIVO-1978 (#235) 2021-04-21 10:14:16 -05:00
Brian Lowe
d72472824a Replace hardcoded en locale with current locale in lang attributes 2021-04-21 17:19:44 +03:00
Brian Lowe
2fa7cce5c7
Move non-language-specific Vitro annotations to VIVO tbox firsttime d… (#225)
* Move non-language-specific Vitro annotations to VIVO tbox firsttime directory.

* Update tbox/firsttime readme to document difference between vitroAnnotations.n3 and initialTBoxAnnotations.n3
2021-03-30 15:05:11 -05:00
Brian Lowe
fe09808b1b
Retrieve sitemap profile URLs only after consuming result set in order to avoid transaction errors with TDB. Resolve https://jira.lyrasis.org/browse/VIVO-1910 (#231) 2021-03-30 09:41:24 -06:00
Ralph O'Flinn
d00d7de585
Revert deployment strategy (#230)
* revert deployment changes

* update docker and compose for previous deployment

* minor readme update

* use package instead of install

this avoids exploding war file in tomcat but seems to be missing overlays for VIVO theme

* test docker workflow

* test deploy workflow

* add package profile for home

* skip deploy for installer

* skip installer by profile

* update workflows

* minor readme update

* use app-name for vivo log file name

* Update log4j.properties

Co-authored-by: William Welling <wwelling@library.tamu.edu>
2021-03-24 01:46:24 -05:00
hauschke
47fb4fdc05
Update LICENSE (#226)
Update license year to 2021.
2021-03-12 16:31:39 +02:00
dependabot[bot]
fdda5f0774
Bump junit from 4.11 to 4.13.1 in /api (#195)
Bumps [junit](https://github.com/junit-team/junit4) from 4.11 to 4.13.1.
- [Release notes](https://github.com/junit-team/junit4/releases)
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.11.md)
- [Commits](https://github.com/junit-team/junit4/compare/r4.11...r4.13.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-02-18 10:11:44 -06:00
dependabot[bot]
0d5049f3b6
Bump junit from 4.12 to 4.13.1 in /selenium (#196)
Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1.
- [Release notes](https://github.com/junit-team/junit4/releases)
- [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md)
- [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-02-18 10:11:14 -06:00
William Welling
880ac5b797
VIVO-1963: Initial docker compose (#223)
* initial docker compose

* for docker volume use direct tdb filemode

* runtime properties with solr url configured

* move gitattributes to root to ensure scripts stay valid

* fix VIVO dockerfile command permissions

* use public vivoweb/vivo-solr image

* start script improvements

* pass docker compose env to containers

* generate digest.md5 of existing VIVO home

* add initial readme

* reset docker compose env defaults

* minor readme updates
2021-02-18 10:07:19 -06:00
Andrew Woods
5f6cabc42a
Update example.runtime.properties (#222)
* Update example.runtime.properties

Resolves: https://jira.lyrasis.org/browse/VIVO-1930

Co-authored-by: gneissone <mbgross@wustl.edu>
Co-authored-by: Andrew Woods <awoods@duraspace.org>
2021-02-12 16:42:58 +02:00
gneissone
f15eec19e0 Bugfix for type restriction in search index config 2021-02-11 09:00:22 -05:00
gneissone
2122254cdb Update to google chart library loads 2021-02-10 15:12:37 -05:00
William Welling
a9ce8c7de8
VIVO-1961: GitHub Action to Publish Docker Image (#220)
* simple dockerfile and image publish workflow
* upgrade to v2 of build push action
* provide context and explicit docker file

Resolves: https://jira.lyrasis.org/browse/VIVO-1961
2021-02-10 15:03:29 -05:00
Andrew Woods
268ffa1cd7
Sprint i18n with main (#215)
* Layer uqam updates onto master (minus trailing whitespace)

* Update AddOrganizerRoleToPersonGenerator.java

Removed extraneous whitespace

* My whitespace (#153)

* Update AddPublicationToPersonGenerator.java

* Removed extraneous whitespace AND move RootUserPolicy.java from VIVO to Vitro

* Fixed whitespace in: AddAttendeeRoleToPersonGenerator.java

* Fixed indentations for AddOutreachProviderRoleToPersonGenerator.java

* Fixed indentations

* Removed extraneous whitespace (#158)

* Removed extraneous whitespace

* Fix bug introduced in cleaning up whitespace

* Tagging UQAM comments with the following tags

-Add-Feature
-Optimization
-Linguistic-Management
-Bug-Correction

* Update AddReviewerRoleToPersonGenerator.java

* Added an internationalization correction to be considered in the vivo-i18n-core that was forgotten when sprint-i18n was created.

* Fix typo in AddReviewerRoleToPersonGenerator

Resolves: https://jira.lyrasis.org/browse/VIVO-1774

* Fix typo in AddOutreachProviderRoleToPersonGenerator

Resolves: https://jira.lyrasis.org/browse/VIVO-1775

* Include language dependencies in build all of the time (#168)

Move "LocaleSelectionSetup" higher in the startup list so that the Vitro:RDFFilesLoader has the locale info available on its startup

Part of resolution to: https://jira.lyrasis.org/browse/VIVO-1836

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Made modifications to publicationToPersonUtils.js so that multilangua… (#170)

* Made modifications to publicationToPersonUtils.js so that multilanguage support will not break the javascript functionalty.

Co-authored-by: root <root@vivo-development.hs-mittweida.de>

Resolves: https://jira.lyrasis.org/browse/VIVO-1739

* Feature language en_CA (#169)

* Changing ontology extensions for n3 & assigning a base IRI to each
ontology

Co-authored-by: michelheonuqam <heon.michel@uqam.ca>
Co-authored-by: michelheon <heon@videotorn.ca>

Partial resolution of: https://jira.lyrasis.org/browse/VIVO-1862

* i18n: title tag and headings in capability map are in english in french version (#173)

* added multi-language support for ticket VIVO-1846

* fixed swapped properties, added Capability map title to i18n

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1847

* Added i18n support for Capability Map control buttons, JIRA ticket VIVO-1846

* removed redundat files which are now available via Vitro- and VIVO-languages

* added i18n support for the capability map, ticket vivo-1892

* Revert non-function RDF changes (#180)

Related to: https://jira.lyrasis.org/browse/VIVO-1905

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Ensure 'other' in Individual->Teaching->advisees->type is translated

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1881

* [VIVO-1842] i18n: Added function js_string at i18n variables to handle quotes properly (#181)

* added js_string at i18n strings to handle quotes properly, ticket vivo-1842

Partial resolution for: https://jira.lyrasis.org/browse/VIVO-1842

* replace static headings with i18n values (#183)

Partial resolution of: https://jira.lyrasis.org/browse/VIVO-1844

* added empty check for getCountry, fixing bug with spanish label (es), ticket vivo-1900 (#182)

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1900

* Issue/vivo 1908 (#185)

* Provide fallback language in language-filtered webpage SPARQL query and use existing RDFService-based filtering for ConstantFieldOptions

Resolves: https://jira.lyrasis.org/browse/VIVO-1906

* Fix bug of missing toString() (#187)

Related to: https://jira.lyrasis.org/browse/VIVO-1906

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* Remove files replicated in i18n (#186)

Related to: https://jira.lyrasis.org/browse/VIVO-1917

* removed redundant vitroAnnotations, now in VIVO-languages, ticket vivo-1821

* Removed key.png from the template and replaced it with css sprite and… (#184)

* Removed key.png from the template and replaced it with css sprite and descriptions in plain text.
* * adding height to background images, hopefully fixing issues

Partial resolution for: https://jira.lyrasis.org/browse/VIVO-1902

* [VIVO-1915] i18n - removing language select for label management for individuals (#190)

* removed the language select for managing multi language labels fpr individuals, ticket vivo-1915

* modified ManageLabelsForPersonGenerator so that you can only add an langauge label if it is not already set, ticket vivo-1915

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1915

* - added i18n() to hardcoded values

* added i18n support to person's domain in capability map, ticket 1867

* [VIVO-1946] - Update ResearcherID description in vivo.owl (#188)

* Update ResearcherID description in vivo.owl

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1946

* [VIVO-1936] i18n: updated the language comment in runtime.properties (#203)

Partial resolution of: https://jira.lyrasis.org/browse/VIVO-1936

Co-authored-by: Kampe <Benjamin.Kampe@tib.eu>

* [VIVO-1924] i18n: @en i18n properties are not loaded during first site startup. (#204)

* rearranged startup-listeners fixing bug with language files, ticket VIVO-1924

* Added a comment to prevent future bugs like this, ticket VIVO-1924

* fixed previous comment, ticket VIVO-1924

* Remove duplicate text from dropdown menus

* Minor checkstyle correction following: VIVO-1936 (#206)

Follow-on to: https://jira.lyrasis.org/browse/VIVO-1936

Co-authored-by: Andrew Woods <awoods@duraspace.org>

* follow-up on vivo-1936 - restore default values in example-settings.xml (#210)

Co-authored-by: gneissone <mbgross@wustl.edu>

* [VIVO-1798] - Internationalize first and last name validation (#207)

* Internationalize first and last name validation

Partial resolution to: https://jira.lyrasis.org/browse/VIVO-1798

* adding collections process terms (#165)

* adding collections process terms

No JIRA :(

* Non-functional change to comment in example.applicationSetup.n3

Related to: https://jira.lyrasis.org/browse/VIVO-1741

* Update orcidConfirm.ftl (#199)

Fix i18n property used on ORCID confirmation step 2 button.
Related to https://jira.lyrasis.org/browse/VIVO-1945

* Fix external AGROVOC service URL

* URL fix for LCSH service

* Remove unnecessary pom.xml 'profile'

- Also, uncomment language overlays
   - Noting that this is not actually necessary, as any 'war' Maven dependencies are automatically overlayed:
   - https://maven.apache.org/plugins/maven-war-plugin/overlays.html

Co-authored-by: Andrew Woods <awoods@duraspace.org>
Co-authored-by: Nicolas D <46490666+nicalico@users.noreply.github.com>
Co-authored-by: UQAM-VIVO <heon.michel@uqam.ca>
Co-authored-by: matthiasluehr <60263380+matthiasluehr@users.noreply.github.com>
Co-authored-by: Michel Heon <heon@videotron.ca>
Co-authored-by: dofeldsc <dofeldsc@uos.de>
Co-authored-by: William Welling <wwelling@library.tamu.edu>
Co-authored-by: Brian Lowe <brianjlowe@gmail.com>
Co-authored-by: Matthias Lühr <luehr@hs-mittweida.de>
Co-authored-by: Ben <mbgross@wustl.edu>
Co-authored-by: Benjamin Kampe <benjamin@fehrmanns.net>
Co-authored-by: Kampe <Benjamin.Kampe@tib.eu>
Co-authored-by: Gross, Benjamin <benjamin.gross@clarivate.com>
Co-authored-by: diatomsRcool <annethessen@gmail.com>
Co-authored-by: L.O <53535673+lb-ov@users.noreply.github.com>
2021-02-10 11:02:20 -06:00
William Welling
f97972e5aa
VIVO-1960: GitHub Actions Continued (#218)
* add build workflow
* remove travis
* remove unnecessary vitro cache
* update readme badge
* run tests during CI build
* build CI use java 11
* add repositories to distribution management
* deploy from main branch and update readme

Follow-on to: https://jira.lyrasis.org/browse/VIVO-1960
2021-02-09 17:46:21 -05:00
William Welling
6dbc31cc9d
VIVO-1960: GitHub Build Action (#217)
* add build workflow
* remove travis
* update readme badge

Partially resolves: https://jira.lyrasis.org/browse/VIVO-1960
2021-02-09 15:01:29 -05:00
Andrew Woods
01776ee692
Enable war deployment model (#197)
* Add 'home' files into build war artifact

Related to: https://jira.lyrasis.org/browse/VIVO-1443

* Disable copying exploded war to Tomcat dir

- hardcode vivo.all.log file name
- must now set system property: -Dvivo-dir=/opt/vivo/home/

Related to: https://jira.lyrasis.org/browse/VIVO-1443

* Ensure build does not remove and re-add VIVO_HOME/rdf

Related to: https://jira.lyrasis.org/browse/VIVO-1443

* Remove unnecessary profile from installer/pom.xml

Related to: https://jira.lyrasis.org/browse/VIVO-1443

* Rename example config files to have 'default' prefix

Related to: https://jira.lyrasis.org/browse/VIVO-1443

* Require common properties to be in JNDI

Properties include:
- vitro/home
- vitro/appName
- vitro/rootUserAddress
- vitro/defaultNamespace

Related to: https://jira.lyrasis.org/browse/VIVO-1443

* VIVO-1443: app name (#2)

* Non-functional change to comment in example.applicationSetup.n3

Related to: https://jira.lyrasis.org/browse/VIVO-1741

* Update orcidConfirm.ftl (#199)

* remove example-settings.xml
* simplify war name and afford override during build
* default app name to vivo and pass into context.xml

Co-authored-by: Andrew Woods <awoods@duraspace.org>
Co-authored-by: L.O <53535673+lb-ov@users.noreply.github.com>

Co-authored-by: Andrew Woods <awoods@duraspace.org>
Co-authored-by: William Welling <wwelling@library.tamu.edu>
Co-authored-by: L.O <53535673+lb-ov@users.noreply.github.com>
2021-02-05 10:56:50 -06:00
L.O
c54f8a105b
Update orcidConfirm.ftl (#199)
Fix i18n property used on ORCID confirmation step 2 button.
Related to https://jira.lyrasis.org/browse/VIVO-1945
2021-01-06 22:31:09 +02:00
Andrew Woods
17dd020835 Non-functional change to comment in example.applicationSetup.n3
Related to: https://jira.lyrasis.org/browse/VIVO-1741
2020-09-30 17:56:58 -04:00
diatomsRcool
f585d90c0e
adding collections process terms (#165)
* adding collections process terms

No JIRA :(
2020-09-23 11:03:25 -04:00
321 changed files with 2041 additions and 20649 deletions

4
.env Normal file
View file

@ -0,0 +1,4 @@
LOCAL_VIVO_HOME=./vivo-home
RESET_HOME=false
RESET_CORE=false
VERBOSE=no

2
.gitattributes vendored Normal file
View file

@ -0,0 +1,2 @@
# Convert to LF line endings on checkout.
*.sh text eol=lf

31
.github/workflows/build.yml vendored Normal file
View file

@ -0,0 +1,31 @@
name: Build
on: [ push, pull_request, workflow_dispatch ]
jobs:
build:
runs-on: ubuntu-latest
env:
MAVEN_OPTS: -Xmx1024M
steps:
- uses: actions/checkout@v2
- name: Clone Vitro
run: git clone https://github.com/vivo-project/Vitro.git ../Vitro
- name: Maven Cache
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-cache-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-cache-m2-
- name: Setup Java
uses: actions/setup-java@v1
with:
java-version: 11
- name: Maven Build
run: mvn clean package -s installer/example-settings.xml

41
.github/workflows/deploy.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: Deploy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
env:
MAVEN_OPTS: -Xmx1024M
steps:
- uses: actions/checkout@v2
- name: Clone Vitro
run: git clone https://github.com/vivo-project/Vitro.git ../Vitro
- name: Maven Cache
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-cache-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-cache-m2-
- name: Setup Java
uses: actions/setup-java@v1
with:
java-version: 11
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Maven Deploy
run: mvn --batch-mode deploy -Pskip
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

59
.github/workflows/docker.yml vendored Normal file
View file

@ -0,0 +1,59 @@
name: Docker
on:
push:
branches:
- main
workflow_dispatch:
jobs:
docker:
runs-on: ubuntu-latest
env:
MAVEN_OPTS: -Xmx1024M
steps:
- uses: actions/checkout@v2
- name: Clone Vitro
run: git clone https://github.com/vivo-project/Vitro.git ../Vitro
- name: Maven Cache
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-cache-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-cache-m2-
- name: Setup Java
uses: actions/setup-java@v1
with:
java-version: 11
- name: Maven Build
run: mvn clean package -s installer/example-settings.xml
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
push: true
tags: vivoweb/vivo:latest
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

2
.gitignore vendored
View file

@ -20,3 +20,5 @@ utilities/rdbmigration/.work
**/.classpath **/.classpath
**/.project **/.project
**/bin/ **/bin/
vivo-home/

View file

@ -1,22 +0,0 @@
language: java
dist: trusty
sudo: false
jdk:
- openjdk8
- oraclejdk8
env:
# Give Maven 1GB of memory to work with
- MAVEN_OPTS=-Xmx1024M
cache:
directories:
- .autoconf
- $HOME/.m2
install:
- git clone https://github.com/vivo-project/Vitro.git ../Vitro
script:
- "mvn clean package -Dmaven.test.skip=false"

20
Dockerfile Normal file
View file

@ -0,0 +1,20 @@
FROM tomcat:9-jdk11-openjdk
ARG SOLR_URL=http://localhost:8983/solr/vivocore
ARG VIVO_DIR=/usr/local/vivo/home
ARG TDB_FILE_MODE=direct
ENV SOLR_URL=${SOLR_URL}
ENV JAVA_OPTS="${JAVA_OPTS} -Dtdb:fileMode=$TDB_FILE_MODE"
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 start.sh /start.sh
EXPOSE 8080
CMD ["/bin/bash", "/start.sh"]

View file

@ -1,4 +1,4 @@
Copyright (c) 2018, Cornell University Copyright (c) 2021, Cornell University
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without

View file

@ -1,6 +1,6 @@
# VIVO: Connect, Share, Discover # VIVO: Connect, Share, Discover
[![Build Status](https://travis-ci.org/vivo-project/VIVO.png?branch=develop)](https://travis-ci.org/vivo-project/VIVO) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2639714.svg)](https://doi.org/10.5281/zenodo.2639713) [![Build](https://github.com/vivo-project/VIVO/workflows/Build/badge.svg)](https://github.com/vivo-project/VIVO/actions?query=workflow%3ABuild) [![Deploy](https://github.com/vivo-project/VIVO/workflows/Deploy/badge.svg)](https://github.com/vivo-project/VIVO/actions?query=workflow%3ADeploy) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2639714.svg)](https://doi.org/10.5281/zenodo.2639713)
VIVO is an open source semantic web tool for research discovery -- finding people and the research they do. VIVO is an open source semantic web tool for research discovery -- finding people and the research they do.
@ -19,7 +19,55 @@ https://wiki.duraspace.org/display/VIVO/
### Installation Instructions ### Installation Instructions
Installation instructions for the latest release can be found at this location on the wiki: 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
VIVO docker container is available at [vivoweb/vivo](https://hub.docker.com/repository/docker/vivoweb/vivo) with accompanying [vivoweb/vivo-solr](https://hub.docker.com/repository/docker/vivoweb/vivo-solr). These can be used independently or with docker-compose.
### Docker Compose
Docker Compose environment variables:
.env defaults
```
LOCAL_VIVO_HOME=./vivo-home
RESET_HOME=false
RESET_CORE=false
```
- `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 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
```
### Docker Image
To build and run local Docker image.
```
docker build -t vivoweb/vivo:development .
docker run -p 8080:8080 vivoweb/vivo:development
```
## Contact us ## Contact us
There are several ways to contact the VIVO community. There are several ways to contact the VIVO community.

View file

@ -7,13 +7,13 @@
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-api</artifactId> <artifactId>vivo-api</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<parent> <parent>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-project</artifactId> <artifactId>vivo-project</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<relativePath>..</relativePath> <relativePath>..</relativePath>
</parent> </parent>
@ -83,7 +83,7 @@
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<version>4.11</version> <version>4.13.1</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>

View file

@ -58,7 +58,7 @@ public class AgrovocService implements ExternalConceptService {
protected final String dbpedia_endpoint = " http://dbpedia.org/sparql"; protected final String dbpedia_endpoint = " http://dbpedia.org/sparql";
// URL to get all the information for a concept // URL to get all the information for a concept
protected final String conceptSkosMosBase = "http://agrovoc.uniroma2.it/agrovoc/rest/v1/"; protected final String conceptSkosMosBase = "https://agrovoc.uniroma2.it/agrovoc/rest/v1/";
protected final String conceptsSkosMosSearch = conceptSkosMosBase + "search?"; protected final String conceptsSkosMosSearch = conceptSkosMosBase + "search?";
protected final String conceptSkosMosURL = conceptSkosMosBase + "data?"; protected final String conceptSkosMosURL = conceptSkosMosBase + "data?";
@Override @Override

View file

@ -35,7 +35,7 @@ public class LCSHService implements ExternalConceptService {
protected final Log log = LogFactory.getLog(getClass()); protected final Log log = LogFactory.getLog(getClass());
private final String skosSuffix = ".skos.rdf"; private final String skosSuffix = ".skos.rdf";
private final String hostUri = "http://id.loc.gov"; private final String hostUri = "https://id.loc.gov";
private final String schemeUri = hostUri + "/authorities/subjects"; private final String schemeUri = hostUri + "/authorities/subjects";
private final String baseUri = hostUri + "/search/"; private final String baseUri = hostUri + "/search/";
@ -94,7 +94,7 @@ public class LCSHService implements ExternalConceptService {
bestMatch = "false"; bestMatch = "false";
} }
log.debug("-" + uri + "-"); log.debug("-" + uri + "-");
//This is the URL for retrieving the concept - the pattern is http://id.loc.gov/authorities/subjects/sh85014203.skos.rdf //This is the URL for retrieving the concept - the pattern is https://id.loc.gov/authorities/subjects/sh85014203.skos.rdf
//This is not the URI itself which would be http://id.loc.gov/authorities/subjects/sh85014203 //This is not the URI itself which would be http://id.loc.gov/authorities/subjects/sh85014203
String conceptURLString = getSKOSURL(uri); String conceptURLString = getSKOSURL(uri);
String baseConceptURI = uri; String baseConceptURI = uri;
@ -152,7 +152,7 @@ public class LCSHService implements ExternalConceptService {
private String getSKOSURL(String uri) { private String getSKOSURL(String uri) {
String skosURI = uri + skosSuffix; String skosURI = uri.replaceFirst("http://", "https://") + skosSuffix;
return skosURI; return skosURI;
} }

View file

@ -4,12 +4,18 @@ package edu.cornell.mannlib.semservices.service.impl;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 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.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode; 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.exceptions.ConceptsNotFoundException;
import edu.cornell.mannlib.semservices.service.ExternalConceptService; import edu.cornell.mannlib.semservices.service.ExternalConceptService;
import edu.cornell.mannlib.vitro.webapp.utils.json.JacksonUtils; 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 * @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_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 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 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) { if (username == null || apikey == null) {
final Properties properties = new Properties(); final Properties properties = new Properties();
try (InputStream stream = getClass().getResourceAsStream("/umls.properties")) { try (InputStream stream = getClass().getResourceAsStream(UMLS_PROPERTIES)) {
properties.load(stream); properties.load(stream);
username = properties.getProperty("username"); username = properties.getProperty("username");
password = properties.getProperty("password"); password = properties.getProperty("password");
@ -73,12 +76,19 @@ public class UMLSService implements ExternalConceptService {
} }
} }
} catch (Exception e) { } catch (Exception e) {
log.error(e, e);
} }
} catch (IOException 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() { public boolean isConfigured() {
return !(StringUtils.isEmpty(username) && StringUtils.isEmpty(apikey)); return !(StringUtils.isEmpty(username) && StringUtils.isEmpty(apikey));
} }

View file

@ -69,7 +69,7 @@ public class ManagePublicationsForIndividualController extends FreemarkerHttpSer
+ "PREFIX core: <http://vivoweb.org/ontology/core#> \n" + "PREFIX core: <http://vivoweb.org/ontology/core#> \n"
+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n" + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+ "PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> \n" + "PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> \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" + " ?subject core:relatedBy ?authorship . \n"
+ " ?authorship a core:Authorship . \n" + " ?authorship a core:Authorship . \n"
+ " OPTIONAL { \n " + " OPTIONAL { \n "

View file

@ -11,15 +11,18 @@ import org.apache.jena.rdf.model.Literal;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.N3ValidatorVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.N3ValidatorVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission;
import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle;
public class FirstAndLastNameValidator implements N3ValidatorVTwo { public class FirstAndLastNameValidator implements N3ValidatorVTwo {
private static String MISSING_FIRST_NAME_ERROR = "You must enter a value in the First Name field."; private static String MISSING_FIRST_NAME_ERROR = "first_name_empty_msg";
private static String MISSING_LAST_NAME_ERROR = "You must enter a value in the Last Name field."; private static String MISSING_LAST_NAME_ERROR = "last_name_empty_msg";
private static String MALFORMED_LAST_NAME_ERROR = "The last name field may not contain a comma. Please enter first name in First Name field."; private static String MALFORMED_LAST_NAME_ERROR = "malformed_last_name_msg";
private I18nBundle i18n;
private String uriReceiver; private String uriReceiver;
public FirstAndLastNameValidator(String uriReceiver) { public FirstAndLastNameValidator(String uriReceiver, I18nBundle i18n) {
this.i18n = i18n;
this.uriReceiver = uriReceiver; this.uriReceiver = uriReceiver;
} }
@ -68,14 +71,14 @@ public class FirstAndLastNameValidator implements N3ValidatorVTwo {
} }
if (lastName == null) { if (lastName == null) {
errors.put("lastName", MISSING_LAST_NAME_ERROR); errors.put("lastName", i18n.text(MISSING_LAST_NAME_ERROR));
// Don't reject space in the last name: de Vries, etc. // Don't reject space in the last name: de Vries, etc.
} else if (lastNameValue.contains(",")) { } else if (lastNameValue.contains(",")) {
errors.put("lastName", MALFORMED_LAST_NAME_ERROR); errors.put("lastName", i18n.text(MALFORMED_LAST_NAME_ERROR));
} }
if (firstName == null) { if (firstName == null) {
errors.put("firstName", MISSING_FIRST_NAME_ERROR); errors.put("firstName", i18n.text(MISSING_FIRST_NAME_ERROR));
} }
return errors.size() != 0 ? errors : null; return errors.size() != 0 ? errors : null;

View file

@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -21,28 +22,28 @@ public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGen
/** Editor role involves hard-coded options for the "right side" of the role or activity. */ /** Editor role involves hard-coded options for the "right side" of the role or activity. */
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
"", "Select type", vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
"http://purl.org/NET/c4dm/event.owl#Event", "Event", I18n.bundle(vreq).text("select_type"),
"http://vivoweb.org/ontology/core#Competition", "Competition", "http://purl.org/NET/c4dm/event.owl#Event",
"http://purl.org/ontology/bibo/Conference", "Conference", "http://vivoweb.org/ontology/core#Competition",
"http://vivoweb.org/ontology/core#Course", "Course", "http://purl.org/ontology/bibo/Conference",
"http://vivoweb.org/ontology/core#Exhibit", "Exhibit", "http://vivoweb.org/ontology/core#Course",
"http://purl.org/ontology/bibo/Hearing", "Hearing", "http://vivoweb.org/ontology/core#Exhibit",
"http://purl.org/ontology/bibo/Interview", "Interview", "http://purl.org/ontology/bibo/Hearing",
"http://vivoweb.org/ontology/core#Meeting", "Meeting", "http://purl.org/ontology/bibo/Interview",
"http://purl.org/ontology/bibo/Performance", "Performance", "http://vivoweb.org/ontology/core#Meeting",
"http://vivoweb.org/ontology/core#Presentation", "Presentation", "http://purl.org/ontology/bibo/Performance",
"http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", "http://vivoweb.org/ontology/core#Presentation",
"http://purl.org/ontology/bibo/Workshop", "Workshop", "http://vivoweb.org/ontology/core#InvitedTalk",
"http://vivoweb.org/ontology/core#EventSeries", "Event Series", "http://purl.org/ontology/bibo/Workshop",
"http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", "http://vivoweb.org/ontology/core#EventSeries",
"http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", "http://vivoweb.org/ontology/core#ConferenceSeries",
"http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series" "http://vivoweb.org/ontology/core#SeminarSeries",
"http://vivoweb.org/ontology/core#WorkshopSeries"
); );
} }
@Override
boolean isShowRoleLabelField() { boolean isShowRoleLabelField() {
return false; return false;
} }
@ -65,3 +66,4 @@ public class AddAttendeeRoleToPersonGenerator extends AddRoleToPersonTwoStageGen
} }
*/ */
} }

View file

@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddClinicalRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddClinicalRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -24,20 +25,19 @@ public class AddClinicalRoleToPersonGenerator extends AddRoleToPersonTwoStageGen
/** Clinical role involves hard-coded options for the "right side" of the role or activity. */ /** Clinical role involves hard-coded options for the "right side" of the role or activity. */
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
"", "Select one", vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
"http://vivoweb.org/ontology/core#Project", "Project", I18n.bundle(vreq).text("select_type"),
"http://purl.obolibrary.org/obo/ERO_0000005", "Service" "http://vivoweb.org/ontology/core#Project",
"http://purl.obolibrary.org/obo/ERO_0000005" /* Service */
); );
} }
//isShowRoleLabelField remains true for this so doesn't need to be overwritten
@Override @Override
boolean isShowRoleLabelField(){ boolean isShowRoleLabelField(){
return true; return true;
} }
/* /*
* Use the methods below to change the date/time precision in the * Use the methods below to change the date/time precision in the
* custom form associated with this generator. When not used, the * custom form associated with this generator. When not used, the

View file

@ -5,6 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle;
/** /**
* Generates the edit configuration for adding a Role to a Person. * Generates the edit configuration for adding a Role to a Person.
@ -46,8 +48,13 @@ public class AddEditorRoleToPersonGenerator extends AddRoleToPersonTwoStageGener
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
// UQAM-Linguistic-Management Managing linguistic context
I18nBundle i18n = I18n.bundle(vreq);
String i18nSelectType = i18n.text("select_type");
String selectType = (i18nSelectType == null || i18nSelectType.isEmpty()) ? "Select type" : i18nSelectType ;
return new ChildVClassesOptions(OPTION_CLASS_URI) return new ChildVClassesOptions(OPTION_CLASS_URI)
.setDefaultOptionLabel("Select type"); .setDefaultOptionLabel(selectType);
} }
/** Do not show the role label field for the AddEditorRoleToPerson form */ /** Do not show the role label field for the AddEditorRoleToPerson form */

View file

@ -32,6 +32,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUti
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
/** /**
* This is a slightly unusual generator that is used by Manage Editors on * This is a slightly unusual generator that is used by Manage Editors on
@ -83,7 +84,7 @@ public class AddEditorsToInformationResourceGenerator extends VivoBaseGenerator
//template file //template file
editConfiguration.setTemplate("addEditorsToInformationResource.ftl"); editConfiguration.setTemplate("addEditorsToInformationResource.ftl");
//add validators //add validators
editConfiguration.addValidator(new FirstAndLastNameValidator("personUri")); editConfiguration.addValidator(new FirstAndLastNameValidator("personUri", I18n.bundle(vreq)));
//Adding additional data, specifically edit mode //Adding additional data, specifically edit mode
addFormSpecificData(editConfiguration, vreq); addFormSpecificData(editConfiguration, vreq);

View file

@ -23,9 +23,10 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
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;
@ -108,8 +109,8 @@ public class AddEditorshipToPersonGenerator extends VivoBaseGenerator implements
conf.addField( new FieldVTwo(). conf.addField( new FieldVTwo().
setName("documentType"). setName("documentType").
setValidators( list("nonempty") ). setValidators( list("nonempty") ).
setOptions( new ConstantFieldOptions("documentType", getDocumentTypeLiteralOptions() )) // UQAM-Linguistic-Management vreq for linguistic context
); setOptions( getDocumentTypeLiteralOptions(vreq) ) );
conf.addField( new FieldVTwo(). conf.addField( new FieldVTwo().
setName("documentLabel"). setName("documentLabel").
@ -203,21 +204,22 @@ public class AddEditorshipToPersonGenerator extends VivoBaseGenerator implements
return null; return null;
} }
private List<List<String>> getDocumentTypeLiteralOptions() { private FieldOptions getDocumentTypeLiteralOptions(VitroRequest vreq) throws Exception {
List<List<String>> literalOptions = new ArrayList<List<String>>(); return GeneratorUtil.buildResourceAndLabelFieldOptions(
literalOptions.add(list("http://purl.org/ontology/bibo/Book", "Book")); vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
literalOptions.add(list("http://purl.org/ontology/bibo/Chapter", "Chapter")); I18n.bundle(vreq).text("select_type"),
literalOptions.add(list("http://purl.org/ontology/bibo/EditedBook", "Edited Book")); "http://purl.org/ontology/bibo/Book",
literalOptions.add(list("http://purl.org/ontology/bibo/Film", "Film")); "http://purl.org/ontology/bibo/Chapter",
literalOptions.add(list("http://purl.org/ontology/bibo/Magazine", "Magazine")); "http://purl.org/ontology/bibo/EditedBook",
literalOptions.add(list("http://vivoweb.org/ontology/core#Newsletter", "Newsletter")); "http://purl.org/ontology/bibo/Film",
literalOptions.add(list("http://purl.org/ontology/bibo/Newspaper", "Newspaper")); "http://purl.org/ontology/bibo/Magazine",
literalOptions.add(list("http://vivoweb.org/ontology/core#NewsRelease", "News Release")); "http://vivoweb.org/ontology/core#Newsletter",
literalOptions.add(list("http://purl.org/ontology/bibo/Report", "Report")); "http://purl.org/ontology/bibo/Newspaper",
literalOptions.add(list("http://vivoweb.org/ontology/core#Video", "Video")); "http://vivoweb.org/ontology/core#NewsRelease",
literalOptions.add(list("http://purl.org/ontology/bibo/Webpage", "Webpage")); "http://purl.org/ontology/bibo/Report",
literalOptions.add(list("http://purl.org/ontology/bibo/Website", "Website")); "http://vivoweb.org/ontology/core#Video",
return literalOptions; "http://purl.org/ontology/bibo/Webpage",
"http://purl.org/ontology/bibo/Website");
} }
} }

View file

@ -5,6 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle;
public class AddHeadOfRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddHeadOfRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -25,10 +27,14 @@ public class AddHeadOfRoleToPersonGenerator extends AddRoleToPersonTwoStageGener
/** Head Of role involves hard-coded options for the "right side" of the role or activity */ /** Head Of role involves hard-coded options for the "right side" of the role or activity */
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
// UQAM-Linguistic-Management Taking into account the linguistic context
I18nBundle i18n = I18n.bundle(vreq);
String i18nSelectType = i18n.text("select_type");
String selectType = (i18nSelectType == null || i18nSelectType.isEmpty()) ? "Select type" : i18nSelectType ;
return new return new
ChildVClassesOptions(OPTION_CLASS_URI) ChildVClassesOptions(OPTION_CLASS_URI)
.setDefaultOptionLabel("Select type"); .setDefaultOptionLabel(selectType);
} }
@Override @Override

View file

@ -2,9 +2,28 @@
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.QuerySolution;
import org.apache.jena.query.ResultSet;
import org.apache.jena.rdf.model.AnonId;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.i18n.I18nBundle;
import edu.cornell.mannlib.vitro.webapp.i18n.selection.SelectedLocale;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils;
public class AddMemberRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddMemberRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -20,43 +39,44 @@ public class AddMemberRoleToPersonGenerator extends AddRoleToPersonTwoStageGener
return "http://vivoweb.org/ontology/core#MemberRole"; return "http://vivoweb.org/ontology/core#MemberRole";
} }
@Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
"","Select type", vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
"http://vivoweb.org/ontology/core#AcademicDepartment","Academic Department", I18n.bundle(vreq).text("select_type"),
"http://vivoweb.org/ontology/core#Association","Association", "http://vivoweb.org/ontology/core#AcademicDepartment",
"http://vivoweb.org/ontology/core#Center","Center", "http://vivoweb.org/ontology/core#Association",
"http://vivoweb.org/ontology/core#ClinicalOrganization","Clinical Organization", "http://vivoweb.org/ontology/core#Center",
"http://vivoweb.org/ontology/core#College","College", "http://vivoweb.org/ontology/core#ClinicalOrganization",
"http://vivoweb.org/ontology/core#Committee","Committee", "http://vivoweb.org/ontology/core#College",
"http://vivoweb.org/ontology/core#Company","Company", "http://vivoweb.org/ontology/core#Committee",
"http://vivoweb.org/ontology/core#Consortium","Consortium", "http://vivoweb.org/ontology/core#Company",
"http://vivoweb.org/ontology/core#CoreLaboratory","Core Laboratory", "http://vivoweb.org/ontology/core#Consortium",
"http://vivoweb.org/ontology/core#Department","Department", "http://vivoweb.org/ontology/core#CoreLaboratory",
"http://vivoweb.org/ontology/core#Division","Division", "http://vivoweb.org/ontology/core#Department",
"http://vivoweb.org/ontology/core#ExtensionUnit","Extension Unit", "http://vivoweb.org/ontology/core#Division",
"http://vivoweb.org/ontology/core#Foundation","Foundation", "http://vivoweb.org/ontology/core#ExtensionUnit",
"http://vivoweb.org/ontology/core#FundingOrganization","Funding Organization", "http://vivoweb.org/ontology/core#Foundation",
"http://vivoweb.org/ontology/core#GovernmentAgency","Government Agency", "http://vivoweb.org/ontology/core#FundingOrganization",
"http://xmlns.com/foaf/0.1/Group","Group", "http://vivoweb.org/ontology/core#GovernmentAgency",
"http://vivoweb.org/ontology/core#Hospital","Hospital", "http://xmlns.com/foaf/0.1/Group",
"http://vivoweb.org/ontology/core#Institute","Institute", "http://vivoweb.org/ontology/core#Hospital",
"http://vivoweb.org/ontology/core#Laboratory","Laboratory", "http://vivoweb.org/ontology/core#Institute",
"http://vivoweb.org/ontology/core#Library","Library", "http://vivoweb.org/ontology/core#Laboratory",
"http://purl.obolibrary.org/obo/OBI_0000835","Manufacturer", "http://vivoweb.org/ontology/core#Library",
"http://vivoweb.org/ontology/core#Museum","Museum", "http://purl.obolibrary.org/obo/OBI_0000835" /* Manufacturer */,
"http://xmlns.com/foaf/0.1/Organization","Organization", "http://vivoweb.org/ontology/core#Museum",
"http://vivoweb.org/ontology/core#PrivateCompany","Private Company", "http://xmlns.com/foaf/0.1/Organization",
"http://vivoweb.org/ontology/core#Program","Program", "http://vivoweb.org/ontology/core#PrivateCompany",
"http://vivoweb.org/ontology/core#Publisher","Publisher", "http://vivoweb.org/ontology/core#Program",
"http://vivoweb.org/ontology/core#ResearchOrganization","Research Organization", "http://vivoweb.org/ontology/core#Publisher",
"http://vivoweb.org/ontology/core#School","School", "http://vivoweb.org/ontology/core#ResearchOrganization",
"http://vivoweb.org/ontology/core#Team","Team", "http://vivoweb.org/ontology/core#School",
"http://vivoweb.org/ontology/core#ServiceProvidingLaboratory","Service Providing Lab", "http://vivoweb.org/ontology/core#Team",
"http://vivoweb.org/ontology/core#StudentOrganization","Student Organization", "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory",
"http://purl.obolibrary.org/obo/ERO_0000565","Technology Transfer Office", "http://vivoweb.org/ontology/core#StudentOrganization",
"http://vivoweb.org/ontology/core#University","University"); "http://purl.obolibrary.org/obo/ERO_0000565" /* Technology Transfer Office */,
"http://vivoweb.org/ontology/core#University");
} }
@Override @Override

View file

@ -3,8 +3,8 @@
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddOrganizerRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddOrganizerRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -22,26 +22,27 @@ public class AddOrganizerRoleToPersonGenerator extends AddRoleToPersonTwoStageGe
} }
//Organizer role involves hard-coded options for the "right side" of the role or activity //Organizer role involves hard-coded options for the "right side" of the role or activity
@Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions(
"","Select type", return GeneratorUtil.buildResourceAndLabelFieldOptions(
"http://vivoweb.org/ontology/core#Competition", "Competition", vreq.getRDFService(), vreq.getWebappDaoFactory(),
"http://purl.org/ontology/bibo/Conference", "Conference", "", I18n.bundle(vreq).text("select_type"),
"http://vivoweb.org/ontology/core#Course", "Course", "http://vivoweb.org/ontology/core#Competition",
"http://purl.org/NET/c4dm/event.owl#Event", "Event", "http://purl.org/ontology/bibo/Conference",
"http://vivoweb.org/ontology/core#Exhibit", "Exhibit", "http://vivoweb.org/ontology/core#Course",
"http://purl.org/ontology/bibo/Hearing", "Hearing", "http://purl.org/NET/c4dm/event.owl#Event",
"http://purl.org/ontology/bibo/Interview", "Interview", "http://vivoweb.org/ontology/core#Exhibit",
"http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", "http://purl.org/ontology/bibo/Hearing",
"http://vivoweb.org/ontology/core#Meeting", "Meeting", "http://purl.org/ontology/bibo/Interview",
"http://purl.org/ontology/bibo/Performance", "Performance", "http://vivoweb.org/ontology/core#InvitedTalk",
"http://vivoweb.org/ontology/core#Presentation", "Presentation", "http://vivoweb.org/ontology/core#Meeting",
"http://purl.org/ontology/bibo/Workshop", "Workshop", "http://purl.org/ontology/bibo/Performance",
"http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", "http://vivoweb.org/ontology/core#Presentation",
"http://vivoweb.org/ontology/core#EventSeries", "Event Series", "http://purl.org/ontology/bibo/Workshop",
"http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", "http://vivoweb.org/ontology/core#ConferenceSeries",
"http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series"); "http://vivoweb.org/ontology/core#EventSeries",
"http://vivoweb.org/ontology/core#SeminarSeries",
"http://vivoweb.org/ontology/core#WorkshopSeries");
} }
@Override @Override

View file

@ -3,8 +3,8 @@
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddOutreachProviderRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddOutreachProviderRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -24,57 +24,58 @@ public class AddOutreachProviderRoleToPersonGenerator extends AddRoleToPersonTwo
//Outreach Provider role involves hard-coded options for the "right side" of the role or activity //Outreach Provider role involves hard-coded options for the "right side" of the role or activity
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
"","Select type", vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
"http://vivoweb.org/ontology/core#AcademicDepartment","Academic Department", I18n.bundle(vreq).text("select_type"),
"http://vivoweb.org/ontology/core#Association","Association", "http://vivoweb.org/ontology/core#AcademicDepartment",
"http://vivoweb.org/ontology/core#Center","Center", "http://vivoweb.org/ontology/core#Association",
"http://vivoweb.org/ontology/core#ClinicalOrganization","Clinical Organization", "http://vivoweb.org/ontology/core#Center",
"http://vivoweb.org/ontology/core#College","College", "http://vivoweb.org/ontology/core#ClinicalOrganization",
"http://vivoweb.org/ontology/core#Committee","Committee", "http://vivoweb.org/ontology/core#College",
"http://vivoweb.org/ontology/core#Company","Company", "http://vivoweb.org/ontology/core#Committee",
"http://vivoweb.org/ontology/core#Competition", "Competition", "http://vivoweb.org/ontology/core#Company",
"http://purl.org/ontology/bibo/Conference", "Conference", "http://vivoweb.org/ontology/core#Competition",
"http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", "http://purl.org/ontology/bibo/Conference",
"http://vivoweb.org/ontology/core#Consortium","Consortium", "http://vivoweb.org/ontology/core#ConferenceSeries",
"http://vivoweb.org/ontology/core#CoreLaboratory","Core Laboratory", "http://vivoweb.org/ontology/core#Consortium",
"http://vivoweb.org/ontology/core#Course", "Course", "http://vivoweb.org/ontology/core#CoreLaboratory",
"http://vivoweb.org/ontology/core#Department","Department", "http://vivoweb.org/ontology/core#Course",
"http://vivoweb.org/ontology/core#Division","Division", "http://vivoweb.org/ontology/core#Department",
"http://purl.org/NET/c4dm/event.owl#Event","Event", "http://vivoweb.org/ontology/core#Division",
"http://vivoweb.org/ontology/core#EventSeries", "Event Series", "http://purl.org/NET/c4dm/event.owl#Event",
"http://vivoweb.org/ontology/core#Exhibit", "Exhibit", "http://vivoweb.org/ontology/core#EventSeries",
"http://vivoweb.org/ontology/core#ExtensionUnit","Extension Unit", "http://vivoweb.org/ontology/core#Exhibit",
"http://vivoweb.org/ontology/core#Foundation","Foundation", "http://vivoweb.org/ontology/core#ExtensionUnit",
"http://vivoweb.org/ontology/core#FundingOrganization","Funding Organization", "http://vivoweb.org/ontology/core#Foundation",
"http://vivoweb.org/ontology/core#GovernmentAgency","Government Agency", "http://vivoweb.org/ontology/core#FundingOrganization",
"http://xmlns.com/foaf/0.1/Group","Group", "http://vivoweb.org/ontology/core#GovernmentAgency",
"http://purl.org/ontology/bibo/Hearing", "Hearing", "http://xmlns.com/foaf/0.1/Group",
"http://vivoweb.org/ontology/core#Hospital","Hospital", "http://purl.org/ontology/bibo/Hearing",
"http://vivoweb.org/ontology/core#Institute","Institute", "http://vivoweb.org/ontology/core#Hospital",
"http://purl.org/ontology/bibo/Interview", "Interview", "http://vivoweb.org/ontology/core#Institute",
"http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", "http://purl.org/ontology/bibo/Interview",
"http://vivoweb.org/ontology/core#Laboratory","Laboratory", "http://vivoweb.org/ontology/core#InvitedTalk",
"http://vivoweb.org/ontology/core#Library","Library", "http://vivoweb.org/ontology/core#Laboratory",
"http://purl.obolibrary.org/obo/OBI_0000835","Manufacturer", "http://vivoweb.org/ontology/core#Library",
"http://vivoweb.org/ontology/core#Meeting", "Meeting", "http://purl.obolibrary.org/obo/OBI_0000835" /* Manufacturer */,
"http://vivoweb.org/ontology/core#Museum","Museum", "http://vivoweb.org/ontology/core#Meeting",
"http://xmlns.com/foaf/0.1/Organization","Organization", "http://vivoweb.org/ontology/core#Museum",
"http://purl.org/ontology/bibo/Performance", "Performance", "http://xmlns.com/foaf/0.1/Organization",
"http://vivoweb.org/ontology/core#Presentation", "Presentation", "http://purl.org/ontology/bibo/Performance",
"http://vivoweb.org/ontology/core#PrivateCompany","Private Company", "http://vivoweb.org/ontology/core#Presentation",
"http://vivoweb.org/ontology/core#Program","Program", "http://vivoweb.org/ontology/core#PrivateCompany",
"http://vivoweb.org/ontology/core#Publisher","Publisher", "http://vivoweb.org/ontology/core#Program",
"http://vivoweb.org/ontology/core#ResearchOrganization","Research Organization", "http://vivoweb.org/ontology/core#Publisher",
"http://vivoweb.org/ontology/core#School","School", "http://vivoweb.org/ontology/core#ResearchOrganization",
"http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", "http://vivoweb.org/ontology/core#School",
"http://vivoweb.org/ontology/core#Team","Team", "http://vivoweb.org/ontology/core#SeminarSeries",
"http://vivoweb.org/ontology/core#ServiceProvidingLaboratory","Service Providing Lab", "http://vivoweb.org/ontology/core#Team",
"http://vivoweb.org/ontology/core#StudentOrganization","Student Organization", "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory",
"http://purl.obolibrary.org/obo/ERO_0000565","Technology Transfer Office", "http://vivoweb.org/ontology/core#StudentOrganization",
"http://vivoweb.org/ontology/core#University","University", "http://purl.obolibrary.org/obo/ERO_0000565" /*Technology Transfer Office*/,
"http://purl.org/ontology/bibo/Workshop", "Workshop", "http://vivoweb.org/ontology/core#University",
"http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series"); "http://purl.org/ontology/bibo/Workshop",
"http://vivoweb.org/ontology/core#WorkshopSeries");
} }
@Override @Override

View file

@ -29,8 +29,10 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisio
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
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;
@ -624,7 +626,8 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq) throws Exception { private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq) throws Exception {
setTitleField(editConfiguration); setTitleField(editConfiguration);
setPubTypeField(editConfiguration); //UQAM-Linguistic-Management needs for getting appropriated value in the linguistic context
setPubTypeField(editConfiguration, vreq);
setPubUriField(editConfiguration); setPubUriField(editConfiguration);
setCollectionLabelField(editConfiguration); setCollectionLabelField(editConfiguration);
setCollectionDisplayField(editConfiguration); setCollectionDisplayField(editConfiguration);
@ -664,11 +667,12 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
setRangeDatatypeUri(stringDatatypeUri)); setRangeDatatypeUri(stringDatatypeUri));
} }
private void setPubTypeField(EditConfigurationVTwo editConfiguration) throws Exception { //UQAM-Linguistic-Management add vreq to get linguistic context
private void setPubTypeField(EditConfigurationVTwo editConfiguration, VitroRequest vreq) throws Exception {
editConfiguration.addField(new FieldVTwo(). editConfiguration.addField(new FieldVTwo().
setName("pubType"). setName("pubType").
setValidators( list("nonempty") ). setValidators( list("nonempty") ).
setOptions( new ConstantFieldOptions("pubType", getPublicationTypeLiteralOptions() )) setOptions( getPublicationTypeLiteralOptions(vreq) )
); );
} }
@ -886,39 +890,40 @@ public class AddPublicationToPersonGenerator extends VivoBaseGenerator implement
); );
} }
private List<List<String>> getPublicationTypeLiteralOptions() { private FieldOptions getPublicationTypeLiteralOptions(VitroRequest vreq) throws Exception {
List<List<String>> literalOptions = new ArrayList<List<String>>(); return GeneratorUtil.buildResourceAndLabelFieldOptions(
literalOptions.add(list("http://vivoweb.org/ontology/core#Abstract", "Abstract")); vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
literalOptions.add(list("http://purl.org/ontology/bibo/AcademicArticle", "Academic Article")); I18n.bundle(vreq).text("select_type"),
literalOptions.add(list("http://purl.org/ontology/bibo/Article", "Article")); "http://vivoweb.org/ontology/core#Abstract",
literalOptions.add(list("http://purl.org/ontology/bibo/AudioDocument", "Audio Document")); "http://purl.org/ontology/bibo/AcademicArticle",
literalOptions.add(list("http://vivoweb.org/ontology/core#BlogPosting", "Blog Posting")); "http://purl.org/ontology/bibo/Article",
literalOptions.add(list("http://purl.org/ontology/bibo/Book", "Book")); "http://purl.org/ontology/bibo/AudioDocument",
literalOptions.add(list("http://vivoweb.org/ontology/core#CaseStudy", "Case Study")); "http://vivoweb.org/ontology/core#BlogPosting",
literalOptions.add(list("http://vivoweb.org/ontology/core#Catalog", "Catalog")); "http://purl.org/ontology/bibo/Book",
literalOptions.add(list("http://purl.org/ontology/bibo/Chapter", "Chapter")); "http://vivoweb.org/ontology/core#CaseStudy",
literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePaper", "Conference Paper")); "http://vivoweb.org/ontology/core#Catalog",
literalOptions.add(list("http://vivoweb.org/ontology/core#ConferencePoster", "Conference Poster")); "http://purl.org/ontology/bibo/Chapter",
literalOptions.add(list("http://vivoweb.org/ontology/core#Database", "Database")); "http://vivoweb.org/ontology/core#ConferencePaper",
literalOptions.add(list("http://vivoweb.org/ontology/core#Dataset", "Dataset")); "http://vivoweb.org/ontology/core#ConferencePoster",
literalOptions.add(list("http://purl.org/ontology/bibo/EditedBook", "Edited Book")); "http://vivoweb.org/ontology/core#Database",
literalOptions.add(list("http://vivoweb.org/ontology/core#EditorialArticle", "Editorial Article")); "http://vivoweb.org/ontology/core#Dataset",
literalOptions.add(list("http://purl.org/ontology/bibo/Film", "Film")); "http://purl.org/ontology/bibo/EditedBook",
literalOptions.add(list("http://vivoweb.org/ontology/core#Newsletter", "Newsletter")); "http://vivoweb.org/ontology/core#EditorialArticle",
literalOptions.add(list("http://vivoweb.org/ontology/core#NewsRelease", "News Release")); "http://purl.org/ontology/bibo/Film",
literalOptions.add(list("http://purl.org/ontology/bibo/Patent", "Patent")); "http://vivoweb.org/ontology/core#Newsletter",
literalOptions.add(list("http://purl.obolibrary.org/obo/OBI_0000272", "Protocol")); "http://vivoweb.org/ontology/core#NewsRelease",
literalOptions.add(list("http://purl.org/ontology/bibo/Report", "Report")); "http://purl.org/ontology/bibo/Patent",
literalOptions.add(list("http://vivoweb.org/ontology/core#ResearchProposal", "Research Proposal")); "http://purl.obolibrary.org/obo/OBI_0000272",
literalOptions.add(list("http://vivoweb.org/ontology/core#Review", "Review")); "http://purl.org/ontology/bibo/Report",
literalOptions.add(list("http://purl.obolibrary.org/obo/ERO_0000071 ", "Software")); "http://vivoweb.org/ontology/core#ResearchProposal",
literalOptions.add(list("http://vivoweb.org/ontology/core#Speech", "Speech")); "http://vivoweb.org/ontology/core#Review",
literalOptions.add(list("http://purl.org/ontology/bibo/Thesis", "Thesis")); "http://purl.obolibrary.org/obo/ERO_0000071 ",
literalOptions.add(list("http://vivoweb.org/ontology/core#Video", "Video")); "http://vivoweb.org/ontology/core#Speech",
literalOptions.add(list("http://purl.org/ontology/bibo/Webpage", "Webpage")); "http://purl.org/ontology/bibo/Thesis",
literalOptions.add(list("http://purl.org/ontology/bibo/Website", "Website")); "http://vivoweb.org/ontology/core#Video",
literalOptions.add(list("http://vivoweb.org/ontology/core#WorkingPaper", "Working Paper")); "http://purl.org/ontology/bibo/Webpage",
return literalOptions; "http://purl.org/ontology/bibo/Website",
"http://vivoweb.org/ontology/core#WorkingPaper");
} }
//Form specific data //Form specific data

View file

@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddResearcherRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddResearcherRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -23,12 +24,13 @@ public class AddResearcherRoleToPersonGenerator extends AddRoleToPersonTwoStageG
/** Researcher role involves hard-coded options for the "right side" of the role or activity. */ /** Researcher role involves hard-coded options for the "right side" of the role or activity. */
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
"", "Select one", vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
"http://vivoweb.org/ontology/core#Grant", "Grant", I18n.bundle(vreq).text("select_type"),
"http://purl.obolibrary.org/obo/ERO_0000015", "Human Study", "http://vivoweb.org/ontology/core#Grant",
"http://vivoweb.org/ontology/core#Project", "Project", "http://purl.obolibrary.org/obo/ERO_0000015" /* Human Study" */,
"http://purl.obolibrary.org/obo/ERO_0000014", "Research Project"); "http://vivoweb.org/ontology/core#Project",
"http://purl.obolibrary.org/obo/ERO_0000014" /* Research Project */);
} }
@Override @Override

View file

@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddReviewerRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddReviewerRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -34,77 +35,77 @@ public class AddReviewerRoleToPersonGenerator extends AddRoleToPersonTwoStageGen
*/ */
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
"", "Select type", vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
"http://purl.org/ontology/bibo/AcademicArticle", "Academic Article", I18n.bundle(vreq).text("select_type"),
"http://purl.org/ontology/bibo/Article", "Article", "http://purl.org/ontology/bibo/AcademicArticle",
"http://purl.org/ontology/bibo/AudioDocument", "Audio Document", "http://purl.org/ontology/bibo/Article",
"http://purl.org/ontology/bibo/AudioVisualDocument", "Audio-Visual Document", "http://purl.org/ontology/bibo/AudioDocument",
"http://purl.org/ontology/bibo/Bill", "Bill", "http://purl.org/ontology/bibo/AudioVisualDocument",
"http://vivoweb.org/ontology/core#Blog", "Blog", "http://purl.org/ontology/bibo/Bill",
"http://vivoweb.org/ontology/core#BlogPosting", "Blog Posting", "http://vivoweb.org/ontology/core#Blog",
"http://purl.org/ontology/bibo/Book", "Book", "http://vivoweb.org/ontology/core#BlogPosting",
"http://purl.org/ontology/bibo/BookSection", "Book Section", "http://purl.org/ontology/bibo/Book",
"http://purl.org/ontology/bibo/Brief", "Brief", "http://purl.org/ontology/bibo/BookSection",
"http://vivoweb.org/ontology/core#CaseStudy", "Case Study", "http://purl.org/ontology/bibo/Brief",
"http://vivoweb.org/ontology/core#Catalog", "Catalog", "http://vivoweb.org/ontology/core#CaseStudy",
"http://purl.org/ontology/bibo/Chapter", "Chapter", "http://vivoweb.org/ontology/core#Catalog",
"http://purl.org/spar/fabio/ClinicalGuideline", "Clinical Guideline", "http://purl.org/ontology/bibo/Chapter",
"http://purl.org/ontology/bibo/Code", "Code", "http://purl.org/spar/fabio/ClinicalGuideline",
"http://purl.org/ontology/bibo/CollectedDocument", "Collected Document", "http://purl.org/ontology/bibo/Code",
"http://purl.org/spar/fabio/Comment", "Comment", "http://purl.org/ontology/bibo/CollectedDocument",
"http://vivoweb.org/ontology/core#ConferencePaper", "Conference Paper", "http://purl.org/spar/fabio/Comment",
"http://vivoweb.org/ontology/core#ConferencePoster", "Conference Poster", "http://vivoweb.org/ontology/core#ConferencePaper",
"http://purl.org/ontology/bibo/CourtReporter", "Court Reporter", "http://vivoweb.org/ontology/core#ConferencePoster",
"http://vivoweb.org/ontology/core#Database", "Database", "http://purl.org/ontology/bibo/CourtReporter",
"http://purl.org/ontology/bibo/LegalDecision", "Decision", "http://vivoweb.org/ontology/core#Database",
"http://purl.org/ontology/bibo/DocumentPart", "Document Part", "http://purl.org/ontology/bibo/LegalDecision",
"http://purl.org/ontology/bibo/EditedBook", "Edited Book", "http://purl.org/ontology/bibo/DocumentPart",
"http://vivoweb.org/ontology/core#EditorialArticle", "Editorial Article", "http://purl.org/ontology/bibo/EditedBook",
"http://purl.org/spar/fabio/Erratum", "Erratum", "http://vivoweb.org/ontology/core#EditorialArticle",
"http://purl.org/ontology/bibo/Excerpt", "Excerpt", "http://purl.org/spar/fabio/Erratum",
"http://purl.org/ontology/bibo/Film", "Film", "http://purl.org/ontology/bibo/Excerpt",
"http://purl.org/ontology/bibo/Image", "Image", "http://purl.org/ontology/bibo/Film",
"http://purl.org/ontology/bibo/Issue", "Issue", "http://purl.org/ontology/bibo/Image",
"http://purl.org/ontology/bibo/Journal", "Journal", "http://purl.org/ontology/bibo/Issue",
"http://purl.obolibrary.org/obo/IAO_0000013", "Journal Article", "http://purl.org/ontology/bibo/Journal",
"http://purl.org/ontology/bibo/LegalCaseDocument", "Legal Case Document", "http://purl.obolibrary.org/obo/IAO_0000013" /* "Journal Article" */,
"http://purl.org/ontology/bibo/LegalDocument", "Legal Document", "http://purl.org/ontology/bibo/LegalCaseDocument",
"http://purl.org/ontology/bibo/Legislation", "Legislation", "http://purl.org/ontology/bibo/LegalDocument",
"http://purl.org/ontology/bibo/Letter", "Letter", "http://purl.org/ontology/bibo/Legislation",
"http://purl.org/ontology/bibo/Magazine", "Magazine", "http://purl.org/ontology/bibo/Letter",
"http://purl.org/ontology/bibo/Manual", "Manual", "http://purl.org/ontology/bibo/Magazine",
"http://purl.org/ontology/bibo/Manuscript", "Manuscript", "http://purl.org/ontology/bibo/Manual",
"http://purl.org/ontology/bibo/Map", "Map", "http://purl.org/ontology/bibo/Manuscript",
"http://vivoweb.org/ontology/core#Newsletter", "Newsletter", "http://purl.org/ontology/bibo/Map",
"http://purl.org/ontology/bibo/Newspaper", "Newspaper", "http://vivoweb.org/ontology/core#Newsletter",
"http://vivoweb.org/ontology/core#NewsRelease", "News Release", "http://purl.org/ontology/bibo/Newspaper",
"http://purl.org/ontology/bibo/Note", "Note", "http://vivoweb.org/ontology/core#NewsRelease",
"http://purl.org/ontology/bibo/Patent", "Patent", "http://purl.org/ontology/bibo/Note",
"http://purl.org/ontology/bibo/Periodical", "Periodical", "http://purl.org/ontology/bibo/Patent",
"http://purl.org/ontology/bibo/PersonalCommunicationDocument", "Personal Communication Document", "http://purl.org/ontology/bibo/Periodical",
"http://purl.org/ontology/bibo/Proceedings", "Proceedings", "http://purl.org/ontology/bibo/PersonalCommunicationDocument",
"http://purl.obolibrary.org/obo/OBI_0000272", "protocol", "http://purl.org/ontology/bibo/Proceedings",
"http://purl.org/ontology/bibo/Quote", "Quote", "http://purl.obolibrary.org/obo/OBI_0000272" /* Protocol" */,
"http://purl.org/ontology/bibo/ReferenceSource", "Reference Source", "http://purl.org/ontology/bibo/Quote",
"http://purl.org/ontology/bibo/Report", "Report", "http://purl.org/ontology/bibo/ReferenceSource",
"http://vivoweb.org/ontology/core#ResearchProposal", "Research Proposal", "http://purl.org/ontology/bibo/Report",
"http://vivoweb.org/ontology/core#Review", "Review", "http://vivoweb.org/ontology/core#ResearchProposal",
"http://vivoweb.org/ontology/core#Score", "Score", "http://vivoweb.org/ontology/core#Review",
"http://vivoweb.org/ontology/core#Screenplay", "Screenplay", "http://vivoweb.org/ontology/core#Score",
"http://purl.org/ontology/bibo/Series", "Series", "http://vivoweb.org/ontology/core#Screenplay",
"http://purl.org/ontology/bibo/Slide", "Slide", "http://purl.org/ontology/bibo/Series",
"http://purl.org/ontology/bibo/Slideshow", "Slideshow", "http://purl.org/ontology/bibo/Slide",
"http://vivoweb.org/ontology/core#Speech", "Speech", "http://purl.org/ontology/bibo/Slideshow",
"http://purl.org/ontology/bibo/Standard", "Standard", "http://vivoweb.org/ontology/core#Speech",
"http://purl.org/ontology/bibo/Statute", "Statute", "http://purl.org/ontology/bibo/Standard",
"http://purl.org/ontology/bibo/Thesis", "Thesis", "http://purl.org/ontology/bibo/Statute",
"http://vivoweb.org/ontology/core#Translation", "Translation", "http://purl.org/ontology/bibo/Thesis",
"http://vivoweb.org/ontology/core#Video", "Video", "http://vivoweb.org/ontology/core#Translation",
"http://purl.org/ontology/bibo/Webpage", "Webpage", "http://vivoweb.org/ontology/core#Video",
"http://purl.org/ontology/bibo/Website", "Website", "http://purl.org/ontology/bibo/Webpage",
"http://vivoweb.org/ontology/core#WorkingPaper", "Working Paper" "http://purl.org/ontology/bibo/Website",
); "http://vivoweb.org/ontology/core#WorkingPaper");
} }
//isShowRoleLabelField remains true for this so doesn't need to be overwritten //isShowRoleLabelField remains true for this so doesn't need to be overwritten

View file

@ -415,7 +415,7 @@ public abstract class AddRoleToPersonTwoStageGenerator extends BaseEditConfigura
//make list of type URIs from options, this can be called with null since //make list of type URIs from options, this can be called with null since
//ConstantFieldOptions doesn't use any of the arguments. //ConstantFieldOptions doesn't use any of the arguments.
Map<String,String> options = fieldOptions.getOptions(null, null, null) ; Map<String,String> options = fieldOptions.getOptions(null, null, null, null) ;
if (options != null && options.size() > 0) { if (options != null && options.size() > 0) {
List<String> typeUris = new ArrayList<String>(); List<String> typeUris = new ArrayList<String>();

View file

@ -1,649 +0,0 @@
/* $This file is distributed under the terms of the license in LICENSE$ */
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import static edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames.DISPLAY;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.JspToGeneratorMapping;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.query.QuerySolution;
import org.apache.jena.query.ResultSet;
import org.apache.jena.rdf.model.Literal;
import edu.cornell.mannlib.vitro.webapp.application.ApplicationUtils;
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
import edu.cornell.mannlib.vitro.webapp.dao.vclassgroup.ProhibitedFromSearch;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaObjectPropetyOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngine;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchEngineException;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchQuery;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchResponse;
import edu.cornell.mannlib.vitro.webapp.modules.searchEngine.SearchResultDocumentList;
import edu.cornell.mannlib.vitro.webapp.search.VitroSearchTermNames;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils;
import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
/**
* Generates the edit configuration for a default property form.
* This handles the default object property auto complete.
*
* If a default property form is request and the number of indivdiuals
* found in the range is too large, the the auto complete setup and
* template will be used instead.
*/
public class AddRubricToELENPHArticleGenerator implements EditConfigurationGenerator {
private Log log = LogFactory.getLog(AddRubricToELENPHArticleGenerator.class);
private String subjectUri = null;
private String predicateUri = null;
private String objectUri = null;
private String objectPropertyTemplate = "defaultPropertyForm.ftl";
private String acObjectPropertyTemplate = "autoCompleteObjectPropForm.ftl";
private ArrayList<String> excerptIDs= new ArrayList<String>();
protected boolean doAutoComplete = false;
protected boolean tooManyRangeIndividuals = false;
protected long maxNonACRangeIndividualCount = 300;
protected String customErrorMessages = null;
@Override
public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq,
HttpSession session) throws Exception {
if(!EditConfigurationUtils.isObjectProperty(EditConfigurationUtils.getPredicateUri(vreq), vreq)) {
throw new Exception("DefaultObjectPropertyFormGenerator does not handle data properties.");
}
//Custom error can also be represented as an exception above, but in this case
//we would like the page to enable the user to go back to the profile page
customErrorMessages = getCustomErrorMessages(vreq);
if(customErrorMessages != null) {
return this.getCustomErrorEditConfiguration(vreq, session);
}
if( tooManyRangeOptions( vreq, session ) ){
tooManyRangeIndividuals = true;
doAutoComplete = true;
}
//Check if create new and return specific edit configuration from that generator.
if(DefaultAddMissingIndividualFormGenerator.isCreateNewIndividual(vreq, session)) {
EditConfigurationGenerator generator = JspToGeneratorMapping.createFor("defaultAddMissingIndividualForm.jsp", DefaultAddMissingIndividualFormGenerator.class);
return generator.getEditConfiguration(vreq, session);
}
//TODO: Add a generator for delete: based on command being delete - propDelete.jsp
//Generate a edit configuration for the default object property form and return it.
//if(DefaultDeleteGenerator.isDelete( vreq,session)){
// return (new DefaultDeleteGenerator()).getEditConfiguration(vreq,session);
return getDefaultObjectEditConfiguration(vreq, session);
}
private String getCustomErrorMessages(VitroRequest vreq) {
String errorMessages = null;
String rangeUri = vreq.getParameter("rangeUri");
VClass rangeVClass = null;
if(rangeUri != null && !rangeUri.isEmpty()) {
WebappDaoFactory ctxDaoFact = vreq.getLanguageNeutralWebappDaoFactory();
rangeVClass = ctxDaoFact.getVClassDao().getVClassByURI(rangeUri);
if(rangeVClass == null) {
errorMessages = I18n.text(vreq,"the_range_class_does_not_exist");
}
}
return errorMessages;
}
protected List<VClass> getRangeTypes(VitroRequest vreq) {
// This first part needs a WebappDaoFactory with no filtering/RDFService
// funny business because it needs to be able to retrieve anonymous union
// classes by their "pseudo-bnode URIs".
// Someday we'll need to figure out a different way of doing this.
//WebappDaoFactory ctxDaoFact = ModelAccess.on(
// vreq.getSession().getServletContext()).getWebappDaoFactory();
WebappDaoFactory ctxDaoFact = vreq.getLanguageNeutralWebappDaoFactory();
List<VClass> types = new ArrayList<VClass>();
Individual subject = EditConfigurationUtils.getSubjectIndividual(vreq);
String predicateUri = EditConfigurationUtils.getPredicateUri(vreq);
String rangeUri = EditConfigurationUtils.getRangeUri(vreq);
if (rangeUri != null && !rangeUri.isEmpty()) {
VClass rangeVClass = ctxDaoFact.getVClassDao().getVClassByURI(rangeUri);
if(rangeVClass != null) {
if (!rangeVClass.isUnion()) {
types.add(rangeVClass);
} else {
types.addAll(rangeVClass.getUnionComponents());
}
return types;
} else {
log.error("Range VClass does not exist for " + rangeUri);
}
}
WebappDaoFactory wDaoFact = vreq.getWebappDaoFactory();
//Get all vclasses applicable to subject
if(subject != null) {
List<VClass> vClasses = subject.getVClasses();
HashMap<String, VClass> typesHash = new HashMap<String, VClass>();
for(VClass vclass: vClasses) {
List<VClass> rangeVclasses = wDaoFact.getVClassDao().getVClassesForProperty(vclass.getURI(),predicateUri);
if(rangeVclasses != null) {
for(VClass range: rangeVclasses) {
//a hash will keep a unique list of types and so prevent duplicates
typesHash.put(range.getURI(), range);
}
}
}
types.addAll(typesHash.values());
} else {
log.error("Subject individual was null for");
}
return types;
}
private boolean tooManyRangeOptions(VitroRequest vreq, HttpSession session ) throws SearchEngineException {
List<VClass> rangeTypes = getRangeTypes(vreq);
SearchEngine searchEngine = ApplicationUtils.instance().getSearchEngine();
List<String> types = new ArrayList<String>();
for (VClass vclass : rangeTypes) {
if (vclass.getURI() != null) {
types.add(vclass.getURI());
}
}
//empty list means the range is not set to anything, force Thing
if(types.size() == 0 ){
types.add(VitroVocabulary.OWL_THING);
}
long count = 0;
for( String type:types){
//search query for type count.
SearchQuery query = searchEngine.createQuery();
if( VitroVocabulary.OWL_THING.equals( type )){
query.setQuery( "*:*" );
}else{
query.setQuery( VitroSearchTermNames.RDFTYPE + ":" + type);
}
query.setRows(0);
SearchResponse rsp = searchEngine.query(query);
SearchResultDocumentList docs = rsp.getResults();
long found = docs.getNumFound();
count = count + found;
if( count > maxNonACRangeIndividualCount )
break;
}
return count > maxNonACRangeIndividualCount ;
}
private EditConfigurationVTwo getDefaultObjectEditConfiguration(VitroRequest vreq, HttpSession session) throws Exception {
EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo();
//process subject, predicate, object parameters
this.initProcessParameters(vreq, session, editConfiguration);
//Assumes this is a simple case of subject predicate var
editConfiguration.setN3Required(this.generateN3Required(vreq));
//n3 optional
editConfiguration.setN3Optional(this.generateN3Optional());
//Todo: what do new resources depend on here?
//In original form, these variables start off empty
editConfiguration.setNewResources(new HashMap<String, String>());
//In scope
this.setUrisAndLiteralsInScope(editConfiguration);
//on Form
this.setUrisAndLiteralsOnForm(editConfiguration, vreq);
editConfiguration.setFilesOnForm(new ArrayList<String>());
//Sparql queries
this.setSparqlQueries(editConfiguration);
//set fields
setFields(editConfiguration, vreq, EditConfigurationUtils.getPredicateUri(vreq), getRangeTypes(vreq));
// No need to put in session here b/c put in session within edit request dispatch controller instead
//placing in session depends on having edit key which is handled in edit request dispatch controller
// editConfiguration.putConfigInSession(editConfiguration, session);
prepareForUpdate(vreq, session, editConfiguration);
//After the main processing is done, check if select from existing process
processProhibitedFromSearch(vreq, session, editConfiguration);
//Form title and submit label moved to template
setTemplate(editConfiguration, vreq);
editConfiguration.addValidator(new AntiXssValidation());
//Set edit key
setEditKey(editConfiguration, vreq);
//Adding additional data, specifically edit mode
if( doAutoComplete ){
addFormSpecificDataForAC(editConfiguration, vreq, session);
}else{
addFormSpecificData(editConfiguration, vreq);
}
return editConfiguration;
}
//We only need enough for the error message to show up
private EditConfigurationVTwo getCustomErrorEditConfiguration(VitroRequest vreq, HttpSession session) {
EditConfigurationVTwo editConfiguration = new EditConfigurationVTwo();
//process subject, predicate, object parameters
this.initProcessParameters(vreq, session, editConfiguration);
this.setUrisAndLiteralsInScope(editConfiguration);
//Sparql queries
this.setSparqlQueries(editConfiguration);
prepareForUpdate(vreq, session, editConfiguration);
editConfiguration.setTemplate("customErrorMessages.ftl");
//Set edit key
setEditKey(editConfiguration, vreq);
//if custom error messages is not null, then add to form specific data
if(customErrorMessages != null) {
//at this point, it shouldn't be null
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
formSpecificData.put("customErrorMessages", customErrorMessages);
editConfiguration.setFormSpecificData(formSpecificData);
}
return editConfiguration;
}
private void setEditKey(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
String editKey = EditConfigurationUtils.getEditKey(vreq);
editConfiguration.setEditKey(editKey);
}
private void setTemplate(EditConfigurationVTwo editConfiguration,
VitroRequest vreq) {
if( doAutoComplete )
editConfiguration.setTemplate(acObjectPropertyTemplate);
else
editConfiguration.setTemplate(objectPropertyTemplate);
}
//Initialize setup: process parameters
private void initProcessParameters(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) {
String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq);
subjectUri = EditConfigurationUtils.getSubjectUri(vreq);
predicateUri = EditConfigurationUtils.getPredicateUri(vreq);
editConfiguration.setFormUrl(formUrl);
editConfiguration.setUrlPatternToReturnTo("/individual");
editConfiguration.setVarNameForSubject("subject");
editConfiguration.setSubjectUri(subjectUri);
editConfiguration.setEntityToReturnTo(subjectUri);
editConfiguration.setVarNameForPredicate("predicate");
editConfiguration.setPredicateUri(predicateUri);
//this needs to be set for the editing to be triggered properly, otherwise the 'prepare' method
//pretends this is a data property editing statement and throws an error
//"object" : [ "objectVar" , "${objectUriJson}" , "URI"],
if(EditConfigurationUtils.isObjectProperty(predicateUri, vreq)) {
log.debug("This is an predicate property: " + predicateUri);
log.debug("This is an subject property: " + subjectUri);
this.initObjectParameters(vreq);
log.debug("This is an object property: " + objectUri);
this.processObjectPropForm(vreq, editConfiguration);
} else {
log.debug("This is a data property: " + predicateUri);
}
}
private void initObjectParameters(VitroRequest vreq) {
//in case of object property
objectUri = EditConfigurationUtils.getObjectUri(vreq);
}
private void processObjectPropForm(VitroRequest vreq, EditConfigurationVTwo editConfiguration) {
editConfiguration.setVarNameForObject("objectVar");
editConfiguration.setObject(objectUri);
//this needs to be set for the editing to be triggered properly, otherwise the 'prepare' method
//pretends this is a data property editing statement and throws an error
//TODO: Check if null in case no object uri exists but this is still an object property
}
//Get N3 required
//Handles both object and data property
private List<String> generateN3Required(VitroRequest vreq) {
List<String> n3ForEdit = new ArrayList<String>();
getTextExcerpts(vreq);
if (excerptIDs.isEmpty()) {
String editString = "?subject ?predicate ?objectVar .";
n3ForEdit.add(editString);
} else {
for (String excerptID : excerptIDs) {
String editString = "<"+excerptID+">" + " ?predicate ?objectVar .";
log.debug(editString);
n3ForEdit.add(editString);
}
}
return n3ForEdit;
}
private List<String> generateN3Optional() {
List<String> n3Inverse = new ArrayList<String>();
n3Inverse.add("?objectVar ?inverseProp ?subject .");
return n3Inverse;
}
private void getTextExcerpts(VitroRequest vreq) {
ResultSet excerptResults = QueryUtils.getLanguageNeutralQueryResults(getExcerptsQueryString(), vreq);
while (excerptResults.hasNext()) {
QuerySolution solution = excerptResults.nextSolution();
String excerptID = solution.get("excerptID").asResource().toString();
log.debug(excerptID);
excerptIDs.add(excerptID);
}
}
private String getExcerptsQueryString() {
return "PREFIX ts_: <https://litvinovg.pro/text_structures#> "
+"SELECT DISTINCT ?excerptID "
+"WHERE { "
+"<" + subjectUri + "> ts_:hasTOC ?toc . "
+"?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerptID . "
+"} ";
}
//Set queries
private String retrieveQueryForInverse () {
String queryForInverse = "PREFIX owl: <http://www.w3.org/2002/07/owl#>"
+ " SELECT ?inverse_property "
+ " WHERE { ?inverse_property owl:inverseOf ?predicate } ";
return queryForInverse;
}
private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration) {
HashMap<String, List<String>> urisInScope = new HashMap<String, List<String>>();
//note that at this point the subject, predicate, and object var parameters have already been processed
urisInScope.put(editConfiguration.getVarNameForSubject(),
Arrays.asList(new String[]{editConfiguration.getSubjectUri()}));
urisInScope.put(editConfiguration.getVarNameForPredicate(),
Arrays.asList(new String[]{editConfiguration.getPredicateUri()}));
//this shoudl happen in edit configuration prepare for object prop update
//urisInScope.put(editConfiguration.getVarNameForObject(),
// Arrays.asList(new String[]{editConfiguration.getObject()}));
//inverse property uris should be included in sparql for additional uris in edit configuration
editConfiguration.setUrisInScope(urisInScope);
//Uris in scope include subject, predicate, and object var
editConfiguration.setLiteralsInScope(new HashMap<String, List<Literal>>());
}
//n3 should look as follows
//?subject ?predicate ?objectVar
private void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
List<String> urisOnForm = new ArrayList<String>();
List<String> literalsOnForm = new ArrayList<String>();
//uris on form should be empty if data property
urisOnForm.add("objectVar");
editConfiguration.setUrisOnform(urisOnForm);
editConfiguration.setLiteralsOnForm(literalsOnForm);
}
//This is for various items
private void setSparqlQueries(EditConfigurationVTwo editConfiguration) {
//Sparql queries defining retrieval of literals etc.
editConfiguration.setSparqlForAdditionalLiteralsInScope(new HashMap<String, String>());
Map<String, String> urisInScope = new HashMap<String, String>();
urisInScope.put("inverseProp", this.retrieveQueryForInverse());
editConfiguration.setSparqlForAdditionalUrisInScope(urisInScope);
editConfiguration.setSparqlForExistingLiterals(generateSparqlForExistingLiterals());
editConfiguration.setSparqlForExistingUris(generateSparqlForExistingUris());
}
//Get page uri for object
private HashMap<String, String> generateSparqlForExistingUris() {
HashMap<String, String> map = new HashMap<String, String>();
return map;
}
private HashMap<String, String> generateSparqlForExistingLiterals() {
HashMap<String, String> map = new HashMap<String, String>();
return map;
}
protected void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri) throws Exception {
setFields(editConfiguration, vreq, predicateUri, null);
}
protected void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri, List<VClass> rangeTypes) throws Exception {
FieldVTwo field = new FieldVTwo();
field.setName("objectVar");
List<String> validators = new ArrayList<String>();
validators.add("nonempty");
field.setValidators(validators);
if( ! doAutoComplete ){
field.setOptions( new IndividualsViaObjectPropetyOptions(
subjectUri,
predicateUri,
rangeTypes,
objectUri,
vreq ));
}else{
field.setOptions(null);
}
Map<String, FieldVTwo> fields = new HashMap<String, FieldVTwo>();
fields.put(field.getName(), field);
editConfiguration.setFields(fields);
}
private void prepareForUpdate(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) {
//Here, retrieve model from
OntModel model = ModelAccess.on(session.getServletContext()).getOntModel();
//if object property
if(EditConfigurationUtils.isObjectProperty(EditConfigurationUtils.getPredicateUri(vreq), vreq)){
Individual objectIndividual = EditConfigurationUtils.getObjectIndividual(vreq);
if(objectIndividual != null) {
//update existing object
editConfiguration.prepareForObjPropUpdate(model);
} else {
//new object to be created
editConfiguration.prepareForNonUpdate( model );
}
} else {
throw new Error("DefaultObjectPropertyForm does not handle data properties.");
}
}
private boolean isSelectFromExisting(VitroRequest vreq) {
String predicateUri = EditConfigurationUtils.getPredicateUri(vreq);
if(EditConfigurationUtils.isDataProperty(predicateUri, vreq)) {
return false;
}
ObjectProperty objProp = EditConfigurationUtils.getObjectPropertyForPredicate(vreq, EditConfigurationUtils.getPredicateUri(vreq));
return objProp.getSelectFromExisting();
}
//Additional processing, eg. select from existing
//This is really process prohibited from search
private void processProhibitedFromSearch(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfig) {
if(isSelectFromExisting(vreq)) {
// set ProhibitedFromSearch object so picklist doesn't show
// individuals from classes that should be hidden from list views
OntModel displayOntModel = ModelAccess.on(session.getServletContext()).getOntModel(DISPLAY);
ProhibitedFromSearch pfs = new ProhibitedFromSearch(
DisplayVocabulary.SEARCH_INDEX_URI, displayOntModel);
if( editConfig != null )
editConfig.setProhibitedFromSearch(pfs);
}
}
//Form specific data
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
//range options need to be stored for object property
//Store field names
List<String> objectSelect = new ArrayList<String>();
objectSelect.add(editConfiguration.getVarNameForObject());
//TODO: Check if this is the proper way to do this?
formSpecificData.put("objectSelect", objectSelect);
if(customErrorMessages != null && !customErrorMessages.isEmpty()) {
formSpecificData.put("customErrorMessages", customErrorMessages);
}
editConfiguration.setFormSpecificData(formSpecificData);
}
public void addFormSpecificDataForAC(EditConfigurationVTwo editConfiguration, VitroRequest vreq, HttpSession session) throws SearchEngineException {
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
//Get the edit mode
formSpecificData.put("editMode", getEditMode(vreq).toString().toLowerCase());
//We also need the type of the object itself
List<VClass> types = getRangeTypes(vreq);
//if types array contains only owl:Thing, the search will not return any results
//In this case, set an empty array
if(types.size() == 1 && types.get(0).getURI().equals(VitroVocabulary.OWL_THING) ){
types = new ArrayList<VClass>();
}
StringBuilder typesBuff = new StringBuilder();
for (VClass type : types) {
if (type.getURI() != null) {
typesBuff.append(type.getURI()).append(",");
}
}
formSpecificData.put("objectTypes", typesBuff.toString());
log.debug("autocomplete object types : " + formSpecificData.get("objectTypes"));
//Get label for individual if it exists
if(EditConfigurationUtils.getObjectIndividual(vreq) != null) {
String objectLabel = EditConfigurationUtils.getObjectIndividual(vreq).getName();
formSpecificData.put("objectLabel", objectLabel);
}
//TODO: find out if there are any individuals in the classes of objectTypes
formSpecificData.put("rangeIndividualsExist", rangeIndividualsExist(types) );
formSpecificData.put("sparqlForAcFilter", getSparqlForAcFilter(vreq));
if(customErrorMessages != null && !customErrorMessages.isEmpty()) {
formSpecificData.put("customErrorMessages", customErrorMessages);
}
editConfiguration.setTemplate(acObjectPropertyTemplate);
editConfiguration.setFormSpecificData(formSpecificData);
}
private Object rangeIndividualsExist(List<VClass> types) throws SearchEngineException {
SearchEngine searchEngine = ApplicationUtils.instance().getSearchEngine();
boolean rangeIndividualsFound = false;
for( VClass type:types){
//search for type count.
SearchQuery query = searchEngine.createQuery();
query.setQuery( VitroSearchTermNames.RDFTYPE + ":" + type.getURI());
query.setRows(0);
SearchResponse rsp = searchEngine.query(query);
SearchResultDocumentList docs = rsp.getResults();
if( docs.getNumFound() > 0 ){
rangeIndividualsFound = true;
break;
}
}
return rangeIndividualsFound;
}
public String getSubjectUri() {
return subjectUri;
}
public String getPredicateUri() {
return predicateUri;
}
public String getObjectUri() {
return objectUri;
}
/** get the auto complete edit mode */
public EditMode getEditMode(VitroRequest vreq) {
//In this case, the original jsp didn't rely on FrontEndEditingUtils
//but instead relied on whether or not the object Uri existed
String objectUri = EditConfigurationUtils.getObjectUri(vreq);
EditMode editMode = FrontEndEditingUtils.EditMode.ADD;
if(objectUri != null && !objectUri.isEmpty()) {
editMode = FrontEndEditingUtils.EditMode.EDIT;
}
return editMode;
}
public String getSparqlForAcFilter(VitroRequest vreq) {
String subject = EditConfigurationUtils.getSubjectUri(vreq);
String predicate = EditConfigurationUtils.getPredicateUri(vreq);
//Get all objects for existing predicate, filters out results from addition and edit
String query = "SELECT ?objectVar WHERE { " +
"<" + subject + "> <" + predicate + "> ?objectVar .} ";
return query;
}
}

View file

@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldOptions;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class AddServiceProviderRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator { public class AddServiceProviderRoleToPersonGenerator extends AddRoleToPersonTwoStageGenerator {
@ -18,62 +19,62 @@ public class AddServiceProviderRoleToPersonGenerator extends AddRoleToPersonTwoS
return "http://purl.obolibrary.org/obo/ERO_0000012"; return "http://purl.obolibrary.org/obo/ERO_0000012";
} }
/** Service Provider role involves hard-coded options for the
* "right side" of the role or activity. */
@Override @Override
FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception { FieldOptions getRoleActivityFieldOptions(VitroRequest vreq) throws Exception {
return new ConstantFieldOptions( return GeneratorUtil.buildResourceAndLabelFieldOptions(
vreq.getRDFService(), vreq.getWebappDaoFactory(), "",
I18n.bundle(vreq).text("select_type"),
"","Select type", "","Select type",
"http://vivoweb.org/ontology/core#AcademicDepartment","Academic Department", "http://vivoweb.org/ontology/core#AcademicDepartment",
"http://vivoweb.org/ontology/core#Association","Association", "http://vivoweb.org/ontology/core#Association",
"http://vivoweb.org/ontology/core#Center","Center", "http://vivoweb.org/ontology/core#Center",
"http://vivoweb.org/ontology/core#ClinicalOrganization","Clinical Organization", "http://vivoweb.org/ontology/core#ClinicalOrganization",
"http://vivoweb.org/ontology/core#College","College", "http://vivoweb.org/ontology/core#College",
"http://vivoweb.org/ontology/core#Committee","Committee", "http://vivoweb.org/ontology/core#Committee",
"http://vivoweb.org/ontology/core#Company","Company", "http://vivoweb.org/ontology/core#Company",
"http://vivoweb.org/ontology/core#Competition", "Competition", "http://vivoweb.org/ontology/core#Competition",
"http://purl.org/ontology/bibo/Conference", "Conference", "http://purl.org/ontology/bibo/Conference",
"http://vivoweb.org/ontology/core#ConferenceSeries", "Conference Series", "http://vivoweb.org/ontology/core#ConferenceSeries",
"http://vivoweb.org/ontology/core#Consortium","Consortium", "http://vivoweb.org/ontology/core#Consortium",
"http://vivoweb.org/ontology/core#CoreLaboratory","Core Laboratory", "http://vivoweb.org/ontology/core#CoreLaboratory",
"http://vivoweb.org/ontology/core#Course", "Course", "http://vivoweb.org/ontology/core#Course",
"http://vivoweb.org/ontology/core#Department","Department", "http://vivoweb.org/ontology/core#Department",
"http://vivoweb.org/ontology/core#Division","Division", "http://vivoweb.org/ontology/core#Division",
"http://purl.org/NET/c4dm/event.owl#Event","Event", "http://purl.org/NET/c4dm/event.owl#Event",
"http://vivoweb.org/ontology/core#EventSeries", "Event Series", "http://vivoweb.org/ontology/core#EventSeries",
"http://vivoweb.org/ontology/core#Exhibit", "Exhibit", "http://vivoweb.org/ontology/core#Exhibit",
"http://vivoweb.org/ontology/core#ExtensionUnit","Extension Unit", "http://vivoweb.org/ontology/core#ExtensionUnit",
"http://vivoweb.org/ontology/core#Foundation","Foundation", "http://vivoweb.org/ontology/core#Foundation",
"http://vivoweb.org/ontology/core#FundingOrganization","Funding Organization", "http://vivoweb.org/ontology/core#FundingOrganization",
"http://vivoweb.org/ontology/core#GovernmentAgency","Government Agency", "http://vivoweb.org/ontology/core#GovernmentAgency",
"http://xmlns.com/foaf/0.1/Group","Group", "http://xmlns.com/foaf/0.1/Group",
"http://purl.org/ontology/bibo/Hearing", "Hearing", "http://purl.org/ontology/bibo/Hearing",
"http://vivoweb.org/ontology/core#Hospital","Hospital", "http://vivoweb.org/ontology/core#Hospital",
"http://vivoweb.org/ontology/core#Institute","Institute", "http://vivoweb.org/ontology/core#Institute",
"http://purl.org/ontology/bibo/Interview", "Interview", "http://purl.org/ontology/bibo/Interview",
"http://vivoweb.org/ontology/core#InvitedTalk", "Invited Talk", "http://vivoweb.org/ontology/core#InvitedTalk",
"http://vivoweb.org/ontology/core#Laboratory","Laboratory", "http://vivoweb.org/ontology/core#Laboratory",
"http://vivoweb.org/ontology/core#Library","Library", "http://vivoweb.org/ontology/core#Library",
"http://purl.obolibrary.org/obo/OBI_0000835","Manufacturer", "http://purl.obolibrary.org/obo/OBI_0000835" /* Manufacturer */,
"http://vivoweb.org/ontology/core#Meeting", "Meeting", "http://vivoweb.org/ontology/core#Meeting",
"http://vivoweb.org/ontology/core#Museum","Museum", "http://vivoweb.org/ontology/core#Museum",
"http://xmlns.com/foaf/0.1/Organization","Organization", "http://xmlns.com/foaf/0.1/Organization",
"http://purl.org/ontology/bibo/Performance", "Performance", "http://purl.org/ontology/bibo/Performance",
"http://vivoweb.org/ontology/core#Presentation", "Presentation", "http://vivoweb.org/ontology/core#Presentation",
"http://vivoweb.org/ontology/core#PrivateCompany","Private Company", "http://vivoweb.org/ontology/core#PrivateCompany",
"http://vivoweb.org/ontology/core#Program","Program", "http://vivoweb.org/ontology/core#Program",
"http://vivoweb.org/ontology/core#Publisher","Publisher", "http://vivoweb.org/ontology/core#Publisher",
"http://vivoweb.org/ontology/core#ResearchOrganization","Research Organization", "http://vivoweb.org/ontology/core#ResearchOrganization",
"http://vivoweb.org/ontology/core#School","School", "http://vivoweb.org/ontology/core#School",
"http://vivoweb.org/ontology/core#SeminarSeries", "Seminar Series", "http://vivoweb.org/ontology/core#SeminarSeries",
"http://vivoweb.org/ontology/core#Team","Team", "http://vivoweb.org/ontology/core#Team",
"http://vivoweb.org/ontology/core#ServiceProvidingLaboratory","Service Providing Lab", "http://vivoweb.org/ontology/core#ServiceProvidingLaboratory",
"http://vivoweb.org/ontology/core#StudentOrganization","Student Organization", "http://vivoweb.org/ontology/core#StudentOrganization",
"http://purl.obolibrary.org/obo/ERO_0000565","Technology Transfer Office", "http://purl.obolibrary.org/obo/ERO_0000565" /* Technology Transfer Office" */,
"http://vivoweb.org/ontology/core#University","University", "http://vivoweb.org/ontology/core#University",
"http://purl.org/ontology/bibo/Workshop", "Workshop", "http://purl.org/ontology/bibo/Workshop",
"http://vivoweb.org/ontology/core#WorkshopSeries", "Workshop Series"); "http://vivoweb.org/ontology/core#WorkshopSeries");
} }
@Override @Override
boolean isShowRoleLabelField(){return true;} boolean isShowRoleLabelField(){return true;}

View file

@ -1,306 +0,0 @@
/* $This file is distributed under the terms of the license in LICENSE$ */
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import javax.servlet.http.HttpSession;
import org.apache.jena.rdf.model.Literal;
import org.apache.jena.vocabulary.RDFS;
import org.apache.jena.vocabulary.XSD;
import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle;
import edu.cornell.mannlib.vitro.webapp.auth.identifier.RequestIdentifiers;
import edu.cornell.mannlib.vitro.webapp.auth.identifier.common.HasAssociatedIndividual;
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.admin.ShowAuthController.AssociatedIndividual;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
/**
* Generates the edit configuration for a default property form.
* ModelChangePreprocessor creates the rdfs:label statement.
*/
public class CompilationGenerator extends BaseEditConfigurationGenerator implements EditConfigurationGenerator {
private String associatedProfile;
private int excerptsCounter;
@Override
public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) {
EditConfigurationVTwo config = new EditConfigurationVTwo();
associatedProfile = getAssociatedProfile(vreq);
excerptsCounter = parseCounter(vreq);
config.setTemplate( "compilationForm.ftl" );
config.setN3Required( generateN3Required(vreq));
//Optional because user may have selected either person or individual of another kind
//Person uses first name and last name whereas individual of other class would use label
//middle name is also optional
//config.setN3Optional(generateN3Optional());
config.addNewResource("newCompilation", vreq.getWebappDaoFactory().getDefaultNamespace());
config.addNewResource("newCompilationTOC", vreq.getWebappDaoFactory().getDefaultNamespace());
config.addField(new FieldVTwo().
setName("rawQueryString").
setRangeDatatypeUri(XSD.xstring.getURI()).
setValidators(getCompilationNameValidators(vreq)));
config.addField(new FieldVTwo().
setName("queryBuilderRules").
setRangeDatatypeUri(XSD.xstring.getURI()).
setValidators(getCompilationNameValidators(vreq)));
for (int itemN = 1; itemN <= excerptsCounter; itemN++) {
String tocItem = "tocItem" + itemN;
config.addNewResource(tocItem, vreq.getWebappDaoFactory().getDefaultNamespace());
String tocLevel = "tocLevel" + itemN;
config.addNewResource(tocLevel, vreq.getWebappDaoFactory().getDefaultNamespace());
String tocItemName = tocItem + "Name";
config.addField(new FieldVTwo().
setName(tocItemName).
setRangeDatatypeUri(XSD.xstring.getURI()).
setValidators(getCompilationNameValidators(vreq)));
String tocLevelName = tocLevel + "Name";
config.addField(new FieldVTwo().
setName(tocLevelName).
setRangeDatatypeUri(XSD.xstring.getURI()).
setValidators(getCompilationNameValidators(vreq)));
String excerpt = "excerpt" + itemN;
config.addField(new FieldVTwo().
setName(excerpt).
setRangeDatatypeUri(XSD.xstring.getURI()).
setValidators(getCompilationNameValidators(vreq)));
}
config.setUrisOnform(getUrisOnForm());
config.setLiteralsOnForm( getLiteralsOnForm());
setUrisAndLiteralsInScope(config);
//No SPARQL queries for existing since this is only used to create new, never for edit
config.addField(new FieldVTwo().
setName("newCompilationLabel").
setRangeDatatypeUri(XSD.xstring.getURI()).
setValidators(getCompilationNameValidators(vreq)));
addFormSpecificData(config, vreq);
config.addValidator(new AntiXssValidation());
//This combines the first and last name into the rdfs:label
// currently being done via javascript in the template. May use this again
// when/if updated to ISF ontology. tlw72
// config.addModelChangePreprocessor(new FoafNameToRdfsLabelPreprocessor());
String formUrl = EditConfigurationUtils.getFormUrlWithoutContext(vreq);
config.setFormUrl(formUrl);
//Note, the spaces are important - they were added by ProcessRdfFormController earlier
//as a means of ensuring the substitution worked correctly - as the regex expects spaces
config.setEntityToReturnTo(" ?newCompilation ");
prepare(vreq, config);
return config;
}
private List<String> getUrisOnForm() {
List<String> uris = list();
for (int itemN = 1; itemN <= excerptsCounter; itemN++) {
String excerpt = "excerpt" + itemN;
uris.add(excerpt);
}
return uris;
}
private List<String> getLiteralsOnForm() {
List<String> literals = list( "newCompilationLabel");
for (int itemN = 1; itemN <= excerptsCounter; itemN++) {
String tocItemName = "tocItem" + itemN + "Name";
String tocLevelName = "tocLevel" + itemN + "Name";
literals.add(tocItemName);
literals.add(tocLevelName);
literals.add("rawQueryString");
literals.add("queryBuilderRules");
}
return literals;
}
private String getAssociatedProfile(VitroRequest vreq) {
String associatedProfile;
IdentifierBundle ids = RequestIdentifiers.getIdBundleForRequest(vreq);
Collection<String> individualURIs = HasAssociatedIndividual.getIndividualUris(ids);
Iterator<String> uriIterator = individualURIs.iterator();
if (uriIterator.hasNext()) {
associatedProfile = uriIterator.next();
} else {
associatedProfile = "";
}
return associatedProfile;
}
private List<String> generateN3Required(VitroRequest vreq) {
StringBuilder n3Req = new StringBuilder();
n3Req.append("@prefix ts: <https://litvinovg.pro/text_structures#> .\n");
n3Req.append("?newCompilation <" + VitroVocabulary.RDF_TYPE + "> <" + getTypeOfNew(vreq) + "> .\n");
n3Req.append("?newCompilation <https://litvinovg.pro/text_structures#modificationTime> " + getModificationTime() + " .\n");
n3Req.append("?newCompilation ts:rawQueryString ?rawQueryString .\n");
n3Req.append("?newCompilation ts:queryBuilderRules ?queryBuilderRules .\n");
n3Req.append("?newCompilation <" + RDFS.label.getURI() + "> ?newCompilationLabel .\n");
n3Req.append("?newCompilation ts:hasTOC ?newCompilationTOC .\n");
n3Req.append("?newCompilationTOC <" + VitroVocabulary.RDF_TYPE + "> ts:TOC .\n");
n3Req.append("?newCompilationTOC <" + RDFS.label.getURI() + "> ?newCompilationLabel .\n");
if (!associatedProfile.isEmpty()) {
n3Req.append("<" + associatedProfile + "> ts:compilatorOf ?newCompilation .\n");
}
//n3Req.append();
for (int itemN = 1; itemN <= excerptsCounter; itemN++) {
String tocItemVar = "?tocItem" + itemN ;
String tocItemNameVar = tocItemVar + "Name" ;
String tocLevelVar = "?tocLevel" + itemN ;
String tocLevelVarName = tocLevelVar + "Name" ;
String excerptVar = "?excerpt" + itemN ;
n3Req.append("?newCompilationTOC ts:hasTOCItem " + tocItemVar + " .\n");
n3Req.append(tocItemVar + " <" + VitroVocabulary.RDF_TYPE + "> ts:TOCItem .\n");
n3Req.append(tocItemVar + " <" + RDFS.label.getURI() + "> " + tocItemNameVar + " .\n");
n3Req.append(tocItemVar + " ts:itemNumber " + itemN + " .\n");
n3Req.append(tocItemVar + " ts:pointsTo " + tocLevelVar + " .\n");
n3Req.append(tocLevelVar + " <" + VitroVocabulary.RDF_TYPE + "> ts:TOCLevel .\n");
n3Req.append(tocLevelVar + " <" + RDFS.label.getURI() + "> " + tocLevelVarName + " .\n");
n3Req.append(tocLevelVar + " ts:hasText " + excerptVar + ".\n");
}
return list(n3Req.toString());
}
private List<String> generateN3Optional() {
List<String> n3OptList = list();
StringBuilder n3Opt = new StringBuilder();
n3Opt.append("@prefix ts: <https://litvinovg.pro/text_structures#> .\n");
n3Opt.append("?newCompilation ts:rawQueryString ?rawQueryString .\n");
n3Opt.append("?newCompilation ts:queryBuilderRules ?queryBuilderRules .\n");
n3OptList.add(n3Opt.toString());
return n3OptList;
}
private String getModificationTime() {
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sd.setTimeZone(TimeZone.getTimeZone("GMT"));
Date currentTime = Calendar.getInstance().getTime();
String todayAsString = "\"" + sd.format(currentTime) + "\"^^<http://www.w3.org/2001/XMLSchema#dateTime>";
return todayAsString;
}
private static Integer parseCounter(VitroRequest vreq) {
String text = vreq.getParameter("excerptsCount");
if (text == null ) {
return 0;
}
try {
return Integer.parseInt(text);
} catch (NumberFormatException e) {
return 0;
}
}
private List<String> getCompilationNameValidators(VitroRequest vreq) {
List<String> validators = new ArrayList<String>();
if (isCompilationType(vreq)) {
validators.add("nonempty");
}
return validators;
}
//Get parameter from HTTP request for type of new individual
private String getTypeOfNew(VitroRequest vreq) {
String typeUri = vreq.getParameter("typeOfNew");
if( typeUri == null || typeUri.trim().isEmpty() )
return getCompilationClassURI();
else
return typeUri;
}
//Form specific data
public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) {
HashMap<String, Object> formSpecificData = new HashMap<String, Object>();
formSpecificData.put("typeName", getTypeName(vreq));
//Put in whether or not person type
if(isCompilationType(vreq)) {
//Doing this b/c unsure how freemarker will handle boolean value from JAVA
formSpecificData.put("isCompilationType", "true");
} else {
formSpecificData.put("isCompilationType", "false");
}
formSpecificData.put("excerptsCounter", excerptsCounter);
editConfiguration.setFormSpecificData(formSpecificData);
}
private String getTypeName(VitroRequest vreq) {
String typeOfNew = getTypeOfNew(vreq);
VClass type = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(typeOfNew);
return type.getName();
}
public String getCompilationClassURI() {
return "https://litvinovg.pro/text_structures#compilation";
}
public boolean isCompilationType(VitroRequest vreq) {
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
Boolean isCompilationType = Boolean.FALSE;
String foafPersonType = getCompilationClassURI();
String typeOfNew = getTypeOfNew(vreq);
List<String> superTypes = wdf.getVClassDao().getAllSuperClassURIs(typeOfNew);
//add the actual type as well so we can add that for the list to be checked
superTypes.add(typeOfNew);
if( superTypes != null ){
for( String typeUri : superTypes){
if( foafPersonType.equals(typeUri)) {
isCompilationType = Boolean.TRUE;
break;
}
}
}
return isCompilationType;
}
private void setUrisAndLiteralsInScope(EditConfigurationVTwo editConfiguration) {
HashMap<String, List<String>> urisInScope = new HashMap<String, List<String>>();
//note that at this point the subject, predicate, and object var parameters have already been processed
urisInScope.put(editConfiguration.getVarNameForSubject(),
Arrays.asList(new String[]{editConfiguration.getSubjectUri()}));
urisInScope.put(editConfiguration.getVarNameForPredicate(),
Arrays.asList(new String[]{editConfiguration.getPredicateUri()}));
editConfiguration.setUrisInScope(urisInScope);
//Uris in scope include subject, predicate, and object var
editConfiguration.setLiteralsInScope(new HashMap<String, List<Literal>>());
}
private String N3_PREFIX = "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n";
}

View file

@ -0,0 +1,127 @@
package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jena.iri.IRI;
import org.apache.jena.iri.IRIFactory;
import org.apache.jena.query.QuerySolution;
import org.apache.jena.vocabulary.RDFS;
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ConstantFieldOptions;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer;
public class GeneratorUtil {
private static final Log log = LogFactory.getLog(GeneratorUtil.class);
/**
* Build a field options list of resource URIs paired with their labels as
* retrieved from the supplied RDFService.
*
* @param rdfService from which to retrieve labels: this should typically
* be a LanguageFilteringRDFService.
*
* @param webappDaoFactory may be null. If non-null, labels for classes will be
* returned from here first before consulting
* rdfService.
*
* @param headerValue optional value for first value/label pair in the
* options list before appending the URIs with their
* labels. May be null. Example: empty string
*
* @param headerLabel optional label for first value/label pair in the
* options list before appending the URIs with their
* labels. May be null. Example: "Select type"
*
* @param resourceURIs variable list of resource URI strings
*
* @return empty ConstantFieldOptions list if resourceURIs is null or empty or
* if rdfService is null
* @throws RDFServiceException from the supplied rdfService
* @throws Exception from ConstantFieldOptions constructor
*/
public static ConstantFieldOptions buildResourceAndLabelFieldOptions(
RDFService rdfService, WebappDaoFactory webappDaoFactory, String headerValue,
String headerLabel, String ... resourceURIs) throws Exception {
if(resourceURIs == null || resourceURIs.length == 0 || rdfService == null) {
return new ConstantFieldOptions();
}
List<String> options = new ArrayList<String>();
if(headerValue != null && headerLabel != null) {
options.add(headerValue);
options.add(headerLabel);
}
IRIFactory iriFactory = IRIFactory.iriImplementation();
for(String resourceURI : resourceURIs) {
IRI iri = iriFactory.create(resourceURI);
if(iri.hasViolation(false)) {
log.warn("Not adding invalid URI " + resourceURI
+ " to field options list");
} else {
String label = getLabel(iri, rdfService, webappDaoFactory);
if(!StringUtils.isEmpty(label)) {
options.add(iri.toString());
options.add(label);
}
}
}
return new ConstantFieldOptions(options.toArray(
new String[options.size()]));
}
/**
* Retrieve label for iri from webappDaoFactory if available and iri is
* for a VClass, otherwise retrieve lowest-sorting rdfs:label for iri from
* rdfService
* @param iri may not be null
* @param rdfService may not be null
*/
private static String getLabel(IRI iri, RDFService rdfService,
WebappDaoFactory webappDaoFactory) throws RDFServiceException {
// Try the WebappDaoFactory for class labels that exist only in
// "everytime" and do not show up in the RDFService.
if(webappDaoFactory != null) {
VClass vclass = webappDaoFactory.getVClassDao().getVClassByURI(
iri.toString());
if(vclass != null) {
return vclass.getLabel();
}
}
StringBuilder select = new StringBuilder("SELECT ?label WHERE { \n");
select.append(" <" + iri + "> <" + RDFS.label.getURI() + "> ?label \n");
select.append("} ORDER BY ?label");
LabelConsumer labelConsumer = new LabelConsumer();
rdfService.sparqlSelectQuery(select.toString(), labelConsumer);
return labelConsumer.getLabel();
}
private static class LabelConsumer extends ResultSetConsumer {
private String label;
@Override
protected void processQuerySolution(QuerySolution qsoln) {
if(label != null) {
return;
// keep only the first value returned in the result set
}
if(qsoln.contains("label") && qsoln.get("label").isLiteral()) {
label = qsoln.getLiteral("label").getLexicalForm();
}
}
public String getLabel() {
return label;
}
}
}

View file

@ -19,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
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;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class GrantHasContributorGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{ public class GrantHasContributorGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{
@ -92,7 +93,7 @@ public class GrantHasContributorGenerator extends VivoBaseGenerator implements
//Add validator //Add validator
conf.addValidator(new AntiXssValidation()); conf.addValidator(new AntiXssValidation());
conf.addValidator(new FirstAndLastNameValidator("existingPerson")); conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq)));
//Adding additional data, specifically edit mode //Adding additional data, specifically edit mode
addFormSpecificData(conf, vreq); addFormSpecificData(conf, vreq);

View file

@ -15,6 +15,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpSession; 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.FoafNameToRdfsLabelPreprocessor;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.ManageLabelsForPersonPreprocessor; 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.i18n.selection.SelectedLocale;
import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringUtils;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.DataPropertyStatementTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.DataPropertyStatementTemplateModel;
/** /**
@ -246,12 +248,12 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
private void addFormSpecificData(EditConfigurationVTwo config, private void addFormSpecificData(EditConfigurationVTwo config,
VitroRequest vreq) { VitroRequest vreq) {
//Get all language codes/labels in the system, and this list is sorted by language name ArrayList<Literal> existingLabels = this.getExistingLabels(config.getSubjectUri(), vreq);
List<HashMap<String, String>> locales = this.getLocales(vreq); //Get language codes/labels for existing labels, and this list is sorted by language name
List<HashMap<String, String>> 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 //Get code to label hashmap - we use this to get the language name for the language code returned in the rdf literal
HashMap<String, String> localeCodeToNameMap = this.getFullCodeToLanguageNameMap(locales); HashMap<String, String> localeCodeToNameMap = this.getFullCodeToLanguageNameMap(locales);
//the labels already added by the user //the labels already added by the user
ArrayList<Literal> existingLabels = this.getExistingLabels(config.getSubjectUri(), vreq);
int numberExistingLabels = existingLabels.size(); int numberExistingLabels = existingLabels.size();
//existing labels keyed by language name and each of the list of labels is sorted by language name //existing labels keyed by language name and each of the list of labels is sorted by language name
HashMap<String, List<LabelInformation>> existingLabelsByLanguageName = this.getLabelsSortedByLanguageName(existingLabels, localeCodeToNameMap, config, vreq); HashMap<String, List<LabelInformation>> existingLabelsByLanguageName = this.getLabelsSortedByLanguageName(existingLabels, localeCodeToNameMap, config, vreq);
@ -267,6 +269,19 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
config.addFormSpecificData("selectLocale",availableLocalesForAdd); config.addFormSpecificData("selectLocale",availableLocalesForAdd);
config.addFormSpecificData("displayRemoveLink", (numberExistingLabels > 1)); config.addFormSpecificData("displayRemoveLink", (numberExistingLabels > 1));
// get current selected locale
String rangeLang = vreq.getLocale().getLanguage();
if (!vreq.getLocale().getCountry().isEmpty()) {
rangeLang += "-" + vreq.getLocale().getCountry();
}
// check if locale already has an entry (label)
boolean localeEntryExisting = true;
for (HashMap<String, String> tmp : availableLocalesForAdd) {
if (tmp.get("code").equals(rangeLang)) localeEntryExisting = false;
}
config.addFormSpecificData("localeEntryExisting", localeEntryExisting);
config.addFormSpecificData("currentSelectedLocale", rangeLang);
//How do we edit? Will need to see //How do we edit? Will need to see
config.addFormSpecificData("deleteWebpageUrl", "/edit/primitiveDelete"); config.addFormSpecificData("deleteWebpageUrl", "/edit/primitiveDelete");
@ -426,21 +441,20 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
ArrayList<Literal> labels = new ArrayList<Literal>(); ArrayList<Literal> labels = new ArrayList<Literal>();
try { try {
//We want to get the labels for all the languages, not just the display language // No longer retrieving language-neutral results here, so that
ResultSet results = QueryUtils.getLanguageNeutralQueryResults(queryStr, vreq); // 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()) { while (results.hasNext()) {
QuerySolution soln = results.nextSolution(); QuerySolution soln = results.nextSolution();
Literal nodeLiteral = soln.get("label").asLiteral(); Literal nodeLiteral = soln.get("label").asLiteral();
labels.add(nodeLiteral); labels.add(nodeLiteral);
} }
} catch (Exception e) { } catch (Exception e) {
log.error(e, e); log.error(e, e);
} }
return labels; return labels;
} }
//Putting this into a method allows overriding it in subclasses //Putting this into a method allows overriding it in subclasses
@ -454,30 +468,32 @@ public class ManageLabelsForPersonGenerator extends BaseEditConfigurationGenerat
return template; return template;
} }
//get locales present in list of literals
public List<HashMap<String, String>> getLocales(VitroRequest vreq,
//get locales List<Literal> existingLiterals) {
public List<HashMap<String, String>> getLocales(VitroRequest vreq) { Set<Locale> locales = new HashSet<Locale>();
List<Locale> selectables = SelectedLocale.getSelectableLocales(vreq); for(Literal literal : existingLiterals) {
if (selectables.isEmpty()) { String language = literal.getLanguage();
if(!StringUtils.isEmpty(language)) {
locales.add(LanguageFilteringUtils.languageToLocale(language));
}
}
if (locales.isEmpty()) {
return Collections.emptyList(); return Collections.emptyList();
} }
List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
Locale currentLocale = SelectedLocale.getCurrentLocale(vreq); Locale currentLocale = SelectedLocale.getCurrentLocale(vreq);
for (Locale locale : selectables) { for (Locale locale : locales) {
try { try {
list.add(buildLocaleMap(locale, currentLocale)); list.add(buildLocaleMap(locale, currentLocale));
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
log.warn("Can't show the Locale selector for '" + locale log.warn("Can't show locale '" + locale + "': " + e);
+ "': " + e);
} }
} }
return list; return list;
} }
public HashMap<String, String> getFullCodeToLanguageNameMap(List<HashMap<String, String>> localesList) { public HashMap<String, String> getFullCodeToLanguageNameMap(List<HashMap<String, String>> localesList) {
HashMap<String, String> codeToLanguageMap = new HashMap<String, String>(); HashMap<String, String> codeToLanguageMap = new HashMap<String, String>();
for(Map<String, String> locale: localesList) { for(Map<String, String> locale: localesList) {

View file

@ -3,20 +3,20 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.jena.query.ParameterizedSparqlString;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QuerySolution; import org.apache.jena.query.QuerySolution;
import org.apache.jena.query.ResultSet; import org.apache.jena.query.ResultSet;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.RDFNode;
import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.Individual;
@ -26,6 +26,8 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMa
import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils; import edu.cornell.mannlib.vitro.webapp.dao.jena.QueryUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.i18n.selection.SelectedLocale;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
/** /**
* This is an odd controller that is just drawing a page with links on it. * This is an odd controller that is just drawing a page with links on it.
@ -153,16 +155,36 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG
+ "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n" + "PREFIX vcard: <http://www.w3.org/2006/vcard/ns#> \n"
+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n" + "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \n"
+ "PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> \n" + "PREFIX vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> \n"
+ "SELECT DISTINCT ?vcard ?link ?url ?rank ?typeLabel (group_concat(distinct ?linkLabel;separator=\"/\") as ?label) WHERE { \n" + "SELECT DISTINCT ?vcard ?link ?url (MIN(?rank_) AS ?rank) \n"
+ "(MIN(?typeLabel_) AS ?typeLabel) \n"
+ "(group_concat(distinct ?linkLabel;separator=\"/\") as ?label) WHERE { \n"
+ " ?subject <http://purl.obolibrary.org/obo/ARG_2000028> ?vcard . \n" + " ?subject <http://purl.obolibrary.org/obo/ARG_2000028> ?vcard . \n"
+ " ?vcard vcard:hasURL ?link . \n" + " ?vcard vcard:hasURL ?link . \n"
+ " ?link a vcard:URL \n" + " ?link a vcard:URL \n"
+ " OPTIONAL { ?link vcard:url ?url } \n" + " OPTIONAL { ?link vcard:url ?url } \n"
+ " OPTIONAL { ?link rdfs:label ?linkLabel } \n" + " OPTIONAL { ?link rdfs:label ?linkLabel } \n"
+ " OPTIONAL { ?link core:rank ?rank } \n" + " OPTIONAL { ?link core:rank ?rank_ } \n"
+ " OPTIONAL { ?link vitro:mostSpecificType ?type } \n" + " OPTIONAL { ?link vitro:mostSpecificType ?type } \n"
+ " OPTIONAL { ?type rdfs:label ?typeLabel } \n" // UQAM-Linguistic-Management Add linguistic control on label
+ "} GROUP BY ?rank ?vcard ?link ?url ?typeLabel \n" // Try full locale
+ " OPTIONAL { ?type rdfs:label ?typeLabelPrimary . \n"
+ " FILTER (LANG(?typeLabelPrimary) = ?locale) \n"
+ " } \n"
// Try language only
+ " OPTIONAL { ?type rdfs:label ?typeLabelSecondary . \n"
+ " FILTER (LANG(?typeLabelSecondary) = ?language) \n"
+ " } \n"
// Try the same language in another other locale
+ " OPTIONAL { ?type rdfs:label ?typeLabelTertiary . \n"
+ " FILTER (STRBEFORE(STR(LANG(?typeLabelTertiary)), \"-\") = ?language) \n"
+ " } \n"
// Try any other available label
+ " OPTIONAL { ?type rdfs:label ?typeLabelFallback . \n"
+ " FILTER (LANG(?typeLabelFallback) != ?locale \n"
+ " && LANG(?typeLabelFallback) != ?language) \n"
+ " } \n"
+ " BIND(COALESCE(?typeLabelPrimary, ?typeLabelSecondary, ?typeLabelTertiary, ?typeLabelFallback) AS ?typeLabel_) \n"
+ "} GROUP BY ?vcard ?link ?url \n"
+ " ORDER BY ?rank"; + " ORDER BY ?rank";
@ -175,8 +197,10 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG
Model constructedModel = ModelFactory.createDefaultModel(); Model constructedModel = ModelFactory.createDefaultModel();
rdfService.sparqlConstructQuery(constructStr, constructedModel); rdfService.sparqlConstructQuery(constructStr, constructedModel);
/*
String queryStr = QueryUtils.subUriForQueryVar(this.getQuery(), "subject", subjectUri); * UQAM-Linguistic-Management Adjust the getQuery signature for managing the linguistic context
*/
String queryStr = QueryUtils.subUriForQueryVar(this.getQuery(vreq), "subject", subjectUri);
log.debug("Query string is: " + queryStr); log.debug("Query string is: " + queryStr);
QueryExecution qe = QueryExecutionFactory.create(queryStr, constructedModel); QueryExecution qe = QueryExecutionFactory.create(queryStr, constructedModel);
@ -205,8 +229,16 @@ public class ManageWebpagesForIndividualGenerator extends BaseEditConfigurationG
return AddEditWebpageFormGenerator.class.getName(); return AddEditWebpageFormGenerator.class.getName();
} }
protected String getQuery() { protected String getQuery(VitroRequest vreq) {
return WEBPAGE_QUERY; /*
* UQAM-Linguistic-Management Adjust the query to the linguistic context
*/
Locale locale = SelectedLocale.getCurrentLocale(vreq);
ParameterizedSparqlString queryPstr = new ParameterizedSparqlString(
WEBPAGE_QUERY);
queryPstr.setLiteral("locale", locale.toString().replace("_", "-"));
queryPstr.setLiteral("language", locale.getLanguage());
return queryPstr.toString();
} }
protected String getTemplate() { protected String getTemplate() {

View file

@ -22,6 +22,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsVi
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
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;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class OrganizationForTrainingGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{ public class OrganizationForTrainingGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{
@ -166,7 +167,7 @@ public class OrganizationForTrainingGenerator extends VivoBaseGenerator impleme
//Add validator //Add validator
conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField"));
conf.addValidator(new AntiXssValidation()); conf.addValidator(new AntiXssValidation());
conf.addValidator(new FirstAndLastNameValidator("existingPerson")); conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq)));
//Adding additional data, specifically edit mode //Adding additional data, specifically edit mode
addFormSpecificData(conf, vreq); addFormSpecificData(conf, vreq);

View file

@ -17,6 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisio
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesWithParent; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClassesWithParent;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class OrganizationHasPositionHistoryGenerator extends VivoBaseGenerator public class OrganizationHasPositionHistoryGenerator extends VivoBaseGenerator
implements EditConfigurationGenerator { implements EditConfigurationGenerator {
@ -256,7 +257,7 @@ public class OrganizationHasPositionHistoryGenerator extends VivoBaseGenerator
conf.addField(endField.setEditElement(new DateTimeWithPrecisionVTwo( conf.addField(endField.setEditElement(new DateTimeWithPrecisionVTwo(
endField, URI_PRECISION_YEAR, URI_PRECISION_NONE))); endField, URI_PRECISION_YEAR, URI_PRECISION_NONE)));
conf.addValidator(new FirstAndLastNameValidator("existingPerson")); conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq)));
conf.addValidator(new AntiXssValidation()); conf.addValidator(new AntiXssValidation());
conf.addValidator(new DateTimeIntervalValidationVTwo("startField", conf.addValidator(new DateTimeIntervalValidationVTwo("startField",
"endField")); "endField"));

View file

@ -20,6 +20,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClasses
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class PersonHasAdviseeRelationshipGenerator extends VivoBaseGenerator implements public class PersonHasAdviseeRelationshipGenerator extends VivoBaseGenerator implements
EditConfigurationGenerator { EditConfigurationGenerator {
@ -184,7 +185,7 @@ public class PersonHasAdviseeRelationshipGenerator extends VivoBaseGenerator imp
conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField"));
conf.addValidator(new AntiXssValidation()); conf.addValidator(new AntiXssValidation());
conf.addValidator(new FirstAndLastNameValidator("existingAdvisor")); conf.addValidator(new FirstAndLastNameValidator("existingAdvisor", I18n.bundle(vreq)));
addFormSpecificData(conf, vreq); addFormSpecificData(conf, vreq);
prepare(vreq, conf); prepare(vreq, conf);

View file

@ -20,6 +20,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.ChildVClasses
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.IndividualsViaVClassOptions;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class PersonHasAdvisorRelationshipGenerator extends VivoBaseGenerator implements public class PersonHasAdvisorRelationshipGenerator extends VivoBaseGenerator implements
EditConfigurationGenerator { EditConfigurationGenerator {
@ -184,7 +185,7 @@ public class PersonHasAdvisorRelationshipGenerator extends VivoBaseGenerator imp
conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField")); conf.addValidator(new DateTimeIntervalValidationVTwo("startField","endField"));
conf.addValidator(new AntiXssValidation()); conf.addValidator(new AntiXssValidation());
conf.addValidator(new FirstAndLastNameValidator("existingAdvisee")); conf.addValidator(new FirstAndLastNameValidator("existingAdvisee", I18n.bundle(vreq)));
addFormSpecificData(conf, vreq); addFormSpecificData(conf, vreq);
prepare(vreq, conf); prepare(vreq, conf);

View file

@ -17,6 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.fields.FieldVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.validators.AntiXssValidation;
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;
import edu.cornell.mannlib.vitro.webapp.i18n.I18n;
public class ProjectHasParticipantGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{ public class ProjectHasParticipantGenerator extends VivoBaseGenerator implements EditConfigurationGenerator{
@ -92,7 +93,7 @@ public class ProjectHasParticipantGenerator extends VivoBaseGenerator implement
//Add validator //Add validator
conf.addValidator(new AntiXssValidation()); conf.addValidator(new AntiXssValidation());
conf.addValidator(new FirstAndLastNameValidator("existingPerson")); conf.addValidator(new FirstAndLastNameValidator("existingPerson", I18n.bundle(vreq)));
//Adding additional data, specifically edit mode //Adding additional data, specifically edit mode
addFormSpecificData(conf, vreq); addFormSpecificData(conf, vreq);

View file

@ -0,0 +1,36 @@
package edu.cornell.mannlib.vitro.webapp.utilities;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.ResourceFactory;
import org.apache.jena.rdf.model.Statement;
import org.apache.jena.rdf.model.StmtIterator;
import org.apache.jena.vocabulary.RDFS;
public class Describe {
private static final Log log = LogFactory.getLog(Describe.class.getName());
public static void main(String[] args) {
OntModel model = ModelFactory.createOntologyModel();
model.read("C:\\VIVO-Trad-ecosysteme\\vivo\\home\\rdf\\applicationMetadata\\firsttime\\classgroups_fr_CA.rdf") ;
model.read("C:\\VIVO-Trad-ecosysteme\\vivo\\home\\rdf\\applicationMetadata\\firsttime\\classgroups.rdf") ;
Describe.showVitroClassGroupequipmentLabels(model,"test");
System.out.println("Done!");
}
private static void showVitroClassGroupequipmentLabels(OntModel model, String message) {
String uri = "http://vivoweb.org/ontology#vitroClassGroupequipment";
List<Statement> stmts = model.listStatements(ResourceFactory.createResource(uri), RDFS.label, (RDFNode)null).toList();
for (Iterator iterator = stmts.iterator(); iterator.hasNext();) {
Statement statement = (Statement) iterator.next();
log.debug("\t\t"+message + " " +statement);
}
}
}

View file

@ -12,6 +12,7 @@ import org.apache.commons.logging.LogFactory;
import edu.cornell.mannlib.semservices.bo.Concept; import edu.cornell.mannlib.semservices.bo.Concept;
import edu.cornell.mannlib.semservices.service.ExternalConceptService; import edu.cornell.mannlib.semservices.service.ExternalConceptService;
import edu.cornell.mannlib.semservices.service.impl.UMLSService;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
/** /**
* Utilities for search * Utilities for search
@ -38,7 +39,9 @@ public class ConceptSearchServiceUtils {
//URL to label //URL to label
public static HashMap<String, VocabSourceDescription> getVocabSources() { public static HashMap<String, VocabSourceDescription> getVocabSources() {
HashMap<String, VocabSourceDescription> map = new HashMap<String, VocabSourceDescription>(); HashMap<String, VocabSourceDescription> map = new HashMap<String, VocabSourceDescription>();
if(UMLSService.configurationFileExists()) {
map.put(UMLSVocabSource, new VocabSourceDescription("UMLS", UMLSVocabSource, "http://www.nlm.nih.gov/research/umls/", "Unified Medical Language System")); 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 //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(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")); 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 //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(UMLSVocabSource, "edu.cornell.mannlib.semservices.service.impl.UMLSService"); map.put(UMLSVocabSource, "edu.cornell.mannlib.semservices.service.impl.UMLSService");
map.put(AgrovocVocabSource, "edu.cornell.mannlib.semservices.service.impl.AgrovocService"); map.put(AgrovocVocabSource, "edu.cornell.mannlib.semservices.service.impl.AgrovocService");
map.put(GemetVocabSource, "edu.cornell.mannlib.semservices.service.impl.GemetService"); map.put(GemetVocabSource, "edu.cornell.mannlib.semservices.service.impl.GemetService");

View file

@ -54,10 +54,16 @@ public class CapabilityMapRequestHandler implements VisualizationRequestHandler
@Override @Override
public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log, Dataset dataSource) throws MalformedQueryParametersException, JsonProcessingException { public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log, Dataset dataSource) throws MalformedQueryParametersException, JsonProcessingException {
ConceptLabelMap conceptLabelMap = VisualizationCaches.conceptToLabel.getNoWait(vitroRequest.getRDFService()); RDFService rdfService = vitroRequest.getRDFService();
ConceptPeopleMap conceptPeopleMap = VisualizationCaches.conceptToPeopleMap.getNoWait(vitroRequest.getRDFService()); rdfService.setVitroRequest(vitroRequest);
OrganizationPeopleMap organizationPeopleMap = VisualizationCaches.organisationToPeopleMap.getNoWait(vitroRequest.getRDFService()); // VisualizationCaches.rebuildAll(rdfService);
Map<String, String> organizationLabels = VisualizationCaches.organizationLabels.getNoWait(vitroRequest.getRDFService()); // VisualizationCaches.conceptToLabel.build(rdfService);
// ConceptLabelMap conceptLabelMap = VisualizationCaches.conceptToLabel.getNoWait(rdfService);
// UQAM-Bug-Correction Refresh all memory models with appropriate liguistic labels
ConceptLabelMap conceptLabelMap = VisualizationCaches.conceptToLabel.get(rdfService, true, true);
ConceptPeopleMap conceptPeopleMap = VisualizationCaches.conceptToPeopleMap.getNoWait(rdfService);
OrganizationPeopleMap organizationPeopleMap = VisualizationCaches.organisationToPeopleMap.getNoWait(rdfService);
Map<String, String> organizationLabels = VisualizationCaches.organizationLabels.getNoWait(rdfService);
String data = vitroRequest.getParameter("data"); String data = vitroRequest.getParameter("data");
if (!StringUtils.isEmpty(data)) { if (!StringUtils.isEmpty(data)) {

View file

@ -2,8 +2,10 @@
package edu.cornell.mannlib.vitro.webapp.visualization.utilities; package edu.cornell.mannlib.vitro.webapp.visualization.utilities;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread; import edu.cornell.mannlib.vitro.webapp.utils.threads.VitroBackgroundThread;
import edu.cornell.mannlib.vitro.webapp.visualization.model.ConceptLabelMap;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -85,7 +87,69 @@ public class CachingRDFServiceExecutor<T> {
if (backgroundTask != null && backgroundTask.isDone()) { if (backgroundTask != null && backgroundTask.isDone()) {
completeBackgroundTask(); completeBackgroundTask();
} }
// If we have cached results
if (cachedResults != null) {
// If the background service exists, and the cache is considered invalid
if (backgroundRDFService != null && resultBuilder.invalidateCache(System.currentTimeMillis() - lastCacheTime)) {
// In most cases, only wait for half a second
long waitFor = 500;
if (backgroundTask == null) {
// Start the background task to refresh the cache
startBackgroundTask(backgroundRDFService);
// As we've just started the background task, allow a wait time of 1 second
waitFor = 1000;
}
// See if we expect it to complete in time, and if so, wait for it
if (allowWaits && isExpectedToCompleteIn(waitFor)) {
completeBackgroundTask(waitFor);
}
}
} else {
// No cached results, so fetch the results using any available RDF service
if (rdfService != null) {
startBackgroundTask(rdfService);
} else if (backgroundRDFService != null) {
startBackgroundTask(backgroundRDFService);
} else {
throw new RuntimeException("Can't execute without an RDF Service");
}
// As there are no cached results, wait for an answer regardless of the RDF service used
completeBackgroundTask();
}
return cachedResults;
}
public synchronized T get(RDFService rdfService, boolean allowWaits, boolean force) {
/*
* UQAM-Bug-Correction
* Forces the regeneration of the result
*/
if (force) {
try {
String backLang = backgroundRDFService.getVitroRequest().getLocale().getLanguage();
String srvLang = rdfService.getVitroRequest().getLocale().getLanguage();
if (!backLang.equals(srvLang)) {
backgroundRDFService.setVitroRequest(rdfService.getVitroRequest());
startBackgroundTask(rdfService);
completeBackgroundTask();
}
} catch (Exception e) {
backgroundRDFService.setVitroRequest(rdfService.getVitroRequest());
startBackgroundTask(rdfService);
completeBackgroundTask();
}
return cachedResults;
}
// First, check if there are results from the previous background task, and update the cache
if (backgroundTask != null && backgroundTask.isDone()) {
completeBackgroundTask();
}
// If we have cached results // If we have cached results
if (cachedResults != null) { if (cachedResults != null) {
// If the background service exists, and the cache is considered invalid // If the background service exists, and the cache is considered invalid

View file

@ -9,6 +9,8 @@ import org.apache.jena.rdf.model.Literal;
import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.Resource;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer; import edu.cornell.mannlib.vitro.webapp.rdfservice.ResultSetConsumer;
import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.QueryConstants;
@ -232,13 +234,37 @@ final public class VisualizationCaches {
new CachingRDFServiceExecutor.RDFServiceCallable<Map<String, String>>(visualizationAffinity) { new CachingRDFServiceExecutor.RDFServiceCallable<Map<String, String>>(visualizationAffinity) {
@Override @Override
protected Map<String, String> callWithService(RDFService rdfService) throws Exception { protected Map<String, String> callWithService(RDFService rdfService) throws Exception {
// get current selected language tag
VitroRequest vreq = rdfService.getVitroRequest();
String langCtx = "en-US"; // set default
String language = "en"; // set fallback language
try {
langCtx = language = vreq.getLocale().getLanguage();
if (!vreq.getLocale().getCountry().isEmpty()) {
langCtx += "-" + vreq.getLocale().getCountry();
}
} catch (Exception e) { }
String query = QueryConstants.getSparqlPrefixQuery() + String query = QueryConstants.getSparqlPrefixQuery() +
"SELECT ?org ?orgLabel\n" + "SELECT ?org (Min(?orgLabel_) AS ?orgLabel) \n" +
"WHERE\n" + "WHERE\n" +
"{\n" + "{\n" +
" ?org a foaf:Organization .\n" + " ?org a foaf:Organization \n" +
" ?org rdfs:label ?orgLabel .\n" + " OPTIONAL { ?org rdfs:label ?orgLabelPrimary . \n" +
"}\n"; " FILTER (LANG(?orgLabelPrimary) = '" + langCtx + "') \n" +
"} \n" +
" OPTIONAL { ?org rdfs:label ?orgLabelSecondary . \n" +
" FILTER (LANG(?orgLabelSecondary) = '" + language + "') \n" +
"} \n" +
" OPTIONAL { ?org rdfs:label ?orgLabelTertiary .\n" +
" FILTER (STRBEFORE(STR(LANG(?orgLabelTertiary)), '-') = '" + language + "') \n" +
"} \n" +
" OPTIONAL { ?org rdfs:label ?orgLabelFallback .\n" +
" FILTER (LANG(?orgLabelFallback) != '" + langCtx + "' \n" +
" && LANG(?orgLabelFallback) != '" + language + "' ) \n" +
"} \n" +
"BIND(COALESCE(?orgLabelPrimary, ?orgLabelSecondary, ?orgLabelTertiary, ?orgLabelFallback) AS ?orgLabel_) \n" +
"} GROUP BY ?org \n";
final Map<String, String> map = new HashMap<>(); final Map<String, String> map = new HashMap<>();
@ -390,6 +416,16 @@ final public class VisualizationCaches {
new CachingRDFServiceExecutor.RDFServiceCallable<ConceptLabelMap>() { new CachingRDFServiceExecutor.RDFServiceCallable<ConceptLabelMap>() {
@Override @Override
protected ConceptLabelMap callWithService(RDFService rdfService) throws Exception { protected ConceptLabelMap callWithService(RDFService rdfService) throws Exception {
VitroRequest vreq = rdfService.getVitroRequest();
String langCtx = "en-US";
// UQAM-Optimization Adjust to linguistic context
try {
langCtx = vreq.getLocale().getLanguage();
if (!vreq.getLocale().getCountry().isEmpty()) {
langCtx += "-" + vreq.getLocale().getCountry();
}
} catch (Exception e) {
}
String query = QueryConstants.getSparqlPrefixQuery() + String query = QueryConstants.getSparqlPrefixQuery() +
"SELECT ?concept ?label\n" + "SELECT ?concept ?label\n" +
"WHERE\n" + "WHERE\n" +
@ -398,13 +434,13 @@ final public class VisualizationCaches {
" ?person core:hasResearchArea ?concept .\n" + " ?person core:hasResearchArea ?concept .\n" +
" ?concept a skos:Concept .\n" + " ?concept a skos:Concept .\n" +
" ?concept rdfs:label ?label .\n" + " ?concept rdfs:label ?label .\n" +
" FILTER (lang(?label) = '" + langCtx+"' ) \n" +
"}\n"; "}\n";
// final Map<String, String> map = new HashMap<>(); // final Map<String, String> map = new HashMap<>();
final ConceptLabelMap map = new ConceptLabelMap(); final ConceptLabelMap map = new ConceptLabelMap();
rdfService.sparqlSelectQuery(query, new ResultSetConsumer() { rdfService.sparqlSelectQuery(query, new ResultSetConsumer() {
@Override
protected void processQuerySolution(QuerySolution qs) { protected void processQuerySolution(QuerySolution qs) {
String conceptURI = qs.getResource("concept").getURI().intern(); String conceptURI = qs.getResource("concept").getURI().intern();
String label = qs.getLiteral("label").getString().intern(); String label = qs.getLiteral("label").getString().intern();

View file

@ -2,29 +2,40 @@
package org.vivoweb.webapp.sitemap; package org.vivoweb.webapp.sitemap;
import org.apache.commons.lang3.StringUtils; import java.io.FileInputStream;
import org.apache.jena.query.QuerySolution; import java.io.IOException;
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; import java.io.InputStream;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import java.util.ArrayList;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import java.util.List;
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 javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet; import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException; import org.apache.commons.io.IOUtils;
import java.io.InputStream; 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"}) @WebServlet(name = "SiteMapServlet", urlPatterns = {"/robots.txt","/sitemap.xml"})
public class SiteMapServlet extends VitroHttpServlet { 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 @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(); String requestURI = request.getRequestURI();
if (requestURI != null) { if (requestURI != null) {
@ -60,7 +71,7 @@ public class SiteMapServlet extends VitroHttpServlet {
"WHERE\n" + "WHERE\n" +
"{\n" + "{\n" +
" ?person a foaf:Person .\n" + " ?person a foaf:Person .\n" +
"}\n"; "} LIMIT " + MAX_URLS + "\n";
final VitroRequest vreq = new VitroRequest(request); final VitroRequest vreq = new VitroRequest(request);
final ServletOutputStream out = response.getOutputStream(); final ServletOutputStream out = response.getOutputStream();
@ -68,14 +79,21 @@ public class SiteMapServlet extends VitroHttpServlet {
out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
out.println("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">"); out.println("<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">");
List<String> personURIs = new ArrayList<String>();
try { try {
vreq.getRDFService().sparqlSelectQuery(query, new ResultSetConsumer() { vreq.getRDFService().sparqlSelectQuery(query, new ResultSetConsumer() {
@Override @Override
protected void processQuerySolution(QuerySolution qs) { protected void processQuerySolution(QuerySolution qs) {
String person = qs.getResource("person").getURI(); personURIs.add(qs.getResource("person").getURI());
}
});
} catch (RDFServiceException rse) {
log.error(rse, rse);
}
for(String person : personURIs) {
String profileUrl = UrlBuilder.getIndividualProfileUrl(person, vreq); String profileUrl = UrlBuilder.getIndividualProfileUrl(person, vreq);
if (!StringUtils.isEmpty(profileUrl)) { if (!StringUtils.isEmpty(profileUrl)) {
try { try {
out.println(" <url>"); out.println(" <url>");
@ -83,12 +101,10 @@ public class SiteMapServlet extends VitroHttpServlet {
out.println(" <changefreq>weekly</changefreq>"); out.println(" <changefreq>weekly</changefreq>");
out.println(" </url>"); out.println(" </url>");
} catch (Exception e) { } catch (Exception e) {
log.error(e, e);
} }
} }
} }
});
} catch (RDFServiceException rse) {
}
out.println("</urlset>"); out.println("</urlset>");
} }
@ -104,7 +120,8 @@ public class SiteMapServlet extends VitroHttpServlet {
if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) { if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme)) {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append(scheme).append("://").append(serverName); 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); builder.append(":").append(serverPort);
} }

View file

@ -7,6 +7,12 @@ import edu.cornell.mannlib.vitro.webapp.i18n.VitroResourceBundle;
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import javax.servlet.ServletContextListener;
/**
* Configures VIVO to look for i18n properties files prefixed with 'vivo_'.
* This listener must be run before any other code that uses resource bundles.
* As this listener does not depend on any others, it should be run at or near
* the top of the list in startup_listeners.txt.
*/
public class i18nSetup implements ServletContextListener { public class i18nSetup implements ServletContextListener {
@Override @Override

36
docker-compose.yml Normal file
View file

@ -0,0 +1,36 @@
version: '3.2'
services:
solr:
image: vivoweb/vivo-solr:latest
environment:
- RESET_CORE=${RESET_CORE}
- VERBOSE=${VERBOSE}
ports:
- 8983:8983
networks:
- vivo
tomcat:
container_name: vivo
hostname: vivo
build:
context: ./
dockerfile: Dockerfile
args:
- VIVO_DIR=/usr/local/vivo/home
- TDB_FILE_MODE=direct
- SOLR_URL=http://solr:8983/solr/vivocore
environment:
- RESET_HOME=${RESET_HOME}
- VERBOSE=${VERBOSE}
ports:
- 8080:8080
volumes:
- ${LOCAL_VIVO_HOME}:/usr/local/vivo/home
networks:
- vivo
networks:
vivo:

View file

@ -7,13 +7,13 @@
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-home</artifactId> <artifactId>vivo-home</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<parent> <parent>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-project</artifactId> <artifactId>vivo-project</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<relativePath>..</relativePath> <relativePath>..</relativePath>
</parent> </parent>

View file

@ -82,10 +82,10 @@
# ---------------------------- # ----------------------------
# #
# Content triples source module: holds data contents # Content triples source module: holds data contents
# The SDB-based implementation is the default option. It reads its parameters # The TDB-based implementation is the default option. It reads its parameters
# from the runtime.properties file, for backward compatibility. # from the runtime.properties file, for backward compatibility.
# #
# Other implementations are based on a local TDB instance, a "standard" SPARQL # Other implementations are based on an SDB instance, a "standard" SPARQL
# endpoint, or a Virtuoso endpoint, with parameters as shown. # endpoint, or a Virtuoso endpoint, with parameters as shown.
# #

View file

@ -39,7 +39,6 @@ Vitro.defaultNamespace = http://vivo.mydomain.edu/individual/
# #
rootUser.emailAddress = vivo_root@mydomain.edu rootUser.emailAddress = vivo_root@mydomain.edu
# #
# Argon2 password hashing parameters for time, memory and parallelism required to # Argon2 password hashing parameters for time, memory and parallelism required to
# compute a hash. # compute a hash.
@ -72,20 +71,23 @@ argon2.time = 1000
# Email parameters which VIVO can use to send mail. If these are left empty, # 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 # the "Contact Us" form will be disabled and users will not be notified of
# changes to their accounts. # changes to their accounts.
# Example:
# email.smtpHost = smtp.mydomain.edu
# email.replyTo = vivoAdmin@mydomain.edu
# #
email.smtpHost = smtp.mydomain.edu # email.smtpHost =
email.replyTo = vivoAdmin@mydomain.edu # email.replyTo =
# #
# URL of Solr context used in local VIVO search. This will usually consist of: # URL of Solr context used in local VIVO search. This will usually consist of:
# scheme + server_name + port + vivo_webapp_name + "solr" # scheme + server_name + port + "solr" + solr_core_name
# In the standard installation, the Solr context will be on the same server as VIVO, # In a standard Solr installation, the Solr service will be available on port
# and in the same Tomcat instance. The path will be the VIVO webapp.name (specified # 8983. The path will be /solr followed by the name used when adding a core
# in build.properties) + "solr" # for VIVO.
# Example: # Example:
# vitro.local.solr.url = http://localhost:8080/vivosolr # vitro.local.solr.url = http://localhost:8983/solr/vivocore
# #
vitro.local.solr.url = http://localhost:8080/vivosolr vitro.local.solr.url = http://localhost:8983/solr/vivocore
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@ -112,6 +114,22 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId
# #
#externalAuth.netIdHeaderName = remote_userID #externalAuth.netIdHeaderName = remote_userID
# -----------------------------------------------------------------------------
# OPTIMIZING LIST VIEW QUERIES
# -----------------------------------------------------------------------------
#
# Include sections between <precise-subquery></precise-subquery>
# 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 # TUNING THE DATABASE CONNECTION POOL
@ -130,7 +148,6 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId
# #
# VitroConnection.DataSource.pool.maxIdle = 10 # VitroConnection.DataSource.pool.maxIdle = 10
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# USING A DIFFERENT DATABASE # USING A DIFFERENT DATABASE
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
@ -202,8 +219,8 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId
# #
# A list of supported languages or Locales that the user may choose to # A list of supported languages or Locales that the user may choose to
# use instead of the one specified by the browser. Selection images must # use instead of the one specified by the browser. The selected language(s)
# be available in the i18n/images directory of the theme. This affects # must exist in the VIVO-languages repository. This affects
# RDF data retrieved from the model, if RDFService.languageFilter is true. # RDF data retrieved from the model, if RDFService.languageFilter is true.
# This also affects the text of pages that have been modified to support # This also affects the text of pages that have been modified to support
# multiple languages. # multiple languages.
@ -217,20 +234,37 @@ selfEditing.idMatchingProperty = http://vivo.mydomain.edu/ns#networkId
# ORCID INTEGRATION # ORCID INTEGRATION
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# The Client ID from your ORCID credentials
# When your application for credentials is accepted, you will receive a Client
# ID to be used in communications with the API. If you apply for sandbox
# credentials first, and then production credentials, you will likely receive
# two different Client IDs.
# orcid.clientId = 0000-0000-0000-000X # orcid.clientId = 0000-0000-0000-000X
# The Client Secret from your ORCID credentials
# When your application for credentials is accepted, you will receive a Client
# Secret to be used in communications with the API. If you apply for sandbox
# credentials first, and then production credentials, you will likely receive
# two different Client Secrets.
# orcid.clientPassword = 00000000-0000-0000-0000-000000000000 # orcid.clientPassword = 00000000-0000-0000-0000-000000000000
# # The base URL for your VIVO application, as seen from outside.
# VIVO will use this to construct a callback URL that the ORCID API can use to
# return control to VIVO. The actual callback URL will be the string you
# provide here with the suffix of /orcid/callback added at the end.
# The orcid.webappBaseUrl must end in a front slash (/) # The orcid.webappBaseUrl must end in a front slash (/)
# if it includes a path past the domain and (if required) port. # if it includes a path past the domain and (if required) port.
# #
# orcid.webappBaseUrl = http://vivo.mydomain.edu/vivo/ # orcid.webappBaseUrl = http://vivo.mydomain.edu/vivo/
# orcid.externalIdCommonName = VIVO Cornell Identifier # orcid.externalIdCommonName = VIVO Cornell Identifier
# 1.2, 2.0 # The version of ORCIDs API protocol that VIVO will expect. Currently, the
# only supported version is 2.0.
# orcid.apiVersion = 2.0 # orcid.apiVersion = 2.0
# release, sandbox # The entry point for ORCID's public API.
# This changes, depending on whether you are using the sandbox API or the
# production API. Value is either release or sandbox.
# orcid.api = sandbox # orcid.api = sandbox
# Specify the type of API access that you have - public or member # Specify the type of API access that you have - public or member
@ -392,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) # If you do not wish to use the claiming interface, set this property to nothing (empty)
createAndLink.providers = doi, pmid createAndLink.providers = doi, pmid
# Triple pattern fragments is a very fast, very simple means for querying a triple store. # Triple Pattern Fragments is a very fast, very simple means for querying a
# 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 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 # tpf.activeFlag = true

View file

@ -1,167 +0,0 @@
@prefix : <http://vitro.mannlib.cornell.edu/ns/vitro/ApplicationSetup#> .
@prefix searchIndex: <java:edu.cornell.mannlib.vitro.webapp.searchindex#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:vivodocumentModifier_excerptsInComplexPublications
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Populate complex publications with excerpts" ;
:hasTargetField "ALLTEXT" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?value
WHERE {
?uri ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?excerpt .
VALUES ?property { ts:works ts:bibliography ts:htmlExcerpt ts:keywords }
?excerpt ?property ?value .
}
""" .
:vivoUriFinder_excerptsInComplexPublications
a searchIndex:indexing.IndexingUriFinder ,
searchIndex:indexing.SelectQueryUriFinder ;
rdfs:label "When excerpts change" ;
:hasSelectQuery """
PREFIX ts: <https://litvinovg.pro/text_structures#>
SELECT ?uri
WHERE {
?uri ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?subject .
}
""" .
:vivoUriFinder_onRubricsAssign
a searchIndex:indexing.IndexingUriFinder ,
searchIndex:indexing.SelectQueryUriFinder ;
rdfs:label "When rubric was assigned" ;
:hasSelectQuery """
PREFIX ts: <https://litvinovg.pro/text_structures#>
SELECT ?uri
WHERE {
?subject a ts:textExcerpt .
VALUES ?uri { ?subject }
}
""" .
:vivodocumentModifier_PopulateTextWithHTMLContentsOfExcerpts
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Html text to text field" ;
:hasTargetField "text" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?htmlExcerpt
WHERE {
{
?uri rdf:type ts:textExcerpt .
?uri ts:htmlExcerpt ?htmlExcerpt .
}
UNION
{
?uri rdf:type ts:complexPublication .
?uri ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?excerpt .
?excerpt ts:htmlExcerpt ?htmlExcerpt .
}
}
""" .
:vivodocumentModifier_rubrics
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Add rubrics in rubrics field" ;
:hasTargetField "rubrics" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?rubric
WHERE {
{
?uri rdf:type ts:textExcerpt .
?uri pr:belongsTo ?assignedRubric .
?assignedRubric (pr:hasParent)* ?rubric .
}
UNION
{
?uri rdf:type ts:complexPublication .
?uri ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?excerpt .
?excerpt pr:belongsTo ?assignedRubric .
?assignedRubric (pr:hasParent)* ?rubric .
}
}
""" .
:vivodocumentModifier_titles
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Add titles to special field" ;
:hasTargetField "titles" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?title
WHERE {
?uri rdfs:label ?title .
}
""" .
:vivodocumentModifier_keywordsElenph
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Keywords for articles and excerpts" ;
:hasTargetField "keywords" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?keywords
WHERE {
{
?uri rdf:type ts:elenphArticle .
?uri ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?elenphExcerpt .
?elenphExcerpt ts:keywords ?keywords .
}
UNION
{
?uri rdf:type ts:elenphExcerpt .
?uri ts:keywords ?keywords .
}
}
""" .
:vivodocumentModifier_bibliographyElenph
a <java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.SelectQueryDocumentModifier> ,
<java:edu.cornell.mannlib.vitro.webapp.searchindex.documentBuilding.DocumentModifier> ;
rdfs:label "Bibliography for articles and excerpts" ;
:hasTargetField "bibliography" ;
:hasSelectQuery """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?bibliography
WHERE {
{
?uri rdf:type ts:elenphArticle .
?uri ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)+/ts:hasText ?elenphExcerpt .
?elenphExcerpt ts:bibliography ?bibliography .
}
UNION
{
?uri rdf:type ts:elenphExcerpt .
?uri ts:bibliography ?bibliography .
}
}
""" .

View file

@ -1,144 +0,0 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ts_: <https://litvinovg.pro/text_structures#> .
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
<https://litvinovg.pro/text_structures#compilation> display:hasDataGetter display:getCompilationExcerptsContentDataGetter .
<https://litvinovg.pro/text_structures#compilation> display:hasDataGetter display:getCompilationExcerptPathsDataGetter .
<https://litvinovg.pro/text_structures#compilation> display:hasDataGetter display:getCompilationWorksDataGetter .
<https://litvinovg.pro/text_structures#compilation> display:hasDataGetter display:getCompilationBibliographyDataGetter .
<https://litvinovg.pro/text_structures#compilation> display:hasDataGetter display:getCompilationAuthorsDataGetter .
<https://litvinovg.pro/text_structures#compilation> display:hasDataGetter display:getCompilationRubricsDataGetter .
display:getCompilationExcerptsContentDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "excerpts";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
SELECT ?elenphExcerpt ?htmlLabel ?htmlContent (COUNT (distinct ?excerptWorks) as ?worksCounter) (COUNT (distinct ?excerptBibliography) as ?bibliographyCounter)
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt .
?elenphExcerpt ts_:htmlExcerpt ?htmlContent .
?elenphExcerpt rdfs:label ?htmlLabel .
OPTIONAL{ ?elenphExcerpt ts_:works ?excerptWorks . }
OPTIONAL{ ?elenphExcerpt ts_:bibliography ?excerptBibliography . }
} GROUP BY ?elenphExcerpt ?htmlLabel ?htmlContent ORDER BY ?elenphExcerpt
""" .
display:getCompilationExcerptPathsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "paths";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
SELECT (GROUP_CONCAT(substr(concat("000",str(?outline)),strlen(str(?outline))); SEPARATOR = ".") AS ?path ) (COUNT(?outline) AS ?level) ?tocElement ?elenphExcerpt
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc ts_:hasTOCItem/(ts_:pointsTo/ts_:hasTOCItem)* ?tmpTOCItem .
?tmpTOCItem rdf:type ts_:TOCItem .
?tmpTOCItem ts_:pointsTo/(ts_:hasTOCItem/ts_:pointsTo)* ?tocElement .
?tmpTOCItem ts_:itemNumber ?outline .
OPTIONAL {
?tocElement ts_:hasText ?elenphExcerpt .
}
{
SELECT ?tocElement
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+ ?tocElement .
?tocElement rdf:type ts_:TOCLevel .
}
}
} GROUP BY ?tocElement ?elenphExcerpt ORDER BY ?path
""" .
display:getCompilationBibliographyDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "bibliography";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?bibliography ?excerpt
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt .
?excerpt ts_:bibliography ?bibliography .
} ORDER BY ?bibliography
""" .
display:getCompilationWorksDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "works";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?works ?excerpt
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt .
?excerpt ts_:works ?works .
} ORDER BY ?works
""" .
display:getCompilationAuthorsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "authors";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?authorInitials ?authorFamily ?authorGivenName ?orgName ?orgPostalCode ?orgAddress
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt .
?elenphExcerpt ts_:hasAuthor ?participant .
?participant ts_:participantFamily ?authorFamily .
?participant ts_:participantInitials ?authorInitials .
?participant ts_:participantGivenName ?authorGivenName .
OPTIONAL { ?participant ts_:affiliatedWith ?organization .
OPTIONAL { ?organization ts_:officialOrganizationName ?orgName } .
OPTIONAL { ?organization ts_:organizationPostalCode ?orgPostalCode } .
OPTIONAL { ?organization ts_:organizationAddress ?orgAddress } .
}
} ORDER BY ?authorFamily
""" .
display:getCompilationRubricsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "rubrics";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?rubricID ?rubricName
WHERE {
?uri ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?artExcerpt .
?artExcerpt pr:belongsTo ?rubricID .
?rubricID rdfs:label ?rubricName .
} ORDER BY ?rubricID
""" .

View file

@ -1,42 +0,0 @@
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
<freemarker:queryBuilder.ftl> display:hasDataGetter display:customSearchFieldsDataGetter .
<freemarker:queryBuilder.ftl> display:hasDataGetter display:customSearchFiltersDataGetter .
display:customSearchFieldsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
display:saveToVar "searchFields" ;
display:query """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX search: <https://litvinovg.pro/search_ontology#>
SELECT ?name ?field ?hasFilters
WHERE {
?searchField rdf:type search:searchField .
?searchField rdfs:label ?name .
?searchField search:indexField ?field .
BIND (exists { ?filters search:filterFiled ?searchField } AS ?hasFilters)
} ORDER BY ?name
""" .
display:customSearchFiltersDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter> ;
display:saveToVar "searchFilters" ;
display:query """
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX search: <https://litvinovg.pro/search_ontology#>
SELECT ?name ?field ?id
WHERE {
?searchFilter rdf:type search:filter .
?searchFilter rdfs:label ?name .
?searchFilter search:id ?id .
?searchFilter search:filterFiled ?searchField .
?searchField search:indexField ?field .
BIND (replace ( ?name, "«", "" ) AS ?sortName)
} ORDER BY ?field ?sortName
""" .

View file

@ -1,48 +0,0 @@
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
<https://litvinovg.pro/text_structures#compilation> display:hasDeleteQuery """
PREFIX ts: <https://litvinovg.pro/text_structures#>
DESCRIBE ?individualURI ?tocElement ?tocItem ?toc
WHERE {
OPTIONAL {
?individualURI ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)* ?tocElement .
OPTIONAL {
?tocElement ts:hasTOCItem ?tocItem .
}
}
}
""" .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDeleteQuery """
PREFIX ts: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
DESCRIBE ?individualURI ?tocElement ?tocItem ?toc ?excerpt ?author ?organization
WHERE {
?individualURI rdf:type ts:elenphArticle .
OPTIONAL {
?individualURI ts:hasTOC ?toc .
?toc (ts:hasTOCItem/ts:pointsTo)* ?tocElement .
OPTIONAL {
?tocElement ts:hasTOCItem ?tocItem .
}
OPTIONAL {
?tocElement ts:hasText ?excerpt .
OPTIONAL {
?excerpt ts:hasAuthor ?author .
OPTIONAL {
?author ts:affiliatedWith ?organization .
}
}
}
}
}
""" .
<https://litvinovg.pro/text_structures#elenphExcerpt> display:hasDeleteQuery """
PREFIX ts: <https://litvinovg.pro/text_structures#>
DESCRIBE ?individualURI ?tocElement
WHERE
{
?tocElement ts:hasText ?individualURI .
FILTER NOT EXISTS {?tocElement ts:hasTOCItem ?tocItem }
}
""" .

View file

@ -1,144 +0,0 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ts_: <https://litvinovg.pro/text_structures#> .
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDataGetter display:getArticleExcerptsContentDataGetter .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDataGetter display:getArticleExcerptPathsDataGetter .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDataGetter display:getArticleWorksDataGetter .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDataGetter display:getArticleBibliographyDataGetter .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDataGetter display:getArticleAuthorsDataGetter .
<https://litvinovg.pro/text_structures#elenphArticle> display:hasDataGetter display:getArticleRubricsDataGetter .
display:getArticleExcerptsContentDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "excerpts";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
SELECT ?elenphExcerpt ?htmlLabel ?htmlContent (COUNT (distinct ?excerptWorks) as ?worksCounter) (COUNT (distinct ?excerptBibliography) as ?bibliographyCounter)
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt .
?elenphExcerpt ts_:htmlExcerpt ?htmlContent .
?elenphExcerpt rdfs:label ?htmlLabel .
OPTIONAL{ ?elenphExcerpt ts_:works ?excerptWorks . }
OPTIONAL{ ?elenphExcerpt ts_:bibliography ?excerptBibliography . }
} GROUP BY ?elenphExcerpt ?htmlLabel ?htmlContent ORDER BY ?elenphExcerpt
""" .
display:getArticleExcerptPathsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "paths";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
SELECT (GROUP_CONCAT(substr(concat("000",str(?outline)),strlen(str(?outline))); SEPARATOR = ".") AS ?path ) (COUNT(?outline) AS ?level) ?tocElement ?elenphExcerpt
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc ts_:hasTOCItem/(ts_:pointsTo/ts_:hasTOCItem)* ?tmpTOCItem .
?tmpTOCItem rdf:type ts_:TOCItem .
?tmpTOCItem ts_:pointsTo/(ts_:hasTOCItem/ts_:pointsTo)* ?tocElement .
?tmpTOCItem ts_:itemNumber ?outline .
OPTIONAL {
?tocElement ts_:hasText ?elenphExcerpt .
}
{
SELECT ?elenphArticle ?tocElement
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+ ?tocElement .
?tocElement rdf:type ts_:TOCLevel .
}
}
} GROUP BY ?tocElement ?elenphExcerpt ORDER BY ?path
""" .
display:getArticleBibliographyDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "bibliography";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?bibliography ?excerpt
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt .
?excerpt ts_:bibliography ?bibliography .
} ORDER BY ?bibliography
""" .
display:getArticleWorksDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "works";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?works ?excerpt
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt .
?excerpt ts_:works ?works .
} ORDER BY ?works
""" .
display:getArticleAuthorsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "authors";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?authorInitials ?authorFamily ?authorGivenName ?orgName ?orgPostalCode ?orgAddress
WHERE {
?individualURI ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?elenphExcerpt .
?elenphExcerpt ts_:hasAuthor ?participant .
?participant ts_:participantFamily ?authorFamily .
?participant ts_:participantInitials ?authorInitials .
?participant ts_:participantGivenName ?authorGivenName .
OPTIONAL { ?participant ts_:affiliatedWith ?organization .
OPTIONAL { ?organization ts_:officialOrganizationName ?orgName } .
OPTIONAL { ?organization ts_:organizationPostalCode ?orgPostalCode } .
OPTIONAL { ?organization ts_:organizationAddress ?orgAddress } .
}
} ORDER BY ?authorFamily
""" .
display:getArticleRubricsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "rubrics";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?rubricID ?rubricName
WHERE {
?uri ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?artExcerpt .
?artExcerpt pr:belongsTo ?rubricID .
?rubricID rdfs:label ?rubricName .
} ORDER BY ?rubricID
""" .

View file

@ -1,52 +0,0 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ts_: <https://litvinovg.pro/text_structures#> .
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
<https://litvinovg.pro/text_structures#elenphExcerpt> display:hasDataGetter display:getExcerptAssignedArticlesDataGetter .
<https://litvinovg.pro/text_structures#elenphExcerpt> display:hasDataGetter display:getExcerptAuthorsDataGetter .
display:getExcerptAssignedArticlesDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "articles";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?articleName ?articleUri
WHERE {
?articleUri rdf:type ts_:elenphArticle .
?articleUri ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?individualURI .
?articleUri rdfs:label ?articleName .
} ORDER BY ?articleName
""" .
display:getExcerptAuthorsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "authors";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT DISTINCT ?authorInitials ?authorFamily ?authorGivenName ?orgName ?orgPostalCode ?orgAddress
WHERE {
?individualURI ts_:hasAuthor ?participant .
?participant ts_:participantFamily ?authorFamily .
?participant ts_:participantInitials ?authorInitials .
?participant ts_:participantGivenName ?authorGivenName .
OPTIONAL { ?participant ts_:affiliatedWith ?organization .
OPTIONAL { ?organization ts_:officialOrganizationName ?orgName } .
OPTIONAL { ?organization ts_:organizationPostalCode ?orgPostalCode } .
OPTIONAL { ?organization ts_:organizationAddress ?orgAddress } .
}
} ORDER BY ?authorFamily
""" .

View file

@ -1,11 +0,0 @@
@prefix vitroDisplay: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/search_ontology#filter> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/search_ontology#statement> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/search_ontology#searchField> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/search_ontology#sort> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/text_structures#TOC> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/text_structures#TOCLevel> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/text_structures#TOCItem> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/text_structures#publicationParticipant> .
vitroDisplay:SearchIndex vitroDisplay:excludeClass <https://litvinovg.pro/text_structures#organization> .

View file

@ -23,7 +23,8 @@ display:academicDeptsDataGetter
WHERE WHERE
{ {
?theURI a vivo:AcademicDepartment . ?theURI a vivo:AcademicDepartment .
?theURI rdfs:label ?label ?theURI rdfs:label ?label .
FILTER (lang(?label) = '?country' ) .
} }
""" . """ .

View file

@ -1,115 +0,0 @@
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ts_: <https://litvinovg.pro/text_structures#> .
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
<https://iph.ras.ru/relationships#rubric> display:hasDataGetter display:getArticlesWithRubricDataGetter .
<https://iph.ras.ru/relationships#rubric> display:hasDataGetter display:getArticlesWithChildRubricDataGetter .
<https://iph.ras.ru/relationships#rubric> display:hasDataGetter display:getChildRubricsDataGetter .
<https://iph.ras.ru/relationships#rubric> display:hasDataGetter display:getExcerptsWithRubricDataGetter .
<https://iph.ras.ru/relationships#rubric> display:hasDataGetter display:getExcerptsWithRubricsChildsDataGetter .
display:getArticlesWithChildRubricDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "childArticles";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?childArticleID ?childArticleName
WHERE {
?rubric (pr:hasParent)+ ?individualURI .
?excerpt pr:belongsTo ?rubric .
?excerpt rdf:type ts_:elenphExcerpt .
?childArticleID ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt .
?childArticleID rdfs:label ?childArticleName .
?childArticleID rdf:type ts_:elenphArticle .
} ORDER BY ?childArticleName
""" .
display:getArticlesWithRubricDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "articles";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?articleID ?articleName
WHERE {
?excerpt pr:belongsTo ?individualURI .
?excerpt rdf:type ts_:elenphExcerpt .
?articleID ts_:hasTOC ?toc .
?toc (ts_:hasTOCItem/ts_:pointsTo)+/ts_:hasText ?excerpt .
?articleID rdfs:label ?articleName .
?articleID rdf:type ts_:elenphArticle .
} ORDER BY ?articleName
""" .
display:getChildRubricsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "childRubrics";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?rubricID ?rubricName
WHERE {
?rubricID pr:hasParent ?individualURI .
?rubricID pr:rubricOrder ?order .
?rubricID rdfs:label ?rubricName .
?rubricID rdf:type pr:rubric .
} ORDER BY ?order
""" .
display:getExcerptsWithRubricsChildsDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "childExcerpts";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?childExcerptID ?childExcerptName
WHERE {
?tmpChildRubrics (pr:hasParent)+ ?individualURI .
?childExcerptID pr:belongsTo ?tmpChildRubrics .
?childExcerptID rdfs:label ?childExcerptName .
?childExcerptID rdf:type ts_:elenphExcerpt .
} ORDER BY ?childExcerptName
""" .
display:getExcerptsWithRubricDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "excerpts";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
PREFIX pr: <https://iph.ras.ru/relationships#>
SELECT DISTINCT ?excerptID ?excerptName
WHERE {
?excerptID pr:belongsTo ?individualURI .
?excerptID rdfs:label ?excerptName .
?excerptID rdf:type ts_:elenphExcerpt .
} ORDER BY ?excerptName
""" .

View file

@ -23,7 +23,7 @@
searchIndex:documentBuilding.DocumentModifier , searchIndex:documentBuilding.DocumentModifier ,
searchIndex:extensions.LabelsAcrossContextNodes ; searchIndex:extensions.LabelsAcrossContextNodes ;
rdfs:label "Labels across relatedBy/relates" ; rdfs:label "Labels across relatedBy/relates" ;
:hasTypeRestriction "http://vivoweb.org/ontology/core#Relationship" ; :appliesToContextNodeType "http://vivoweb.org/ontology/core#Relationship" ;
:hasIncomingProperty "http://vivoweb.org/ontology/core#relatedBy" ; :hasIncomingProperty "http://vivoweb.org/ontology/core#relatedBy" ;
:hasOutgoingProperty "http://vivoweb.org/ontology/core#relates" . :hasOutgoingProperty "http://vivoweb.org/ontology/core#relates" .
@ -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: <http://purl.obolibrary.org/obo/>
SELECT ?uri
WHERE {
?uri obo:ARG_2000028 ?subject .
}
""" .
:vivodocumentModifier_PreferredTitle :vivodocumentModifier_PreferredTitle
a searchIndex:documentBuilding.SelectQueryDocumentModifier , a searchIndex:documentBuilding.SelectQueryDocumentModifier ,
searchIndex:documentBuilding.DocumentModifier ; searchIndex:documentBuilding.DocumentModifier ;

View file

@ -1,24 +0,0 @@
# $This file is distributed under the terms of the license in LICENSE$
@prefix about: <http://vitro.mannlib.cornell.edu/ns/default/about#> .
about:ABOUTDG
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.FixedHTMLDataGetter> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#htmlValue>
"""<h2>About VIVO</h2>
<div class=\"pageGroupBody\" id=\"aboutText\"><p>The VIVO application enables the discovery of researchers across institutions. Participants in the network include institutions with local installations of VIVO or those with research discovery and profiling applications that can provide semantic web-compliant data. The information accessible through VIVO's search and browse capability will therefore reside and be controlled locally, within institutional VIVOs or other semantic web-compliant applications.</p>
<p>VIVO is an open source semantic web application originally developed and implemented at Cornell. When installed and populated with content at an institution, it enables the discovery of research and scholarship across disciplines at that institution. VIVO supports browsing and a search function which returns faceted results for rapid retrieval of desired information. Content in any local VIVO installation may be maintained manually or brought into the database in automated ways from local systems of record, such as human resources, scholarships, grants, course, and faculty activity databases.</p>
<p>See more information on the <a href=\"http://vivoweb.org\">VIVO Project</a>.</p></div>
"""@en ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#saveToVar>
"aboutPage" .
about:ABOUTPAGE
a <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#Page> ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#hasDataGetter>
about:ABOUTDG ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#title>
"About Page" ;
<http://vitro.mannlib.cornell.edu/ontologies/display/1.1#urlMapping>
"/about" .

View file

@ -14,7 +14,6 @@
display:DefaultMenu display:DefaultMenu
a display:MainMenu ; a display:MainMenu ;
rdfs:label "Default Menu" ;
display:hasElement display:EventsMenuItem ; display:hasElement display:EventsMenuItem ;
display:hasElement display:HomeMenuItem ; display:hasElement display:HomeMenuItem ;
display:hasElement display:OrganizationsMenuItem ; display:hasElement display:OrganizationsMenuItem ;
@ -27,43 +26,36 @@ display:DefaultMenu
display:HomeMenuItem display:HomeMenuItem
a display:NavigationElement ; a display:NavigationElement ;
display:menuPosition 1; display:menuPosition 1;
display:linkText "Home";
display:toPage display:Home . display:toPage display:Home .
display:PeopleMenuItem display:PeopleMenuItem
a display:NavigationElement ; a display:NavigationElement ;
display:menuPosition 2; display:menuPosition 2;
display:linkText "People";
display:toPage display:People . display:toPage display:People .
display:OrganizationsMenuItem display:OrganizationsMenuItem
a display:NavigationElement ; a display:NavigationElement ;
display:menuPosition 3; display:menuPosition 3;
display:linkText "Organizations";
display:toPage display:Organizations . display:toPage display:Organizations .
display:ResearchMenuItem display:ResearchMenuItem
a display:NavigationElement ; a display:NavigationElement ;
display:menuPosition 4; display:menuPosition 4;
display:linkText "Research";
display:toPage display:Research . display:toPage display:Research .
display:EventsMenuItem display:EventsMenuItem
a display:NavigationElement ; a display:NavigationElement ;
display:menuPosition 5; display:menuPosition 5;
display:linkText "Events";
display:toPage display:Events . display:toPage display:Events .
display:CapabilityMapMenuItem display:CapabilityMapMenuItem
a display:NavigationElement ; a display:NavigationElement ;
display:menuPosition 6; display:menuPosition 6;
display:linkText "Capability Map";
display:toPage display:CapabilityMap . display:toPage display:CapabilityMap .
display:Home display:Home
a display:HomePage ; a display:HomePage ;
a display:Page ; a display:Page ;
display:title "Home" ;
display:urlMapping "/" ; display:urlMapping "/" ;
display:hasDataGetter display:homeDataGetter; display:hasDataGetter display:homeDataGetter;
display:cannotDeletePage "true" . display:cannotDeletePage "true" .
@ -72,7 +64,6 @@ display:Events
a display:Page ; a display:Page ;
a display:ClassGroupPage; a display:ClassGroupPage;
display:forClassGroup vivoweb:vitroClassGroupevents ; display:forClassGroup vivoweb:vitroClassGroupevents ;
display:title "Events" ;
display:urlMapping "/events" ; display:urlMapping "/events" ;
display:hasDataGetter display:eventsDataGetter . display:hasDataGetter display:eventsDataGetter .
@ -80,7 +71,6 @@ display:Organizations
a display:Page ; a display:Page ;
a display:ClassGroupPage; a display:ClassGroupPage;
display:forClassGroup vivoweb:vitroClassGrouporganizations ; display:forClassGroup vivoweb:vitroClassGrouporganizations ;
display:title "Organizations" ;
display:urlMapping "/organizations"; display:urlMapping "/organizations";
display:hasDataGetter display:organizationsDataGetter . display:hasDataGetter display:organizationsDataGetter .
@ -88,7 +78,6 @@ display:People
a display:Page ; a display:Page ;
a display:ClassGroupPage; a display:ClassGroupPage;
display:forClassGroup vivoweb:vitroClassGrouppeople ; display:forClassGroup vivoweb:vitroClassGrouppeople ;
display:title "People" ;
display:urlMapping "/people" ; display:urlMapping "/people" ;
display:hasDataGetter display:peopleDataGetter . display:hasDataGetter display:peopleDataGetter .
@ -96,13 +85,11 @@ display:Research
a display:Page ; a display:Page ;
a display:ClassGroupPage; a display:ClassGroupPage;
display:forClassGroup vivoweb:vitroClassGrouppublications ; display:forClassGroup vivoweb:vitroClassGrouppublications ;
display:title "Research" ;
display:urlMapping "/research" ; display:urlMapping "/research" ;
display:hasDataGetter display:researchDataGetter . display:hasDataGetter display:researchDataGetter .
display:CapabilityMap display:CapabilityMap
a display:Page ; a display:Page ;
display:title "Capability Map" ;
display:urlMapping "/vis/capabilitymap" ; display:urlMapping "/vis/capabilitymap" ;
display:hasDataGetter display:capabilityMapDataGetter . display:hasDataGetter display:capabilityMapDataGetter .

View file

@ -1,110 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><rdf:RDF
xmlns:ns="http://www.w3.org/2003/06/sw-vocab-status/ns#"
xmlns:scires="http://vivoweb.org/ontology/scientific-research#"
xmlns:ocresst="http://purl.org/net/OCRe/statistics.owl#"
xmlns:ocresd="http://purl.org/net/OCRe/study_design.owl#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:obo="http://purl.obolibrary.org/obo/"
xmlns:geo="http://aims.fao.org/aos/geopolitical.owl#"
xmlns:c4o="http://purl.org/spar/c4o/"
xmlns:event="http://purl.org/NET/c4dm/event.owl#"
xmlns:ro="http://purl.obolibrary.org/obo/ro.owl#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:skos2="http://www.w3.org/2008/05/skos#"
xmlns:ts="https://litvinovg.pro/text_structures#"
xmlns:vann="http://purl.org/vocab/vann/"
xmlns:vivo="http://vivoweb.org/ontology/core#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:vitro-public="http://vitro.mannlib.cornell.edu/ns/vitro/public#"
xmlns:vitro="http://vitro.mannlib.cornell.edu/ns/vitro/0.7#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cito="http://purl.org/spar/cito/"
xmlns:swo="http://www.ebi.ac.uk/efo/swo/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:ocresp="http://purl.org/net/OCRe/study_protocol.owl#"
xmlns:pr="https://iph.ras.ru/relationships#"
xmlns:ocrer="http://purl.org/net/OCRe/research.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:vcard="http://www.w3.org/2006/vcard/ns#"
xmlns:bibo="http://purl.org/ontology/bibo/"
xmlns:fabio="http://purl.org/spar/fabio/"
xmlns:search="https://dideside.com/searchOntology#"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<owl:Ontology rdf:about="https://iph.ras.ru/relationships">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>The ontology of philosophical relations</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Philosophical ontology</rdfs:label>
<vitro:ontologyPrefixAnnot>pr</vitro:ontologyPrefixAnnot>
</owl:Ontology>
<owl:Class rdf:about="https://iph.ras.ru/relationships#rubric">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>рубрика</rdfs:label>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGroupphilosophicalrubrics"/>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGrouprubric"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:customDisplayViewAnnot>rubric.ftl</vitro:customDisplayViewAnnot>
<obo:IAO_0000115>Рубрика</obo:IAO_0000115>
</owl:Class>
<owl:ObjectProperty rdf:about="https://iph.ras.ru/relationships#relation">
<rdfs:label xml:lang="en-US">Relation</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<rdfs:range rdf:resource="https://iph.ras.ru/relationships#rubric"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#textExcerpt"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://iph.ras.ru/relationships#hasParent">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>has parent rubric</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<rdfs:range rdf:resource="https://iph.ras.ru/relationships#rubric"/>
<rdfs:domain rdf:resource="https://iph.ras.ru/relationships#rubric"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://iph.ras.ru/relationships#belongsTo">
<vitro:customEntryFormAnnot>edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.AddRubricToELENPHArticleGenerator</vitro:customEntryFormAnnot>
<rdfs:range rdf:resource="https://iph.ras.ru/relationships#rubric"/>
<rdfs:label xml:lang="en-US">belongs to</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publication"/>
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:about="https://iph.ras.ru/relationships#rubricOrder">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>порядок рубрики</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#integer"/>
<rdfs:domain rdf:resource="https://iph.ras.ru/relationships#rubric"/>
</owl:DatatypeProperty>
<owl:SymmetricProperty rdf:about="https://iph.ras.ru/relationships#isInversionOf">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>isInversionOf</rdfs:label>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://iph.ras.ru/text_structures#textExcerpt"/>
<rdfs:range rdf:resource="https://iph.ras.ru/text_structures#textExcerpt"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayLimitAnnot>
<rdfs:subPropertyOf rdf:resource="https://iph.ras.ru/relationships#relation"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
</owl:SymmetricProperty>
</rdf:RDF>

View file

@ -1,118 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><rdf:RDF
xmlns:ns="http://www.w3.org/2003/06/sw-vocab-status/ns#"
xmlns:search="https://litvinovg.pro/search_ontology#"
xmlns:scires="http://vivoweb.org/ontology/scientific-research#"
xmlns:ocresst="http://purl.org/net/OCRe/statistics.owl#"
xmlns:ocresd="http://purl.org/net/OCRe/study_design.owl#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:obo="http://purl.obolibrary.org/obo/"
xmlns:geo="http://aims.fao.org/aos/geopolitical.owl#"
xmlns:c4o="http://purl.org/spar/c4o/"
xmlns:event="http://purl.org/NET/c4dm/event.owl#"
xmlns:ro="http://purl.obolibrary.org/obo/ro.owl#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:skos2="http://www.w3.org/2008/05/skos#"
xmlns:ts="https://litvinovg.pro/text_structures#"
xmlns:vann="http://purl.org/vocab/vann/"
xmlns:vivo="http://vivoweb.org/ontology/core#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:vitro-public="http://vitro.mannlib.cornell.edu/ns/vitro/public#"
xmlns:vitro="http://vitro.mannlib.cornell.edu/ns/vitro/0.7#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cito="http://purl.org/spar/cito/"
xmlns:swo="http://www.ebi.ac.uk/efo/swo/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:ocresp="http://purl.org/net/OCRe/study_protocol.owl#"
xmlns:pr="https://iph.ras.ru/relationships#"
xmlns:ocrer="http://purl.org/net/OCRe/research.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:vcard="http://www.w3.org/2006/vcard/ns#"
xmlns:bibo="http://purl.org/ontology/bibo/"
xmlns:fabio="http://purl.org/spar/fabio/"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<owl:Ontology rdf:about="https://litvinovg.pro/search_ontology">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Semantic search</rdfs:label>
<vitro:ontologyPrefixAnnot>search</vitro:ontologyPrefixAnnot>
</owl:Ontology>
<owl:Class rdf:about="https://litvinovg.pro/search_ontology#searchField">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Field</rdfs:label>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGroupsearchstatements"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf>
<owl:Class rdf:about="https://litvinovg.pro/search_ontology#statement"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/search_ontology#statement">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Search statement</rdfs:label>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGroupsearchstatements"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/search_ontology#sort">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Sort</rdfs:label>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGroupsearchstatements"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/search_ontology#statement"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/search_ontology#filter">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Filter</rdfs:label>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGroupsearchstatements"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/search_ontology#statement"/>
</owl:Class>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/search_ontology#filterFiled">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Filter field</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<rdfs:range rdf:resource="https://litvinovg.pro/search_ontology#searchField"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/search_ontology#filter"/>
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/search_ontology#indexField">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Index field</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/search_ontology#searchField"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/search_ontology#id">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Identifier</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/search_ontology#filter"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/search_ontology#description">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>description</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/search_ontology#statement"/>
</owl:DatatypeProperty>
</rdf:RDF>

View file

@ -1,525 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><rdf:RDF
xmlns:ns="http://www.w3.org/2003/06/sw-vocab-status/ns#"
xmlns:search="https://litvinovg.pro/search_ontology#"
xmlns:scires="http://vivoweb.org/ontology/scientific-research#"
xmlns:ocresst="http://purl.org/net/OCRe/statistics.owl#"
xmlns:ocresd="http://purl.org/net/OCRe/study_design.owl#"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:obo="http://purl.obolibrary.org/obo/"
xmlns:geo="http://aims.fao.org/aos/geopolitical.owl#"
xmlns:c4o="http://purl.org/spar/c4o/"
xmlns:event="http://purl.org/NET/c4dm/event.owl#"
xmlns:ro="http://purl.obolibrary.org/obo/ro.owl#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:skos2="http://www.w3.org/2008/05/skos#"
xmlns:ts="https://litvinovg.pro/text_structures#"
xmlns:vann="http://purl.org/vocab/vann/"
xmlns:vivo="http://vivoweb.org/ontology/core#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:vitro-public="http://vitro.mannlib.cornell.edu/ns/vitro/public#"
xmlns:vitro="http://vitro.mannlib.cornell.edu/ns/vitro/0.7#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cito="http://purl.org/spar/cito/"
xmlns:swo="http://www.ebi.ac.uk/efo/swo/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:ocresp="http://purl.org/net/OCRe/study_protocol.owl#"
xmlns:pr="https://iph.ras.ru/relationships#"
xmlns:ocrer="http://purl.org/net/OCRe/research.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:vcard="http://www.w3.org/2006/vcard/ns#"
xmlns:bibo="http://purl.org/ontology/bibo/"
xmlns:fabio="http://purl.org/spar/fabio/"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<owl:Ontology rdf:about="https://litvinovg.pro/text_structures">
<rdfs:label xml:lang="ru-RU">Text structures Ontology</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Text structures Ontology</rdfs:label>
<vitro:ontologyPrefixAnnot>ts</vitro:ontologyPrefixAnnot>
</owl:Ontology>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#TOC">
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">Table of contents</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Table of contents</rdfs:label>
<rdfs:subClassOf>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#TOCLevel"/>
</rdfs:subClassOf>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayRankAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayRankAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayLimitAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayLimitAnnot>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#complexPublication">
<rdfs:label xml:lang="en-US">Complex Publication</rdfs:label>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayLimitAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayRankAnnot>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#publication"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#publication">
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayLimitAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayLimitAnnot>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">Publication</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Publication</rdfs:label>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayRankAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayRankAnnot>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#publicationParticipant">
<rdfs:label xml:lang="en-US">Publication Participant</rdfs:label>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayLimitAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayRankAnnot>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#TOCItem">
<rdfs:label xml:lang="en-US">TOC Item</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>TOC Item</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#organization">
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">Organization</rdfs:label>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#elenphArticle">
<rdfs:subClassOf>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#encArticle"/>
</rdfs:subClassOf>
<owl:equivalentClass rdf:resource="https://litvinovg.pro/text_structures#elenphArticle"/>
<vitro:customDisplayViewAnnot>elenphAritcle.ftl</vitro:customDisplayViewAnnot>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Electronic philosophical encyclopedia article</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGroupElenpharticles"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#compilation">
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/text_structures#complexPublication"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:customDisplayViewAnnot>compilation.ftl</vitro:customDisplayViewAnnot>
<rdfs:label xml:lang="en-US">Compilation</rdfs:label>
<vitro:customEntryFormAnnot>edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.CompilationGenerator</vitro:customEntryFormAnnot>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#textExcerpt">
<vitro:inClassGroup rdf:resource="http://research.iph.ras.ru/vivo/individual/vitroClassGroupTableofcontents"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:equivalentClass rdf:resource="https://litvinovg.pro/text_structures#textExcerpt"/>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/text_structures#publication"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Text excerpt</rdfs:label>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#book">
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">Book</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Book</rdfs:label>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayLimitAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayLimitAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayRankAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayRankAnnot>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/text_structures#complexPublication"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#journalArticle">
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayLimitAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayLimitAnnot>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/text_structures#complexPublication"/>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayRankAnnot>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>-1</vitro:displayRankAnnot>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Journal Article</rdfs:label>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#encArticle">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Encyclopedia article</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:displayRankAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayRankAnnot>
<vitro:displayLimitAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#integer"
>-1</vitro:displayLimitAnnot>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/text_structures#complexPublication"/>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#elenphExcerpt">
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:inClassGroup rdf:resource="http://vivo.mydomain.edu/individual/vitroClassGrouptextexcerpts"/>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<owl:equivalentClass rdf:resource="https://litvinovg.pro/text_structures#elenphExcerpt"/>
<vitro:customDisplayViewAnnot>elenphExcerpt.ftl</vitro:customDisplayViewAnnot>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subClassOf rdf:resource="https://litvinovg.pro/text_structures#textExcerpt"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Elenph Excerpt</rdfs:label>
</owl:Class>
<owl:Class rdf:about="https://litvinovg.pro/text_structures#TOCLevel">
<vitro:inClassGroup rdf:resource="http://research.iph.ras.ru/vivo/individual/vitroClassGroupTableofcontents"/>
<owl:equivalentClass rdf:resource="https://litvinovg.pro/text_structures#TOCLevel"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">TOC Level</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>TOC Level</rdfs:label>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<obo:IAO_0000115>Table of contents element</obo:IAO_0000115>
<rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:Class>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/text_structures#hasAuthor">
<rdfs:label xml:lang="en-US">has author</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#textExcerpt"/>
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#publicationParticipant"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/text_structures#affiliatedWith">
<rdfs:label xml:lang="en-US">affiliated with</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publicationParticipant"/>
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#organization"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/text_structures#compilatorOf">
<rdfs:label xml:lang="en-US">compilatorOf</rdfs:label>
<rdfs:domain rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#compilation"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/text_structures#hasTOCItem">
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#TOCLevel"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>has TOC item</rdfs:label>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#hasTOCItem"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topObjectProperty"/>
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#TOCItem"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/text_structures#hasText">
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#textExcerpt"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#TOCLevel"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">has text</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>has text</rdfs:label>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#hasText"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topObjectProperty"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:about="https://litvinovg.pro/text_structures#pointsTo">
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topObjectProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>points to</rdfs:label>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#TOCLevel"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#TOCItem"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#pointsTo"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#queryBuilderRules">
<rdfs:label xml:lang="en-US">Query Builder Rules</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#compilation"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#rawQueryString">
<rdfs:label xml:lang="en-US">Raw Query String</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#compilation"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#participantInitials">
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publicationParticipant"/>
<rdfs:label xml:lang="en-US">Publication Participant Initials</rdfs:label>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#doi">
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#doi"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphArticle"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>DOI</rdfs:label>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#participantGivenName">
<rdfs:label xml:lang="en-US">Publication Participant Given Name</rdfs:label>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publicationParticipant"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#firstPublication">
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphArticle"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#firstPublication"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>First publication</rdfs:label>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#modificationTime">
<rdfs:label xml:lang="en-US">Modification time</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publication"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#keywords">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Keywords</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphExcerpt"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#keywords"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#htmlExcerpt">
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#textExcerpt"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<vitro:editing>HTML</vitro:editing>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#htmlExcerpt"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>html Excerpt</rdfs:label>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#participantFamily">
<rdfs:label xml:lang="en-US">Publication Participant Family</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publicationParticipant"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#issue">
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphArticle"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Issue</rdfs:label>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#issue"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#participantEmail">
<rdfs:label xml:lang="en-US">Publication Participant email</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#publicationParticipant"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#works">
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#works"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphExcerpt"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Works</rdfs:label>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#yearAndMonth">
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Year and month</rdfs:label>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphArticle"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#gYearMonth"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#yearAndMonth"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#bibliography">
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphExcerpt"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>bibliography</rdfs:label>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#bibliography"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:about="https://litvinovg.pro/text_structures#year">
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#elenphArticle"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#gYear"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Year</rdfs:label>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#year"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
</owl:DatatypeProperty>
<owl:FunctionalProperty rdf:about="https://litvinovg.pro/text_structures#organizationAddress">
<rdfs:label xml:lang="en-US">Organization Address</rdfs:label>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#organization"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
</owl:FunctionalProperty>
<owl:FunctionalProperty rdf:about="https://litvinovg.pro/text_structures#organizationPostalCode">
<rdfs:label xml:lang="en-US">Organization Postal Code</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#organization"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
</owl:FunctionalProperty>
<owl:FunctionalProperty rdf:about="https://litvinovg.pro/text_structures#officialOrganizationName">
<rdfs:label xml:lang="en-US">Official Organization Name</rdfs:label>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#organization"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
</owl:FunctionalProperty>
<owl:FunctionalProperty rdf:about="https://litvinovg.pro/text_structures#">
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:range rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>htmlExcerpt</rdfs:label>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#Excerpt"/>
</owl:FunctionalProperty>
<owl:FunctionalProperty rdf:about="https://litvinovg.pro/text_structures#itemNumber">
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:subPropertyOf rdf:resource="https://litvinovg.pro/text_structures#itemNumber"/>
<rdfs:subPropertyOf rdf:resource="http://www.w3.org/2002/07/owl#topDataProperty"/>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>Item Number</rdfs:label>
<vitro:inPropertyGroupAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/default#n6578"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#TOCItem"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#integer"/>
</owl:FunctionalProperty>
<owl:FunctionalProperty rdf:about="https://litvinovg.pro/text_structures#hasTOC">
<rdfs:range rdf:resource="https://litvinovg.pro/text_structures#TOC"/>
<rdfs:domain rdf:resource="https://litvinovg.pro/text_structures#complexPublication"/>
<vitro:prohibitedFromUpdateBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:selectFromExistingAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean"
>true</vitro:selectFromExistingAnnot>
<vitro:hiddenFromPublishBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<vitro:hiddenFromDisplayBelowRoleLevelAnnot rdf:resource="http://vitro.mannlib.cornell.edu/ns/vitro/role#public"/>
<rdfs:label xml:lang="en-US">has TOC</rdfs:label>
<rdfs:label rdf:datatype="http://www.w3.org/1999/02/22-rdf-syntax-ns#langString"
>has TOC</rdfs:label>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
</owl:FunctionalProperty>
</rdf:RDF>

View file

@ -4763,9 +4763,8 @@ use one freetextKeyword assertion for each keyword or phrase.</obo:IAO_0000112>
<!-- http://vivoweb.org/ontology/core#researcherId --> <!-- http://vivoweb.org/ontology/core#researcherId -->
<owl:DatatypeProperty rdf:about="http://vivoweb.org/ontology/core#researcherId"> <owl:DatatypeProperty rdf:about="http://vivoweb.org/ontology/core#researcherId">
<rdfs:label xml:lang="en">ISI Researcher ID</rdfs:label> <rdfs:label xml:lang="en">ResearcherID</rdfs:label>
<obo:IAO_0000112 rdf:datatype="http://www.w3.org/2001/XMLSchema#string">RearcherID is a Thomson Reuters project where researchers have a place to manage and share their professional information. It will allow them to solve author identity issues while simultaneously adding dynamic citation metrics and collaboration networks to your personal profile. <obo:IAO_0000112 rdf:datatype="http://www.w3.org/2001/XMLSchema#string">ResearcherID is a Clarivate project where researchers have a place to manage and share their professional information. It will allow them to solve author identity issues while simultaneously adding dynamic citation metrics and collaboration networks to your personal profile. http://www.researcherid.com/</obo:IAO_0000112>
Definition source: http://isiwebofknowledge.com/researcherid/</obo:IAO_0000112>
<rdfs:subPropertyOf rdf:resource="http://vivoweb.org/ontology/core#identifier"/> <rdfs:subPropertyOf rdf:resource="http://vivoweb.org/ontology/core#identifier"/>
<rdfs:domain rdf:resource="http://xmlns.com/foaf/0.1/Person"/> <rdfs:domain rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
</owl:DatatypeProperty> </owl:DatatypeProperty>
@ -5982,6 +5981,32 @@ To enable other Gender/Sex codes to be used, this dataproperty has range URI. Th
<!-- http://purl.obolibrary.org/obo/BCO_0000003 -->
<owl:Class rdf:about="http://purl.obolibrary.org/obo/BCO_0000003">
<rdfs:label xml:lang="en">Data Collection Process</rdfs:label>
<rdfs:subClassOf rdf:resource="http://vivoweb.org/ontology/core#CollectionProcess"/>
<obo:IAO_0000112 xml:lang="en">Observing and recording the presence or absence of butterflies during a transect walk.; A trip camera capture of an image of a jaguar is an observation, because it is &quot;selected&quot; by the camera as worthy of obsevation simply by virtue of moving in front of the camera.; Seeing three pelicans flying overhead on Christmas day and report them as part of the Christmas Bird Count.</obo:IAO_0000112>
<obo:IAO_0000114 rdf:resource="http://purl.obolibrary.org/obo/IAO_0000125"/>
<obo:IAO_0000115 xml:lang="en">A process in which a person or machine sees or detects a material entity and selects it as worthy of observation, and which has as output an information content entity about the selected material entity.</obo:IAO_0000115>
<obo:IAO_0000116 xml:lang="en">Under development</obo:IAO_0000116>
<vitro:descriptionAnnot rdf:datatype="http://www.w3.org/2001/XMLSchema#string">A collection process in which an information content entity is collected for research or scholarly purposes. The immediate use case is recording observations of taxa (presence/absence). Need to figure out how this relates to OBI assay OBI:0000070. maybe has broader synonym OBI:0000070</vitro:descriptionAnnot>
</owl:Class>
<!-- http://purl.obolibrary.org/obo/BCO_0000042 -->
<owl:Class rdf:about="http://purl.obolibrary.org/obo/BCO_0000042">
<rdfs:label xml:lang="en">Taxonomic Identification Process</rdfs:label>
<rdfs:subClassOf rdf:resource="http://vivoweb.org/ontology/core#IdentificationProcess"/>
<obo:IAO_0000112 xml:lang="en">Using a key to identify a plant in the field.; Using DNA barcoding to identify a plant species.; Associating a museum specimen with a specific taxonomic concept based on its characters.; Using BLAST to identify the taxa present in an environmental (metagenomic) sample.</obo:IAO_0000112>
<obo:IAO_0000114 rdf:resource="http://purl.obolibrary.org/obo/IAO_0000125"/>
<obo:IAO_0000115 xml:lang="en">A curation process in which a taxonomic name is appied to a biological entity to denote membership in a taxon.</obo:IAO_0000115>
</owl:Class>
<!-- http://purl.obolibrary.org/obo/BFO_0000001 --> <!-- http://purl.obolibrary.org/obo/BFO_0000001 -->
<owl:Class rdf:about="http://purl.obolibrary.org/obo/BFO_0000001"> <owl:Class rdf:about="http://purl.obolibrary.org/obo/BFO_0000001">
@ -9754,6 +9779,20 @@ This class allows for linking an author to a publication while indicating inform
<!-- http://vivoweb.org/ontology/core#GeoreferencingProcess -->
<owl:Class rdf:about="http://vivoweb.org/ontology/core#GeoreferencingProcess">
<rdfs:subClassOf rdf:resource="http://vivoweb.org/ontology/core#CurationProcess"/>
<obo:IAO_0000111>Georeferenced</obo:IAO_0000111>
<obo:IAO_0000114 rdf:resource="http://purl.obolibrary.org/obo/IAO_0000123"/>
<obo:IAO_0000115 xml:lang="en">A curation process in which a material entity is annotated with geo-coordinates to indicate the location of a collection</obo:IAO_0000115>
<obo:IAO_0000116 xml:lang="en">Under development</obo:IAO_0000116>
<obo:IAO_0000117 xml:lang="en">PERSON: Anne Thessen</obo:IAO_0000117>
<rdfs:label xml:lang="en">Georeferencing Process</rdfs:label>
</owl:Class>
<!-- http://vivoweb.org/ontology/core#GovernmentAgency --> <!-- http://vivoweb.org/ontology/core#GovernmentAgency -->
<owl:Class rdf:about="http://vivoweb.org/ontology/core#GovernmentAgency"> <owl:Class rdf:about="http://vivoweb.org/ontology/core#GovernmentAgency">
@ -9846,6 +9885,21 @@ This class allows for linking an author to a publication while indicating inform
<!-- http://vivoweb.org/ontology/core#IdentificationProcess -->
<owl:Class rdf:about="http://vivoweb.org/ontology/core#IdentificationProcess">
<rdfs:subClassOf rdf:resource="http://vivoweb.org/ontology/core#CurationProcess"/>
<obo:IAO_0000111>Identified</obo:IAO_0000111>
<obo:IAO_0000114 rdf:resource="http://purl.obolibrary.org/obo/IAO_0000123"/>
<obo:IAO_0000115 xml:lang="en">A curation process in which a term is appied to a material entity to denote its type or kind</obo:IAO_0000115>
<obo:IAO_0000116 xml:lang="en">Under development</obo:IAO_0000116>
<obo:IAO_0000117 xml:lang="en">PERSON: Anne Thessen</obo:IAO_0000117>
<vitro:descriptionAnnot>This is intended to apply to a wide variety of material entities, not just biological specimens.</vitro:descriptionAnnot>
<rdfs:label xml:lang="en">Identification Process</rdfs:label>
</owl:Class>
<!-- http://vivoweb.org/ontology/core#Institute --> <!-- http://vivoweb.org/ontology/core#Institute -->
<owl:Class rdf:about="http://vivoweb.org/ontology/core#Institute"> <owl:Class rdf:about="http://vivoweb.org/ontology/core#Institute">
@ -10028,6 +10082,21 @@ This class allows for linking an author to a publication while indicating inform
<!-- http://vivoweb.org/ontology/core#MeasurementProcess -->
<owl:Class rdf:about="http://vivoweb.org/ontology/core#MeasurementProcess">
<rdfs:subClassOf rdf:resource="http://vivoweb.org/ontology/core#CurationProcess"/>
<obo:IAO_0000111>Measured</obo:IAO_0000111>
<obo:IAO_0000114 rdf:resource="http://purl.obolibrary.org/obo/IAO_0000123"/>
<obo:IAO_0000115 xml:lang="en">A curation process in which data are collected about a specimen in a collection</obo:IAO_0000115>
<obo:IAO_0000116 xml:lang="en">Under development</obo:IAO_0000116>
<obo:IAO_0000117 xml:lang="en">PERSON: Anne Thessen</obo:IAO_0000117>
<vitro:descriptionAnnot>possibly has broader synonym OBI assay OBI:0000070 because all measurement processes will be assays, but not all assays will be performed on a material entity in a collection</vitro:descriptionAnnot>
<rdfs:label xml:lang="en">Measurement Process</rdfs:label>
</owl:Class>
<!-- http://vivoweb.org/ontology/core#MedicalResidency --> <!-- http://vivoweb.org/ontology/core#MedicalResidency -->
<owl:Class rdf:about="http://vivoweb.org/ontology/core#MedicalResidency"> <owl:Class rdf:about="http://vivoweb.org/ontology/core#MedicalResidency">

View file

@ -1,6 +1,20 @@
This directory contains ontology "TBox" files with class and property definitions. This directory contains ontology "TBox" files with class and property
These are loaded by the VIVO application when it starts for the first time, after definitions or annotations that are intended to be editable in the VIVO GUI.
the initial installation or after an upgrade installation that involves changes
to these files. 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. See ../filegraph/README.md for more information about "TBox" files.

View file

@ -1,5 +0,0 @@
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ts_: <https://litvinovg.pro/text_structures#> .
ts_:elenphArticle vitro:customDisplayViewAnnot "elenphAritcle.ftl"^^xsd:string .

View file

@ -1,5 +0,0 @@
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ts_: <https://litvinovg.pro/text_structures#> .
ts_:elenphExcerpt vitro:customDisplayViewAnnot "elenphExcerpt.ftl"^^xsd:string .

View file

@ -1,5 +0,0 @@
@prefix vitro: <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix pr: <https://iph.ras.ru/relationships#> .
pr:rubric vitro:customDisplayViewAnnot "rubric.ftl"^^xsd:string .

View file

@ -1,4 +1,5 @@
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <settings xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
<profiles> <profiles>

View file

@ -7,13 +7,13 @@
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-installer-home</artifactId> <artifactId>vivo-installer-home</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<parent> <parent>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-installer</artifactId> <artifactId>vivo-installer</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<relativePath>..</relativePath> <relativePath>..</relativePath>
</parent> </parent>
@ -24,6 +24,34 @@
</properties> </properties>
<profiles> <profiles>
<profile>
<id>package</id>
<activation>
<property><name>vivo-dir</name></property>
</activation>
<build>
<finalName>${app-name}</finalName>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>src/main/assembly/home.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile> <profile>
<id>install</id> <id>install</id>
<activation> <activation>
@ -108,11 +136,11 @@
<type>tar.gz</type> <type>tar.gz</type>
</dependency> </dependency>
<!-- Dependency for multilingual support --> <!-- Dependency for multilingual support -->
<!-- dependency> <dependency>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-languages-home</artifactId> <artifactId>vivo-languages-home-core</artifactId>
<version>[2.0.0,2.1.0)</version> <version>${project.version}</version>
<type>tar.gz</type> <type>tar.gz</type>
</dependency --> </dependency>
</dependencies> </dependencies>
</project> </project>

View file

@ -7,12 +7,13 @@
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-installer</artifactId> <artifactId>vivo-installer</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>VIVO Installer</name> <name>VIVO Installer</name>
<properties> <properties>
<app-name>vivo</app-name>
<vitro-version>${project.version}</vitro-version> <vitro-version>${project.version}</vitro-version>
<maven-site-plugin.skip>true</maven-site-plugin.skip> <maven-site-plugin.skip>true</maven-site-plugin.skip>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -41,12 +42,6 @@
<skip>true</skip> <skip>true</skip>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins> </plugins>
<pluginManagement> <pluginManagement>
<plugins> <plugins>
@ -70,10 +65,6 @@
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version> <version>2.10</version>
</plugin> </plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
</plugin>
<plugin> <plugin>
<artifactId>maven-enforcer-plugin</artifactId> <artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version> <version>1.4.1</version>
@ -228,6 +219,21 @@
</plugins> </plugins>
</build> </build>
</profile> </profile>
<profile>
<id>skip</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles> </profiles>
<distributionManagement> <distributionManagement>
@ -235,6 +241,14 @@
<id>vivo-installer</id> <id>vivo-installer</id>
<url>http://vivo-project.github.io/</url> <url>http://vivo-project.github.io/</url>
</site> </site>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement> </distributionManagement>
<reporting> <reporting>

View file

@ -7,13 +7,13 @@
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-installer-vivo</artifactId> <artifactId>vivo-installer-vivo</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>war</packaging> <packaging>war</packaging>
<parent> <parent>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-installer</artifactId> <artifactId>vivo-installer</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<relativePath>..</relativePath> <relativePath>..</relativePath>
</parent> </parent>
@ -122,6 +122,7 @@
</profiles> </profiles>
<build> <build>
<finalName>${app-name}</finalName>
<plugins> <plugins>
<plugin> <plugin>
<artifactId>maven-install-plugin</artifactId> <artifactId>maven-install-plugin</artifactId>
@ -153,18 +154,18 @@
<type>war</type> <type>war</type>
</dependency> </dependency>
<!-- Dependencies for multilingual support --> <!-- Dependencies for multilingual support -->
<!-- dependency> <dependency>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vitro-languages-webapp</artifactId> <artifactId>vitro-languages-webapp-core</artifactId>
<version>[2.0.0,2.1.0)</version> <version>${project.version}</version>
<type>war</type> <type>war</type>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-languages-webapp</artifactId> <artifactId>vivo-languages-webapp-core</artifactId>
<version>[2.0.0,2.1.0)</version> <version>${project.version}</version>
<type>war</type> <type>war</type>
</dependency --> </dependency>
<dependency> <dependency>
<groupId>javax.servlet</groupId> <groupId>javax.servlet</groupId>

View file

@ -24,7 +24,7 @@
# debug.log4j.properties exists will be used instead, if it exists, but is not stored in Subversion. # debug.log4j.properties exists will be used instead, if it exists, but is not stored in Subversion.
log4j.appender.AllAppender=org.apache.log4j.RollingFileAppender log4j.appender.AllAppender=org.apache.log4j.RollingFileAppender
log4j.appender.AllAppender.File= ${catalina.base}/logs/${app-name}.all.log log4j.appender.AllAppender.File=${catalina.base}/logs/${app-name}.all.log
log4j.appender.AllAppender.MaxFileSize=10MB log4j.appender.AllAppender.MaxFileSize=10MB
log4j.appender.AllAppender.MaxBackupIndex=10 log4j.appender.AllAppender.MaxBackupIndex=10
log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout log4j.appender.AllAppender.layout=org.apache.log4j.PatternLayout

55
pom.xml
View file

@ -1,13 +1,11 @@
<project <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-project</artifactId> <artifactId>vivo-project</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>VIVO</name> <name>VIVO</name>
@ -43,11 +41,9 @@
</developer> </developer>
</developers> </developers>
<!-- <!-- The SCM repository location is used by Continuum to update against
The SCM repository location is used by Continuum to update against when changes have occurred. This spawns a new build cycle and releases snapshots
when changes have occurred. This spawns a new build cycle and releases into the snapshot repository below. -->
snapshots into the snapshot repository below.
-->
<scm> <scm>
<connection>scm:git:git@github.com:vivo-project/VIVO.git</connection> <connection>scm:git:git@github.com:vivo-project/VIVO.git</connection>
<developerConnection>scm:git:git@github.com:vivo-project/VIVO.git</developerConnection> <developerConnection>scm:git:git@github.com:vivo-project/VIVO.git</developerConnection>
@ -72,6 +68,28 @@
</modules> </modules>
<profiles> <profiles>
<profile>
<id>Vitro-languages</id>
<activation>
<file>
<exists>../Vitro-languages/pom.xml</exists>
</file>
</activation>
<modules>
<module>../Vitro-languages</module>
</modules>
</profile>
<profile>
<id>VIVO-languages</id>
<activation>
<file>
<exists>../VIVO-languages/pom.xml</exists>
</file>
</activation>
<modules>
<module>../VIVO-languages</module>
</modules>
</profile>
<profile> <profile>
<id>vitro</id> <id>vitro</id>
<activation> <activation>
@ -335,7 +353,8 @@
</configuration> </configuration>
</plugin> </plugin>
<!-- Used to validate all code style rules in source code using Checkstyle --> <!-- Used to validate all code style rules in source code using
Checkstyle -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId> <artifactId>maven-checkstyle-plugin</artifactId>
@ -343,7 +362,8 @@
<executions> <executions>
<execution> <execution>
<id>verify-style</id> <id>verify-style</id>
<!-- Bind to verify so it runs after package & unit tests, but before install --> <!-- Bind to verify so it runs after package & unit
tests, but before install -->
<phase>verify</phase> <phase>verify</phase>
<goals> <goals>
<goal>check</goal> <goal>check</goal>
@ -475,9 +495,11 @@
<report>test-javadoc</report> <report>test-javadoc</report>
</reports> </reports>
</reportSet> </reportSet>
<reportSet><!-- aggregate reportSet, to define in poms having modules --> <reportSet><!-- aggregate reportSet, to define in poms
having modules -->
<id>aggregate</id> <id>aggregate</id>
<inherited>false</inherited><!-- don't run aggregate in child modules --> <inherited>false</inherited><!-- don't run aggregate
in child modules -->
<reports> <reports>
<report>aggregate</report> <report>aggregate</report>
</reports> </reports>
@ -501,10 +523,9 @@
</plugins> </plugins>
</reporting> </reporting>
<!-- <!-- Add a custom repository, which is actually just a simple GitHub
Add a custom repository, which is actually just a simple GitHub project project in order to distribute some dependencies that aren't part of Maven
in order to distribute some dependencies that aren't part of Maven central central -->
-->
<repositories> <repositories>
<repository> <repository>
<id>vivo-dependencies</id> <id>vivo-dependencies</id>

View file

@ -34,7 +34,7 @@
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<version>4.12</version> <version>4.13.1</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>

60
start.sh Normal file
View file

@ -0,0 +1,60 @@
#!/bin/bash
set -e
# allow easier debugging with `docker run -e VERBOSE=yes`
if [[ "$VERBOSE" = "yes" ]]; then
set -x
fi
# allow easier reset home with `docker run -e RESET_HOME=true`
if [[ "$RESET_HOME" = "true" ]]; then
echo 'Clearing VIVO HOME /usr/local/vivo/home'
rm -rf /usr/local/vivo/home/*
fi
# copy home bin if not exists
if [ ! -d /usr/local/vivo/home/bin ]; then
echo "Copying home bin directory to /usr/local/vivo/home/bin"
cp -r /vivo-home/bin /usr/local/vivo/home/bin
fi
# copy home config if not exists
if [ ! -d /usr/local/vivo/home/config ]; then
echo "Copying home config directory to /usr/local/vivo/home/config"
cp -r /vivo-home/config /usr/local/vivo/home/config
fi
# copy home rdf if not exists
if [ ! -d /usr/local/vivo/home/rdf ]; then
echo "Copying home rdf directory to /usr/local/vivo/home/rdf"
cp -r /vivo-home/rdf /usr/local/vivo/home/rdf
fi
# copy runtime.properties if it does not already exist in target home directory
if [ -f /usr/local/vivo/home/config/example.runtime.properties ]; then
if [ ! -f /usr/local/vivo/home/config/runtime.properties ]
then
echo "Copying example.runtime.properties to /usr/local/vivo/home/config/runtime.properties"
cp /usr/local/vivo/home/config/example.runtime.properties /usr/local/vivo/home/config/runtime.properties
# template runtime.properties vitro.local.solr.url value to $SOLR_URL value
echo "Templating runtime.properties vitro.local.solr.url = $SOLR_URL"
sed -i "s,http://localhost:8983/solr/vivocore,$SOLR_URL,g" /usr/local/vivo/home/config/runtime.properties
else
echo "Using existing /usr/local/vivo/home/config/runtime.properties"
fi
fi
# copy applicationSetup.n3 if it does not already exist in target home directory
if [ -f /usr/local/vivo/home/config/example.applicationSetup.n3 ]; then
if [ ! -f /usr/local/vivo/home/config/applicationSetup.n3 ]
then
echo "Copying example.applicationSetup.n3 to /usr/local/vivo/home/config/applicationSetup.n3"
cp /usr/local/vivo/home/config/example.applicationSetup.n3 /usr/local/vivo/home/config/applicationSetup.n3
else
echo "Using existing /usr/local/vivo/home/config/applicationSetup.n3"
fi
fi
catalina.sh run

View file

@ -7,13 +7,13 @@
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-webapp</artifactId> <artifactId>vivo-webapp</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<packaging>war</packaging> <packaging>war</packaging>
<parent> <parent>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-project</artifactId> <artifactId>vivo-project</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
<relativePath>..</relativePath> <relativePath>..</relativePath>
</parent> </parent>
@ -69,7 +69,7 @@
<dependency> <dependency>
<groupId>org.vivoweb</groupId> <groupId>org.vivoweb</groupId>
<artifactId>vivo-api</artifactId> <artifactId>vivo-api</artifactId>
<version>1.11.2-SNAPSHOT</version> <version>1.12.0-SNAPSHOT</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>

View file

@ -1,27 +0,0 @@
@prefix ts_: <https://litvinovg.pro/text_structures#> .
@prefix display: <http://vitro.mannlib.cornell.edu/ontologies/display/1.1#> .
@prefix mydomain: <http://vivo.mydomain.edu/individual/> .
ts_:elenphExcerpt display:hasCustomView mydomain:elenphExcerptShortView .
mydomain:elenphExcerptShortView
a display:customViewForIndividual ;
display:appliesToContext "SEARCH" ;
display:hasTemplate "elenphExcerptShortView.ftl" ;
display:hasDataGetter mydomain:elenphExcerptShortViewDataGetter .
mydomain:elenphExcerptShortViewDataGetter
a <java:edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter>;
display:saveToVar "excerptInfo";
display:query
"""
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX vivo: <http://vivoweb.org/ontology/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ts_: <https://litvinovg.pro/text_structures#>
SELECT ?property ?value
WHERE {
?individualUri ?property ?value .
?individualUri rdf:type ts_:elenphExcerpt .
}
""" .

View file

@ -5,6 +5,10 @@
# https://sourceforge.net/apps/mediawiki/vivo/index.php?title=The_StartupManager # https://sourceforge.net/apps/mediawiki/vivo/index.php?title=The_StartupManager
# #
# This listener must be run before any other code that uses resource bundles,
# otherwise there will be problems with i18n-support.
org.vivoweb.webapp.startup.i18nSetup
edu.cornell.mannlib.vitro.webapp.servlet.setup.JvmSmokeTests edu.cornell.mannlib.vitro.webapp.servlet.setup.JvmSmokeTests
edu.cornell.mannlib.vitro.webapp.application.ApplicationSetup edu.cornell.mannlib.vitro.webapp.application.ApplicationSetup
@ -21,6 +25,9 @@ edu.cornell.mannlib.vitro.webapp.config.RevisionInfoSetup
edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory$Setup
# For multiple language support
edu.cornell.mannlib.vitro.webapp.i18n.selection.LocaleSelectionSetup
edu.cornell.mannlib.vitro.webapp.servlet.setup.ConfigurationModelsSetup edu.cornell.mannlib.vitro.webapp.servlet.setup.ConfigurationModelsSetup
edu.cornell.mannlib.vitro.webapp.servlet.setup.ContentModelSetup edu.cornell.mannlib.vitro.webapp.servlet.setup.ContentModelSetup
@ -67,9 +74,6 @@ org.vivoweb.webapp.startup.SearchResultTemplateModelSetup
edu.ucsf.vitro.opensocial.OpenSocialSmokeTests edu.ucsf.vitro.opensocial.OpenSocialSmokeTests
# For multiple language support
edu.cornell.mannlib.vitro.webapp.i18n.selection.LocaleSelectionSetup
# The search indexer uses a "public" permission, so the PropertyRestrictionPolicyHelper # The search indexer uses a "public" permission, so the PropertyRestrictionPolicyHelper
# and the PermissionRegistry must already be set up. # and the PermissionRegistry must already be set up.
edu.cornell.mannlib.vitro.webapp.searchindex.SearchIndexerSetup edu.cornell.mannlib.vitro.webapp.searchindex.SearchIndexerSetup
@ -91,5 +95,3 @@ edu.cornell.mannlib.vitro.webapp.controller.individual.VIVOIndividualResponseBui
# This should be near the end, because it will issue a warning if the connection to the SearchEngine times out. # This should be near the end, because it will issue a warning if the connection to the SearchEngine times out.
edu.cornell.mannlib.vitro.webapp.servlet.setup.SearchEngineSmokeTest edu.cornell.mannlib.vitro.webapp.servlet.setup.SearchEngineSmokeTest
org.vivoweb.webapp.startup.i18nSetup

View file

@ -0,0 +1,37 @@
.capability, .edge, .group, .links2, .links3, .links4 {
text-indent: 28px;
font-size: 9px;
width: 98%;
background-repeat: no-repeat;
background-image: url("../../../images/visualization/capabilitymap/key-sprite.png")
}
.capability {
background-position: 0px 0px;
height: 22px;
}
.edge {
background-position: 0px -22px;
height: 24px;
}
.group {
background-position: 0px -48px;
height: 20px;
}
.links2 {
background-position: 0px -73px;
height: 20px;
}
.links3 {
background-position: 0px -96px;
height: 20px;
}
.links4 {
background-position: 0px -121px;
height: 20px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,908 +0,0 @@
#
# Text strings for the controllers and templates
#
# Default (English)
#
uri_icon = uri icon
#
# "partial" individual templates ( /templates/freemarker/body/partials/individual )
#
contact_capitalized = Contact
phone = phone
primary_email = primary email
additional_emails = additional emails
email = email
primary_email_capitalized = Primary Email
additional_emails_capitalized = Additional Emails
contact_info = Contact Info
active_grants_for = Active Grants for the
department = department
grant_name = Grant Name
close_date = Close Date
no_active_grants = There are currently no active grants for this department.
view_all_active_grants = View all active grants
individuals_with_researh_area_one = Here are the individuals in <a href="{1}">{0}</a> who have an interest in this research area.
individuals_with_researh_area_two = Here are the individuals in the <a href="{1}">{0}</a> who have an interest in this research area.
individuals_with_dept = Here are the individuals with an interest in <a href="{1}">{0}</a> who are in this organization.
faculty_with_researh_area = Here are the faculty members in the {0} department who have an interest in this research area.
view_all_individuals_in_area = View all individuals with an interest in this area.
view_all_individuals_in_dept = View all individuals in this organization.
view_all_faculty_in_area = View all faculty with an interest in this area.
faculty_research_areas = Faculty Research Areas
affiliated_research_areas = Affiliated Research Areas
affiliated_departments = Associated Departments
organization = individuals with the research area in this organization
share_the_uri = share the uri
export_qr_codes = Export QR codes
vcard_qr = vCard QR
vcard_qr_code = vCard QR Code
close_capitalized = Close
qr_icon = qr icon
qr_code = QR Code
invalid_qr_code_parameter = You have passed an invalid value for the qrCode display parameter.
research_areas = research areas
publications_in_vivo = Publications in VIVO
co_author = co-author
co_authors = co-authors
co_author_network = Co-author Network
map_of_science = map of science
map_of_science_capitalized = Map of Science
co_investigator_network = co-investigator network
co_investigator_network_capitalized = Co-investigator Network
networks = Networks
co_authors_capitalized = Co-authors
temporal_graph = temporal graph
temporal_graph_capitalized = Temporal Graph
websites = Websites
advisee_label = advisee label
advisor_label = advisor label
candidate = candidate
candidacy = candidacy
advisingRel_label = advisory label
editor_abbreviated = Ed.
volume_abbreviated = Ed.
resource_name = resource name
missing_info_resource = missing information resource
award_receipt_name = award receipt name
award_name = award name
conferred_by = conferred by
conferred_on = conferred on
selected_award = Selected Award
incomplete_date_time_interval = incomplete date/time interval
incomplete_date_time_value = incomplete date/time value
in = in
organization_name = organization name
missing_organization = missing organization
middle_organization = middle organization
concept_name = concept name
at = at
event_name = event name
missing_event = missing event
event_label = event label
activity_name = activity name
missing_activity = missing activity
awarded_by = awarded by
administered_by = administered by
presentation_name = presentation name
missing_presentation = missing presentation
conference = conference
series = series
author_name = author name
missing_author = missing author
person_name = person name
missing_person_in_posn = missing person in this position
missing_person_in_role = missing person in this role
scopus_id_link = Scopus ID Link
click_to_view_web_page = Click to view the {0} web page
screenshot_of_webpage = screenshot of webpage {0}
click_webpage_icon = click webpage icon
link_text = link text
link_name = link name
no_url_provided = no url provided for link
#
# individual templates ( /templates/freemarker/body/individual )
#
standard_view = Standard profile view
quick_view = Quick profile view
quick_view_icon = quick view icon
geographic_focus = Geographic Focus
background_top_image = background top image
full_view_icon = full view icon
profile_type = Profile Type
#
# body templates ( /templates/freemarker/body/ )
#
export_qr_code = Export QR code
more_qr_info = More info on QR codes
what_is_this = What is this?
view_this_profile = View this person's profile
vcard = Vcard
hyperlink = Hyperlink
#
# harvester templates ( /templates/freemarker/body/harvester )
#
must_be_admin = You must be an administrator to use this tool.
error_no_job_specified = Error: No file harvest job was specified, or an unknown job was specified.
probably_a_bug_so_report = The end user should not see this error under normal circumstances, so this is probably a bug and should be reported.
return_to_ingest_menu = Return to the Data Ingest Tools menu
ingest_menu = Ingest Menu
data_being_harvested = Please wait while your data is harvested.
harvest_complete = Harvest complete. For another, please refresh the page.
error_harvest_cannot_continue = An error has occurred and the file harvest cannot continue.
harvest_error_instructions_one = This is most likely due to an improper Harvester configuration. Please ensure the following:
harvest_error_instructions_two = VIVO Harvester is installed.
the_capitalized = The
harvester_location = harvester.location
harvest_error_instructions_three = property in runtime.properties is pointed to the Harvester installation directory.
harvest_error_instructions_fourA = In VIVO Harvester, the web server user (typically tomcat6) has read and write access to the
harvest_error_instructions_fourB = vivo/
harvest_error_instructions_fourC = directory and all of its children.
harvest_error_instructions_fiveA = In VIVO Harvester, the
harvest_error_instructions_fiveB = logs/
harvest_error_instructions_fiveC = directory exists and the web server user has read and write access to it.
harvest_error_instructions_sixA = In VIVO Harvester, the file
harvest_error_instructions_sixB = vivo/config/vivo.xml
harvest_error_instructions_sixC = is properly configured with your database information and namespace.
step_one = Step 1
download_template = Download template
download = Download
step_two = Step 2
fill_in_data = Fill in data
help_capitalized = Help
fill_in_template_with_data = Fill in the template with your data. You may fill in multiple templates if you wish to harvest multiple files at once.
step_three = Step 3
upload_files = Upload file(s)
upload_completed_templates = Upload your completed template(s).
upload_capitalized = Upload
uploaded_files = Uploaded files
step_four = Step 4
harvest_capitalized = Harvest
click_to_harvest = Click the button to harvest your file(s).
step_five = Step 5
view_results = View results
script_executed = Script being executed
progress_capitalized = Progress
undefined_runtime_property = property in runtime.properties is undefined.
define_value_for_property = In order to use this feature, please define a value for this property that points to the Harvester installation directory before redeploying and restarting the application.
#
# lib templates ( /templates/freemarker/body/lib )
#
faculty_capitalized = Faculty
loading_faculty = Loading faculty . . .
research_capitalized = Research
view_all = View all ...
view_all_research = view all research
no_research_content_found = No research content found.
departments = Departments
loading_map_information = Loading map information . . .
verify_match_capitalized = Verify this match
#
# custom form templates ( /templates/freemarker/edit/forms )
#
manage_concepts = Manage Concepts
no_concepts_specified = There are currently no concepts specified.
return_to_profile = Return to Profile Page
external_vocabulary_services = External Vocabulary Services
create_own_concept = Select or create a VIVO-defined concept.
add_selected_concept = Add Selected Concept
cannot_find_concept = Can't find the concept you want? Select or create a VIVO-defined concept.
add_concept = Add Concept
event_type = event type
attended = attended
manage_authors = Manage Authors
no_linked_author = no linked author
remove_author_link = remove author link
add_author = Add Author
return_to_publication = Return to publication
add_an_author = Add an Author
person_capitalized = Person
organization_capitalized = Organization
middle_name = Middle name
initial_okay = initial okay
selected_author = Selected Author
organization_name_capitalized = Organization name
selected_organization = Selected Organization
clinical_activity = clinical activity
clinical_activity_type = clinical activity type
year_hint_format = YYYY
collection_series_editor_role = collection or series editor role
editor_role_in = editor role in
edit_wbpage_of = Edit webpage of
add_webpage_for = Add webpage for
add_webpage = Add Web Page
url_type = URL Type
faculty_of_1000 = Faculty of 1000 Link
standard_web_link = Standard Web Link
webpage_name = Webpage Name
investigator_entry_for = investigator entry for
investigator_capitalized = Investigator
principal_investigator_entry_for = principal investigator entry for
co_principal_investigator_entry_for = co-principal investigator entry for
start_year_must_precede_end = The Start Year must be earlier than the End Year.
end_year_must_be_later = The End Year must be later than the Start Year.
enter_or_select_grant = Please enter or select a value in the Grant Name field.
selected_grant = Selected Grant
years_of_grant_participation = Years of Participation in Grant
leadership = leadership
organization_type = organization type
membership = membership
membership_in = membership in
organizations = organizations
organizer_of = organizer of
outreach_comm_service = outreach & community service
outreach_comm_service_in = outreach & community service in
select_or_enter_name = Please select an existing value or enter a new value in the Name field.
presentation_entry_for = presentation entry for
presentation_capitalized = Presentation
presentation_type = Presentation Type
role_in = Role in
presentation_hint = e.g., Moderator, Speaker, Panelist
presented_at = Presented At
selected_conference = Selected Conference
select_existing_pub_or_enter_new = Please select an existing publication in the Title field or enter a new one.
publication_entry_for = publication entry for
publication_type = Publication Type
selected_publication = Selected Publication
published_in = Published in
selected_journal = Selected Journal
selected_event = Selected Event
proceedings_of = Proceedings of
editor_capitalized = Editor
required_with_last_name = required with new Last name
selected_editor = Selected Editor
publisher_capitalized = Publisher
selected_publisher = Selected Publisher
volume_capitalized = Volume
number_capitalized = Number
issue_capitalized = Issue
chapter_capitalized = Chapter
start_page = Start Page
end_page = End Page
selected_book = Selected Book
publication_date = Publication Date
place_of_publication = Place of Publication
research_activity = research activity
research_activity_type = research activity type
reviewer_of = reviewer of
entry_for = entry for
specify_role_for_activity = Please specify a role for this activity.
start_year = Start Year
service_to_profession = service to the profession
service_to_profession_in = service to the profession in
teaching_activity = teaching activity
teaching_activity_type = teaching activity type
teaching_role_hint = e.g., Instructor, Facilitator, Assistant
create_own_concept_all_caps = Create Your Own Concept
concept_capitalized = Concept
selected_concept = Selected Concept
create_concept = Create Concept
return_to_manage_concepts = Return to Manage Concepts
institutional_internal_class = Institutional Internal Class
internal_class_intro_one = This class will be used to designate those individuals internal to your institution.
internal_class_intro_two = This will allow you to limit the individuals displayed on your menu pages (People, Research, etc.) to only those within your institution.
no_local_oncologies = There are currently no recognized local ontologies.
namespace_must_use_this_pattern = In order for a local ontology to be recognized here, its namespace URI must follow this pattern
new_local_oncology = a new local ontology
return_here_to_define_class = and then return here to define the institutional internal class.
select_existing_local_class = Select an existing class from a local extension
cannot_find_class = Can't find an appropriate class?
create_new_class = Create a new class
create_new_one = Create a new one
use_capitals_each_word = use capitals for the first letter of each word
local_namespace = Local Namespace
problematic_section_error = Error: problematic section as above should all have been handled.
new_local_ontology = new local ontology
manage_grants_and_projects = Manage Grants & Projects for
check_grants_to_exclude = Check those grants and projects you want to <em>exclude</em> from the profile page.
manage_affiliated_people = Manage People Affiliated with
check_people_to_exclude = Check those people you want to <em>exclude</em> from the profile page.
manage_publications_for = Manage Publications for
check_pubs_to_exclude = Check those publications you want to <em>exclude</em> from the profile page.
manage_web_pages = Manage Web Pages
has_no_webpages = This individual currently has no web pages specified. Add a new web page by clicking on the button below.
edit_webpage_link = edit web page link
delete_webpage_link = delete web page link
webpage_url = webpage url
add_new_web_page = Add New Web Page
enable_internal_class_one = To enable this option, you must first select an
enable_internal_class_two = for your instance
internal_class = institutional internal class
only_display = Only display
within_my_institution = within my institution
enter_a_name = Please enter a value in the Name field.
enter_last_name = Please enter a Last name for this person.
enter_first_name = Please enter a First name for this person.
posn_history_entry_for = position history entry for
enter_posn_title_value = Please enter a value in the Position Title field.
enter_posn_type_value = Please select a value in the Position Type field.
enter_or_select_person_value = Please select an existing value or enter a new value in the Person field.
position_title = Position Title
position_type = Position Type
selected_person = Selected Person
degree_candidacy = Degree Candidacy
subject_area = Subject Area
selected_subject_area = Selected Subject Area
selected_advisee = Selected Advisee
selected_advisor = Selected Advisor
advisee_capitalized = Advisee
advisor_capitalized = Advisor
advising_relationship_type = Advising Relationship Type
select_advising_relationship_type = Please select an Advising Relationship Type.
advisor_relationship_entry_for = advisor relationship entry for
advisee_relationship_entry_for = advisee relationship entry for
years_participating = Years of Participation
award_or_honor_for = award or honor for
select_Award_or_enter_name = Please select an existing value or enter a new value in the Award or Honor Name field.
award_honor_name = Award or Honor Name
conferred_by_capitalized = Conferred by
selected_conferred = Selected Conferrer
description = Description
year_awarded = Year Awarded
years_inclusive = Years Inclusive
award_hint = (e.g., for multi-year awards)
educational_training_for = educational training entry for
select_organization_type = Please select a value in the Organization Type field.
select_an_organization_name = Please enter or select a value in the Name field.
select_educational_training_value = Please select a value in the Type of Educational Training field.
org_type_capitalized = Organization Type
educational_training_type = Type of Educational Training
dept_or_school_name = Department or School Name within the
degree = Degree
missing_degree = missing degree
major_field = Major Field of Degree
supplemental_information = Supplemental Information
supplemental_information_hint = (e.g., Thesis title, Transfer info, etc.)
academic_studies_or_other = Academic Studies or Other Training
create_mailing_address = Create Mailing Address
mailing_address_for = mailing address for
enter_a_country = Please enter a value in the Country field.
enter_street_address = Please enter a value in the Street Address field.
enter_a_locality = Please enter a value in the City/Locality field.
enter_postal_code = Please enter a value in the Postal Code field.
country = Country
street_address = Street Address
city_locality = City/Locality
region = State/Province/Region
postal_code = Postal Code
posn_entry_for = position entry for
#
# coauthorship templates ( /templates/freemarker/visualization/coauthorship )
#
within_last_10_years = within the last 10 years
total = total
from = from
file = file
file_capitalized = File
view_full_timeline_and_network = View full timeline and co-author network.
download_data_as = Download data as
unique_coauthors_per_year = Unique Co-Authors per year
count_capitalized = Count
#
# copi templates ( /templates/freemarker/visualization/copi )
#
year_capitalized = Year
unique_coinvestigators = Unique co-investigators
co_investigator = co-investigator
co_investigators = co-investigators
unique_coinvestigators_per_year = Unique Co-Investigators per year
view_timeline_copi_network = View full timeline and co-investigator network.
#
# entity comparison templates ( /templates/freemarker/visualization/entitycomparison )
#
parent_organization_of = Parent organization of
temporal_graph_drill_up = temporal graph drill up
how_to_compare = How do you want to compare?
no_view_link = no view link
persistent_link_to_visualization = Persistent link to current visualization
error_notification = error notification
close_me = Close Me
what_to_compare = What do you want to compare?
organizations_capitalized = Organizations
people_capitalized = People
organization_hierarchy_note = Note: the organizations or people listed below are only those which are directly beneath {0} in the organization hierarchy. You may 'drill down' to see the organizations or people below a given sub-organization by selecting the chart icon next to a selected sub-organization's name below the graph on the right.
save_all_as_csv = Save All as CSV
clear_capitalized = Clear
clear_all_selected_entities = Clear all selected entities.
comparing_capitalized = Comparing
of = of
institutions_capitalized = Institutions
info_based_on_vivo_data = This information is based solely on {0} which have been loaded into the VIVO system.
you_have_selected = You have selected
of_a_maximum = of a maximum
schools = schools
legend_capitalized = Legend
with_unknown_year = with unknown year
with_known_year = with known year
from_current_incomplete_year = from current incomplete year
entity_comp_error_text1 = This organization has neither sub-organizations nor people with
entity_comp_error_text2 = in the system.
entity_comp_error_text3 = Please visit the full
entity_comp_error_text4 = for a more complete overview.
profile_page = profile page
publication = publication
published = published
publications = publications
by_publications = by Publications
publications_capitalized = Publications
grant = grant
granted = granted
grants = grants
by_grants = by Grants
grants_capitalized = Grants
activity = activity
activities = activities
#
# grant visualization templates ( /templates/freemarker/visualization/grant )
#
view_all_grants = view all grants
view_all_grants_text = View all VIVO grants and corresponding co-investigator network.
grant_per_year = Grants per year
link = link
#
# map of science templates ( /templates/freemarker/visualization/mapOfScience )
#
parent_entity = parent entity
map_of_science_icon = map of science icon
explore_activity = Explore activity
explore_capitalized = Explore
across_subdisciplines = across 554 scientific subdisciplines
compare_organizations = Compare organizations
mapped = mapped
save_unmapped_publications = Save Unmapped Publications
map_of_science_visualization = Map of Science Visualization
no_publications_for_this_organization = No publications in the system have been attributed to this organization.
please_visit = Please visit the
for_complete_overview = for a complete overview.
#
# model constructor templates ( /templates/freemarker/visualization/modelconstructor )
#
cached_models_regenerated = The following cached models will be regenerated.
uri_independent_model = URI Independent Model
currently_no_constructed_models = Currently there are no constructed models for use by visualization.
#
# person level templates ( /templates/freemarker/visualization/personlevel)
#
co_investigator_icon = co-investigator icon
co_authorship = co-authorship
this_author = this author
in_the_vivo_db = in the VIVO database.
no_papers_for = Currently there are no papers for
publication_s_capitalized = Publication(s)
co_author_s_capitalized = Co-author(s)
incomplete_data_note1 = Note: This information is based solely on publications that have been loaded into the VIVO system. This may only be a small sample of the person's total work.
incomplete_data_note2 = Go to your profile page to enter additional details about your publications.
incomplete_data_note3 = Log in to enter additional details about your publications on your profile page.
tables_capitalized = Tables
publications_per_year = Publications per year
investigator_name = investigator name
co_author_icon = co-author icon
currently_no_grants_for = Currently there are no {0} grants for
this_investigator = this investigator
grant_s_capitalized = Grant(s)
co_investigator_s_capitalized = Co-investigator(s)
incomplete_grant_data_note1 = Note: This information is based solely on grants that have been loaded into the VIVO system. This may only be a small sample of the person's total work.
incomplete_grant_data_note2 = Go to your profile page to enter additional details about your grants.
incomplete_grant_data_note3 = Log in to enter additional details about your grants on your profile page.
grants_per_year = Grants per year
grant_info_for_all_years = The information in the following tables is for all years.
grant_sparkline_note = The spark lines shown above reflect grants through the last complete calendar year. These tables, however, show the grant information for all years, based on the information loaded in the VIVO system.
#
# publication templates ( /templates/freemarker/visualization/publication)
#
numbers_based_on_publications_in_vivo = These numbers are based solely on publications that have been loaded into this VIVO application. If this is your profile, you can enter additional publications below.
last_ten_full_years = in the last 10 full years
last_ten_full = in the last 10 full
download_link = download link
years = years
#
# miscellaneous visualization templates ( /templates/freemarker/visualization)
#
visualization_tools = Visualization Tools
refresh_cached_vis_models = Refresh Cached Models for Visualization
why_needed = Why is it needed?
vis_tools_note_one = Large-scale visualizations like the Temporal Graph or the Map of Science involve calculating total counts of publications or of grants for some entity. Since this also means checking through all of its sub-entities, the underlying queries can be both memory-intensive and time-consuming. For a faster user experience, we wish to save the results of these queries for later re-use.
vis_caching_process = What's involved in the caching process?
vis_tools_note_two = To this end we have devised a caching solution which will retain information about the hierarchy of organizations -- namely, which publications are attributed to which organizations -- by storing the RDF model.
vis_tools_note_three = We're currently caching these models in memory. The cache is built (only once) on the first user request after a server restart. Because of this, the same model will be served until the next restart. This means that the data in these models may become stale depending upon when it was last created. This works well enough for now. In future releases we will improve this solution so that models are stored on disk and periodically updated.
vis_tools_note_four = The models are refreshed each time the server restarts. Since this is not generally practical on production instances, administrators can instead use the "refresh cache" link above to do this without a restart.
#
# custom form javascript variables ( /templates/freemarker/edit/js)
#
drag_drop_reorder_authors = Drag and drop to reorder authors
reordering_authors_failed = Reordering of authors failed.
confirm_author_removal = Are you sure you want to remove this author:
error_processing_author_request = Error processing request: author not removed
author_capitalized = Author
or_add_new_one = or add a new one.
vocabulary_service_unavailable = An error was encountered in executing this search.
no_serch_results_found = No search results were found.
label_type = Label (Type)
label_altLabels = Label (Alternate Labels)
definition_capitalized = Definition
best_match = Best Match
select_term_from_results = Please select at least one term from the search search results.
select_vocabulary_source_to_search = Please select at least one external vocabulary source to search.
confirm_term_deletion = Are you sure you want to remove this term?
error_term_not_deleted = Error processing request: term not removed
advising = advising
advising_relationship = advising relationship
select_or_create_organization = Select an existing Organization or create a new one.
grant_successfully_excluded = The item has been successfully excluded from the profile page.
error_excluding_grant = Error processing request: the item cannot be excluded from the profile page.
person_successfully_excluded = The person has been successfully excluded from the organization page.
error_excluding_person = Error processing request: the person cannot be excluded from the organization page.
publication_successfully_excluded = The publication will has been successfully excluded from the profile page.
error_excluding_publication = Error processing request: the publication cannot be excluded from the profile page.
drag_drop_to_reorder_webpages = Drag and drop to reorder web pages
webpage_reordering_failed = Reordering of web pages failed.
confirm_webpage_deletion = Are you sure you want to remove this web page?
error_removing_webpage = Error processing request: web page not removed.
#
# miscellaneous javascript variables ( productMods/js)
#
researcher = researcher
#
# individual javascript variables ( productMods/js/individual)
#
error_processing_type_change = Error processing request: the unchecked labels could not be deleted.
#
# visualization javascript variables ( productMods/js/visualization)
#
publications_with = Publications with
co_investigators_capitalized = Co-investigators
grants_with = Grants with
vis_first_link = First
vis_last_link = Last
vis_previous_link = Prev
vis_next_link = Next
max_entity_note = A Maximum 10 entities can be compared. Please remove some & try again.
organizations_and_people = Organizations and People
loading_data_for = Loading data for
data_for = Data for
refreshing_data_message = is now being refreshed. The visualization will load as soon as we are done computing, or you can search or browse other data in VIVO and come back in a few minutes.
disclaimer_text_one = This information is based solely on
disclaimer_text_two = which have been loaded into the VIVO system as of
level_undefined_error = ENTITY LEVEL UNDEFINED ERROR
total_number_of = Total Number of
number_of = Number of
have_an_unknown = have an unknown
year_not_chartered = year (not charted above)
in_completed_year = in a completed year
were = were
in_current_incomplete_year = in the current incomplete year (not charted above)
publication_count = Publication Count
grant_count = Grant Count
entity_type = Entity Type
entity_label = Entity Label
no_matching_entities_found = No matching entities found
clear_search_query = clear search query
short_max_entity_note = A Maximum of 10 entities can be compared.
information_capitalized = Information
content_requires_flash = This content requires the Adobe Flash Player.
get_flash = Get Flash
of_pubs = of pubs.
max_nbr_for_comp = The maximum number of items for comparison is 3.
no_matching_science_areas = No matching science areas found
subdisciplines = Subdisciplines
disciplines = Disciplines
science_area_level = Level of Science Area
of_activity = of activity
drill_down = drill down
disciplines_lower = disciplines
subdisciplines_lower = subdisciplines
show_discipline_labels = Show discipline labels
no_attributed_publications = No publications in the system have been attributed to this
none_of_the = None of the
publications_attributed_to = publications attributed to this
been_science_located = have been "science-located."
publication_attributed_to = The publication attributed to this
not_science_located = has not been "science-located."
no_journal_information = have no journal information.
no_matching_map_location = could not be matched with a map location using their journal information.
map_being_refreshed_msg = is now being refreshed. The visualization will load as soon as we are done computing, or you can search or browse other data in VIVO and come back in a few minutes.
publication_pubs = publications (pubs.)
percent_activity = % activity
#
# miscellaneous additions
#
standardview_tooltip_one = Click to display the
standardview_tooltip_two = profile quick view.
research_area_tooltip_one = Click an area to view others
research_area_tooltip_two = with the same interest.
quickview_tooltip = Click to view the standard profile page.
global_research = Global Research
country_wide_research = Country-wide Research
local_research = Local Research
selected_presentation = Selected Presentation
event_capitalized = Event
item_capitalized = Item
telephone_number_for = telephone number for
telephone_number = Telephone Number
enter_telephone_number = Please enter a value in the Telephone Number field.
email_address_for = email address for
enter_email_address = Please enter a value in the Email Address field.
full_name_for = full name for
title_not_found = Title not found.
speeches_capitalized = Speeches
theses_capitalized = Theses
select_document_type = Please select a value in the Document Type field.
select_a_document_name = Please enter or select a value in the Document Name field.
document_type_capitalized = Document Type
document_name_capitalized = Document Name
selected_document = Selected Document
editor_name = editor name
missing_editor = missing editor
drag_drop_reorder_editors = Drag and drop to reorder editors
reordering_editors_failed = Reordering of editors failed.
confirm_editor_removal = Are you sure you want to remove this editor:
error_processing_editor_request = Error processing request: editor not removed
manage_editors = Manage Editors
no_linked_editor = no linked editor
remove_editor_link = remove editor link
add_an_editor = Add an Editor
add_editor = Add Editor
please_select_type = Please select a type from the drop-down list.
preferred_title = Preferred Title
preferred_title_for = preferred title for
enter_preferred_title = Please enter a value in the Preferred Title field.
fax_number_for = fax number for
fax_number = Fax Number
enter_fax_number = Please enter a value in the Fax Number field.
credentials = credentials
select_credential_or_enter_name = Please enter or select a value in the Credential Name field.
type_of_credential = Type of Credential
credential_name = Credential Name
selected_credential = Selected Credential
year_issued = Year Issued
year_awarded_for = year awarded for
create_year_awarded = Create year awarded
edit_year_awarded = Edit year awarded
publication_date_for = publication date for
create_publication_date = Create publication date
edit_publication_date = Edit publication date
name_prefix = Name Prefix
name_suffix = Name Suffix
administering_organization_for = administering organization for
missing_credential = missing credential
grant_administered_by = grant being administered by
missing_grant = missing grant
editor_of_entry = editor of entry for
role_type = Role type
researcher_role = Researcher Role
search_service_btn = Search Service
through_today = Publications through today's date
doi_link=Digital Object Identifier (DOI)
using_cache_time=Using information cached at
#
#New Entries for i18n purposes
#
edit_entry_for_head_role=: Edit this "head of" role
edit_entry_for_member_role=: Edit this membership
edit_entry_for_clinical_role=: Edit this clinical activity
edit_entry_for_attendee_role=: Edit this participation
edit_entry_for_organizer_role=: Edit this organizer role
edit_entry_for_editor_role=: Edit this editor role
edit_entry_for_service_provider_role=: Edit this service provider role
edit_entry_for_outreach_provider_role=: Edit this outreach provider role
edit_entry_for_researcher_role=: Edit this researcher role
edit_entry_for_reviewer_role=: Edit this reviewer role
edit_entry_for_teacher_role=: Edit this teaching role
create_entry_for_head_role=: Add a new "head of" role
create_entry_for_member_role=: Add a new membership
create_entry_for_clinical_role=: Add a new clinical activity
create_entry_for_attendee_role=: Add a new participation
create_entry_for_organizer_role=: Add a new Organizer role
create_entry_for_editor_role=: Add a new editor role
create_entry_for_service_provider_role=: Add a new service provider role
create_entry_for_outreach_provider_role=: Add a new outreach provider role
create_entry_for_researcher_role=: Add a new researcher role
create_entry_for_reviewer_role=: Add a new reviewer role
create_entry_for_teacher_role=: Add a new teaching role
save_changes=Save
start_capitalized = Start
end_capitalized = End
institution_name=Name of Institution
role_in_institution=Role in Institution
presentation_name_capitalized=Title of Presentation
role_in_presentation_capitalized=Role in Presentation
advisee_capitalized_first_name=First Name
advisee_capitalized_lastname=Last Name
add_orcid_id=Add an iD
orcid_title_add = Do you want to add an ORCID iD?
orcid_step1_add = Step 1: Adding your ORCID iD
orcid_title_confirm = Do you want to add an ORCID iD?
orcid_step1_confirm = Step 1: Adding your ORCID iD
orcid_step1_description = <ul><li>VIVO redirects you to ORCID's web site.</li> \
<li>You log in to your ORCID account. <ul class="inner"><li>If you don't have an account, you can create one.</li></ul></li> \
<li>You tell ORCID that VIVO may read your ORCID record. (one-time permission)</li> \
<li>VIVO reads your ORCID record.</li> \
<li>VIVO notes that your ORCID iD is confirmed.</li></ul>
orcid_step1_denied = <p>You denied VIVO's request to read your ORCID record.</p> \
<p>Confirmation can't continue.</p>
orcid_step1_failed = <p>VIVO failed to read your ORCID record.</p> \
<p>Confirmation can't continue.</p>
orcid_step1_confirmed = <p>Your ORCID iD is confirmed as {0}</p>
orcid_step2_heading = Step 2 (recommended): Linking your ORCID record to VIVO
orcid_step2_description = <ul><li>VIVO redirects you to ORCID's web site</li> \
<li>You tell ORCID that VIVO may add an "external ID" to your ORCID record. (one-time permission)</li> \
<li>VIVO adds the external ID.</li></ul>
orcid_step2_already_present = <p>Your ORCID record already includes a link to VIVO.</p>
orcid_step2_denied = <p>You denied VIVO's request to add an External ID to your ORCID record.</p> \
<p>Linking can't continue.</p>
orcid_step2_failed = <p>VIVO failed to add an External ID to your ORCID record.</p> \
<p>Linking can't continue.</p>
orcid_step2_added = <p>Your ORCID record is linked to VIVO</p>
orcid_button_step1 = Continue Step 1
orcid_button_step2 = Continue Step 2
orcid_step_completed = (step completed)
orcid_view_orcid_record = View your ORCID record.
orcid_return_to_vivo = Return to your VIVO profile page
# Messages for creating and linking resources (publications)
create_and_link_enter=Enter {0}:
create_and_link_claim_for=Claiming works for<br />{0}
create_and_link_confirm_works=Confirm your work(s)
create_and_link_confirm_works_intro=Please check that these are the work(s) that you wish to claim, and indicate your relationship with them.
create_and_link_authors=Authors
create_and_link_authors_desc=If you are an author of a work, please select your name in the author list.<br />Retrieved metadata may be incomplete. If you can not see your name listed, select "Unlisted Author".
create_and_link_editors=Editors
create_and_link_editors_desc=If you edited the work, please select "Editor".
create_and_link_not_mine_desc=If you do not wish to claim a work, select "This is not my work".
create_and_link_already_claimed=You have already claimed this work.
create_and_link_unlisted_author=Unlisted Author
create_and_link_editor=Editor
create_and_link_not_mine=This is not my work
create_and_link_remaining=There are {0} ids remaining
create_and_link_thank_you=Thank you
create_and_link_finished=There are no more works left to claim.<br />You may enter more IDs below, or view your profile.
create_and_link_go_profile=Go to profile
create_and_link_enter_dois_intro=You may enter one or more DOIs to match, and can be entered either as an ID or URL:<br /><br />e.g.
create_and_link_enter_dois_supported=Currently, DOIs issued by Crossref, DataCite and mEDRA are supported.<br />Each DOI should be separated by a comma or new line.
create_and_link_enter_pmid_intro=You may enter one or more PubMed IDs to match. Each ID should be separated by a comma or new line.
create_and_link_enter_pmid_supported=Note that metadata will be retrieved from Crossref, if the PubMed ID can be resolved to a DOI.
create_and_link_unknown_profile=Unknown Profile
create_and_link_unknown_resource=Unknown Resource Type
create_and_link_unauthorized_for_profile=You do not have permissions to claim for this user
create_and_link_submit_ids=Submit IDs
create_and_link_submit_confirm=Confirm
create_and_link_error=Unable to retrieve citation details
create_and_link_type_article=Article
create_and_link_type_article_journal=Journal Article
create_and_link_type_book=Book
create_and_link_type_chapter=Chapter
create_and_link_type_dataset=Dataset
create_and_link_type_figure=Image
create_and_link_type_graphic=Image
create_and_link_type_legal_case=Legal Case
create_and_link_type_legislation=Legislation
create_and_link_type_manuscript=Manuscript
create_and_link_type_map=Map
create_and_link_type_musical_score=Musical Score
create_and_link_type_paper_conference=Conference Paper
create_and_link_type_patent=Patent
create_and_link_type_personal_communication=Letter
create_and_link_type_post_weblog=Blog
create_and_link_type_report=Report
create_and_link_type_review=Review
create_and_link_type_speech=Speech
create_and_link_type_thesis=Thesis
create_and_link_type_webpage=Webpage
claim_publications_by=Claim publications by
claim_publications_by_doi=DOI
claim_publications_by_pmid=PubMed ID

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

View file

@ -64,7 +64,7 @@ $(document).ready(function(){
} }
vcard += "END:VCARD"; vcard += "END:VCARD";
spanStr = "<a title='${i18n().export_qr_codes}' href='" spanStr = "<a title='${i18n().export_qr_codes?js_string}' href='"
+ exportQrCodeUrl + "'>" + exportQrCodeUrl + "'>"
+ "<img id='codeImage' src='https://chart.googleapis.com/chart?cht=qr&amp;chs=125x125&amp;chl=" + "<img id='codeImage' src='https://chart.googleapis.com/chart?cht=qr&amp;chs=125x125&amp;chl="
+ vcard + vcard

View file

@ -1,18 +0,0 @@
{
let content = document.getElementById("wrapper-content");
let toc = document.getElementById("TOC");
createTOC(content, toc);
function createTOC(content, toc){
if (toc === null){
alert("no TOC element found");
return;
}
if (content === null){
alert("no content element found");
return;
}
}
}

View file

@ -26,6 +26,22 @@ var demos = [[
if (!console) var console = { if (!console) var console = {
log : function() {} log : function() {}
}; };
if (typeof i18nStringsCap == 'undefined')
{
var i18nStringsCap = {
term: 'Term',
group: 'Group',
pause: 'pause',
resume: 'resume',
reset: 'Reset',
show_group_labels: 'show group labels',
hide_group_labels: 'hide group labels',
delete_selected: 'delete selected',
remove_capability: 'Remove capability',
remove_group: 'Remove group',
expand: 'Expand'
}
};
var schemes = { var schemes = {
"white" : { "white" : {
"backgroundcolor" : "#FFFFFF", "backgroundcolor" : "#FFFFFF",
@ -395,7 +411,7 @@ DetailsPanel.prototype.showDetails = function(mode, id) {
if (mode != "group") { if (mode != "group") {
$(this.panel) $(this.panel)
.empty() .empty()
.append(title = $("<h2>Term: " + decodeURIComponent(id) + "</h2>") .append(title = $("<h2>" + i18nStringsCap.term + ": " + decodeURIComponent(id) + "</h2>")
.bind("click", function() { .bind("click", function() {
highlight(id); highlight(id);
detailsPane.showDetails(mode, id); detailsPane.showDetails(mode, id);
@ -403,7 +419,7 @@ DetailsPanel.prototype.showDetails = function(mode, id) {
.css("cursor", "pointer") .css("cursor", "pointer")
.prepend($("<span/>").addClass("orange-square")) .prepend($("<span/>").addClass("orange-square"))
) )
.append($("<button>Remove capability</button>") .append($("<button>" + i18nStringsCap.remove_capability + "</button>")
.bind("click", function() { .bind("click", function() {
g.removeCapability(id); g.removeCapability(id);
that.clearDetails(); that.clearDetails();
@ -411,7 +427,7 @@ DetailsPanel.prototype.showDetails = function(mode, id) {
}) })
) )
.append($("<span> </span>")) .append($("<span> </span>"))
.append($("<button>Expand</button>") .append($("<button>" + i18nStringsCap.expand + "</button>")
.bind("click", function() { .bind("click", function() {
expandLastQuery = 1; expandLastQuery = 1;
addKwd(decodeURIComponent(id)); addKwd(decodeURIComponent(id));
@ -454,7 +470,7 @@ DetailsPanel.prototype.groupInfo = function(i, group, mode, id) {
}); });
return $("<div/>") return $("<div/>")
.append( .append(
$("<h2>" + "Group: " + group.capabilities.map(function(c) { $("<h2>" + i18nStringsCap.group + ": " + group.capabilities.map(function(c) {
return decodeURIComponent(c.term); return decodeURIComponent(c.term);
}).join(", ") + "</h2>") }).join(", ") + "</h2>")
.bind("click", function() { .bind("click", function() {
@ -464,7 +480,7 @@ DetailsPanel.prototype.groupInfo = function(i, group, mode, id) {
.css("cursor", "pointer") .css("cursor", "pointer")
.prepend($("<span/>").addClass("blue-circle")) .prepend($("<span/>").addClass("blue-circle"))
) )
.append($("<button>Remove group</button>") .append($("<button>" + i18nStringsCap.remove_group + "</button>")
.bind("click", function() { .bind("click", function() {
g.removeGroup(group); g.removeGroup(group);
that.clearDetails(); that.clearDetails();
@ -615,12 +631,12 @@ var ipretResults = function(results) {
var disableSubButton = function() { var disableSubButton = function() {
subButton.disabled = true; subButton.disabled = true;
$("#sExpand").attr("disabled", true); $("#sExpand").attr("disabled", true);
$("#resetButton").val("Stop"); $("#resetButton").val(i18nStringsCap.pause);
} }
var enableSubButton = function() { var enableSubButton = function() {
subButton.disabled = false; subButton.disabled = false;
$("#sExpand").attr("disabled", false); $("#sExpand").attr("disabled", false);
$("#resetButton").val("Reset"); $("#resetButton").val(i18nStringsCap.reset);
} }
var getLinkColor = function() { var getLinkColor = function() {
var linkColor = $("#linkColor").val(); var linkColor = $("#linkColor").val();
@ -807,7 +823,7 @@ var render = function() {
} }
force.on("tick", function() { force.on("tick", function() {
$("#log button:first-child").html("pause"); $("#log button:first-child").html(i18nStringsCap.pause);
force2.start(); force2.start();
node.call(updateNode); node.call(updateNode);
anchorNode.each(function(d, i) { anchorNode.each(function(d, i) {
@ -832,30 +848,30 @@ var render = function() {
}); });
// refresh UI // refresh UI
$("#log").empty().append($("<button>pause</button>") $("#log").empty().append($("<button>" + i18nStringsCap.pause + "</button>")
.bind("click", function() { .bind("click", function() {
if ($(this).html() != "resume") { if ($(this).html() != i18nStringsCap.resume) {
$(this).html("resume"); $(this).html(i18nStringsCap.resume);
force.stop(); force.stop();
force2.stop(); force2.stop();
} else { } else {
$(this).html("pause"); $(this).html(i18nStringsCap.pause);
force.resume(); force.resume();
force2.resume(); force2.resume();
} }
}) })
).append(" ").append($("<button>hide group labels</button>") ).append(" ").append($("<button>" + i18nStringsCap.hide_group_labels + "</button>")
.bind("click", function() { .bind("click", function() {
if ($(this).html() != "show group labels") { if ($(this).html() != i18nStringsCap.show_group_labels) {
$(this).html("show group labels"); $(this).html(i18nStringsCap.show_group_labels);
$(".label-group").css("visibility", "hidden"); $(".label-group").css("visibility", "hidden");
} else { } else {
$(this).html("hide group labels"); $(this).html(i18nStringsCap.hide_group_labels);
$(".label-group").css("visibility", "visible"); $(".label-group").css("visibility", "visible");
} }
}) })
); );
$("#log_printout").empty().append($("<button>Delete selected</button>").bind("click", function() { $("#log_printout").empty().append($("<button>" + i18nStringsCap.delete_selected + "</button>").bind("click", function() {
$("input[type=checkbox]:checked").each(function() { $("input[type=checkbox]:checked").each(function() {
g.removeCapability($(this).attr("name")); g.removeCapability($(this).attr("name"));
$(this).parent().remove(); $(this).parent().remove();

View file

@ -1069,7 +1069,7 @@ function prepareTableForDataTablePagination(jsonData, dataTableParams){
// console.log(processJSONData.currentEntityLevel); // console.log(processJSONData.currentEntityLevel);
if (processJSONData.currentEntityLevel.toUpperCase() === "ORGANIZATIONS AND PEOPLE") { if (processJSONData.currentEntityLevel === i18nStringsGuiEvents.organizationsAndPeople) {
$.fn.dataTableExt.afnFiltering.push(DatatableCustomFilters.peopleOrOrganizations); $.fn.dataTableExt.afnFiltering.push(DatatableCustomFilters.peopleOrOrganizations);
} }
@ -1193,7 +1193,7 @@ function prepareTableForDataTablePagination(jsonData, dataTableParams){
*/ */
function reloadDataTablePagination(preselectedEntityURIs, jsonData){ function reloadDataTablePagination(preselectedEntityURIs, jsonData){
if (processJSONData.currentEntityLevel.toUpperCase() === "ORGANIZATIONS AND PEOPLE") { if (processJSONData.currentEntityLevel === i18nStringsGuiEvents.organizationsAndPeople) {
/* /*
* This will make sure that duplicate filters are not added. * This will make sure that duplicate filters are not added.

View file

@ -22,3 +22,4 @@ Disallow: /vis/ # VIVO addition
Disallow: /visualizationAjax/ # VIVO addition Disallow: /visualizationAjax/ # VIVO addition
Disallow: /visualizationData/ # VIVO addition Disallow: /visualizationData/ # VIVO addition
Disallow: /qrcode # VIVO addition Disallow: /qrcode # VIVO addition
Disallow: /individual # VIVO addition

View file

@ -1,25 +0,0 @@
<#-- $This file is distributed under the terms of the license in LICENSE$ -->
<#-- Page providing details on how QR codes work -->
<h2>About QR Codes</h2>
<h3>What is QR?</h3>
<p>QR, which stands for <i>Quick Response</i>, is a standard for two-dimensional barcodes that can be read by mobile devices equipped with cameras (such as a smartphone).</p>
<h3>What kind of data is in a QR code?</h3>
<p>QR codes can encode many different types of data. The QR code on the profile page of a person in VIVO encodes information about that person in <i>vCard</i> format. This is a sort of digital business card, containing information about the person's name, address, telephone number, email address, and more.</p>
<p>If you click on a person's QR code in VIVO, you will be taken to the <i>QR Export</i> page for that person. This page contains the vCard QR code seen on the front page, as well as a QR code containing a simple hyperlink to the user's VIVO profile. It also contains an HTML tag for each code, that can be embedded in a web page to display that code on other sites.</p>
<#-- todo: make VIVO API? Currently pasting Google API code into export area, this will be static and not change if VIVO data is updated. -->
<h3>How do I read a QR code?</h3>
<p>There are apps you can download for the iPhone and Android phones that allow you to use your phone's camera to interact with QR codes placed on objects in the real world.</p>
<h3>What can I do with a QR code?</h3>
<p>Anything! For a state-of-the-art business card, put your hyperlink QR code on the back of it. That way anyone with a properly-equipped smartphone can quickly go to your VIVO profile by simply pointing their camera at the code. Or put your vCard QR code on your office door to provide more contact information.</p>

View file

@ -25,7 +25,7 @@
function doHarvest() { function doHarvest() {
document.getElementById("harvestButton").disabled = true; document.getElementById("harvestButton").disabled = true;
document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().data_being_harvested}"; document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().data_being_harvested?js_string}";
var request = createRequest(); var request = createRequest();
request.onreadystatechange=function() { request.onreadystatechange=function() {
@ -92,7 +92,7 @@
importedItems.appendChild(newLi); importedItems.appendChild(newLi);
} }
document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().harvest_complete}"; document.getElementById("harvestButtonHelpText").innerHTML = "${i18n().harvest_complete?js_string}";
} }
} }

View file

@ -51,7 +51,7 @@
<#else> <#else>
<h1 itemprop="name" class="vcard foaf-person fn" <#if !editable>style="float:left;border-right:1px solid #A6B1B0;"</#if>> <h1 itemprop="name" class="vcard foaf-person fn" <#if !editable>style="float:left;border-right:1px solid #A6B1B0;"</#if>>
<#-- Label --> <#-- Label -->
<@p.label individual editable labelCount localesCount/> <@p.label individual editable labelCount localesCount languageCount />
</h1> </h1>
<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes -->
<#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!>
@ -170,20 +170,20 @@ var profileTypeData = {
defaultProfileType: '${profileType!}' defaultProfileType: '${profileType!}'
}; };
var i18nStrings = { var i18nStrings = {
errorProcessingTypeChange: '${i18n().error_processing_type_change}', errorProcessingTypeChange: '${i18n().error_processing_type_change?js_string}',
displayLess: '${i18n().display_less}', displayLess: '${i18n().display_less?js_string}',
displayMoreEllipsis: '${i18n().display_more_ellipsis}', displayMoreEllipsis: '${i18n().display_more_ellipsis?js_string}',
showMoreContent: '${i18n().show_more_content}', showMoreContent: '${i18n().show_more_content?js_string}',
verboseTurnOff: '${i18n().verbose_turn_off}', verboseTurnOff: '${i18n().verbose_turn_off?js_string}',
standardviewTooltipOne: '${i18n().standardview_tooltip_one}', standardviewTooltipOne: '${i18n().standardview_tooltip_one?js_string}',
standardviewTooltipTwo: '${i18n().standardview_tooltip_two}', standardviewTooltipTwo: '${i18n().standardview_tooltip_two?js_string}',
researchAreaTooltipOne: '${i18n().research_area_tooltip_one}', researchAreaTooltipOne: '${i18n().research_area_tooltip_one?js_string}',
researchAreaTooltipTwo: '${i18n().research_area_tooltip_two}' researchAreaTooltipTwo: '${i18n().research_area_tooltip_two?js_string}'
}; };
var i18nStringsUriRdf = { var i18nStringsUriRdf = {
shareProfileUri: '${i18n().share_profile_uri}', shareProfileUri: '${i18n().share_profile_uri?js_string}',
viewRDFProfile: '${i18n().view_profile_in_rdf}', viewRDFProfile: '${i18n().view_profile_in_rdf?js_string}',
closeString: '${i18n().close}' closeString: '${i18n().close?js_string}'
}; };
</script> </script>
@ -209,5 +209,5 @@ ${scripts.add('<script async type="text/javascript" src="${urls.base}/js/individ
'<script async type="text/javascript" src="//cdn.plu.mx/widget-popup.js"></script>')} '<script async type="text/javascript" src="//cdn.plu.mx/widget-popup.js"></script>')}
<script type="text/javascript"> <script type="text/javascript">
i18n_confirmDelete = "${i18n().confirm_delete}"; i18n_confirmDelete = "${i18n().confirm_delete?js_string}";
</script> </script>

View file

@ -62,7 +62,7 @@
<div id="photo-wrapper">${individualImage}</div> <div id="photo-wrapper">${individualImage}</div>
<h1 itemprop="name" class="vcard foaf-person fn" <#if !editable>style="float:left;border-right:1px solid #A6B1B0;"</#if>> <h1 itemprop="name" class="vcard foaf-person fn" <#if !editable>style="float:left;border-right:1px solid #A6B1B0;"</#if>>
<#-- Label --> <#-- Label -->
<@p.label individual editable labelCount localesCount/> <@p.label individual editable labelCount localesCount languageCount />
</h1> </h1>
<#-- Display preferredTitle if it exists; otherwise mostSpecificTypes --> <#-- Display preferredTitle if it exists; otherwise mostSpecificTypes -->
<#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!> <#assign title = propertyGroups.pullProperty("http://purl.obolibrary.org/obo/ARG_2000028","http://www.w3.org/2006/vcard/ns#Title")!>
@ -220,19 +220,19 @@ var profileTypeData = {
defaultProfileType: '${profileType!}' defaultProfileType: '${profileType!}'
}; };
var i18nStrings = { var i18nStrings = {
errorProcessingTypeChange: '${i18n().error_processing_type_change}', errorProcessingTypeChange: '${i18n().error_processing_type_change?js_string}',
displayLess: '${i18n().display_less}', displayLess: '${i18n().display_less?js_string}',
displayMoreEllipsis: '${i18n().display_more_ellipsis}', displayMoreEllipsis: '${i18n().display_more_ellipsis?js_string}',
showMoreContent: '${i18n().show_more_content}', showMoreContent: '${i18n().show_more_content?js_string}',
verboseTurnOff: '${i18n().verbose_turn_off}', verboseTurnOff: '${i18n().verbose_turn_off?js_string}',
quickviewTooltip: '${i18n().quickview_tooltip}', quickviewTooltip: '${i18n().quickview_tooltip?js_string}',
researchAreaTooltipOne: '${i18n().research_area_tooltip_one}', researchAreaTooltipOne: '${i18n().research_area_tooltip_one?js_string}',
researchAreaTooltipTwo: '${i18n().research_area_tooltip_two}' researchAreaTooltipTwo: '${i18n().research_area_tooltip_two?js_string}'
}; };
var i18nStringsUriRdf = { var i18nStringsUriRdf = {
shareProfileUri: '${i18n().share_profile_uri}', shareProfileUri: '${i18n().share_profile_uri?js_string}',
viewRDFProfile: '${i18n().view_profile_in_rdf}', viewRDFProfile: '${i18n().view_profile_in_rdf?js_string}',
closeString: '${i18n().close}' closeString: '${i18n().close?js_string}'
}; };
</script> </script>
<#if editable> <#if editable>
@ -270,5 +270,5 @@ ${scripts.add('<script async type="text/javascript" src="${urls.base}/js/individ
'<script async type="text/javascript" src="//cdn.plu.mx/widget-popup.js"></script>')} '<script async type="text/javascript" src="//cdn.plu.mx/widget-popup.js"></script>')}
<script type="text/javascript"> <script type="text/javascript">
i18n_confirmDelete = "${i18n().confirm_delete}"; i18n_confirmDelete = "${i18n().confirm_delete?js_string}";
</script> </script>

View file

@ -33,10 +33,10 @@
<#include "individual-vitro.ftl"> <#include "individual-vitro.ftl">
<script> <script>
var i18nStrings = { var i18nStrings = {
displayLess: '${i18n().display_less}', displayLess: '${i18n().display_less?js_string}',
displayMoreEllipsis: '${i18n().display_more_ellipsis}', displayMoreEllipsis: '${i18n().display_more_ellipsis?js_string}',
showMoreContent: '${i18n().show_more_content}', showMoreContent: '${i18n().show_more_content?js_string}',
verboseTurnOff: '${i18n().verbose_turn_off}', verboseTurnOff: '${i18n().verbose_turn_off?js_string}',
}; };
</script> </script>

View file

@ -28,16 +28,6 @@
<input size="30" type="text" id="label" name="label" value="${labelValue}" /> <input size="30" type="text" id="label" name="label" value="${labelValue}" />
</p> </p>
</#if> </#if>
<label for="newLabelLanguage">${i18n().add_label_for_language}</label>
<select name="newLabelLanguage" id="newLabelLanguage" >
<option value=""<#if !newLabelLanguageValue?has_content> selected="selected"</#if>>${i18n().select_locale}</option>
<#if editConfiguration.pageData.selectLocale?has_content>
<#assign selectLocale = editConfiguration.pageData.selectLocale />
<#list selectLocale as locale>
<option value="${locale.code}"<#if newLabelLanguageValue?has_content && locale.code == newLabelLanguageValue> selected="selected"</#if>>${locale.label}</option>
</#list>
</#if>
</select>
<input type="hidden" name="editKey" id="editKey" value="${editKey}"/> <input type="hidden" name="editKey" id="editKey" value="${editKey}"/>

Some files were not shown because too many files have changed in this diff Show more