VIVO Documentation
Old Release
This documentation relates to an old version of VIVO, version 1.13.x.
Looking for another version? See all documentation.
Overview
Linked Open Data is one of the fundamental concepts of the Semantic Web. It consists of asking a server for the RDF relating to an individual. If the response includes object properties that link to other individuals, those individuals can be queried also. For more information on Linked Open Data, see Concept: Linked Data.
VIVO accepts standard requests for Linked Open Data and some non-standard ones. The contents of the response are in accordance with those suggested by the in their tutorial How to Publish Linked Data on the Web.
VIVO will provide Linked Open Data in several formats. The semantic content remains the same; only the syntax differs among formats.
An example
The examples on this page are based on a fictitious individual named "Able Baker", with a URI of http://vivo.mydomain.edu/individual/n3639
. To keep the examples simple, this person has just a few items in his VIVO profile. His profile page looks like this:
Requesting Linked Open Data from VIVO
Available formats
VIVO will serve Linked Open Data in these formats:
Specifications for each of the formats are provided by the World Wide Web Consortium (W3C).
Types of requests
The standard way of requesting Linked Open data is an HTTP request to the URI of the individual in question, with the Accept
header on the request indicating the desired format. If there is no Accept
header, it is assumed to be text/html
, and the standard profile page is returned.
URL | Accept header | Response format | Response MIME type |
---|---|---|---|
http://vivo.mydomain.edu/individual/n3639 | application/rdf+xml | RDF/XML | application/rdf+xml |
http://vivo.mydomain.edu/individual/n3639 | text/n3 | N3 | text/n3 |
http://vivo.mydomain.edu/individual/n3639 | text/turtle | Turtle | text/turtle |
http://vivo.mydomain.edu/individual/n3639 | application/json | JSON-LD | application/json |
The different responses may also be explicitly requested by URL. In fact, the requests listed above will simply redirect the browser to these URLs:
URL | Response format | Response MIME type |
---|---|---|
http://vivo.mydomain.edu/individual/n3639/n3639.rdf | RDF/XML | application/rdf+xml |
http://vivo.mydomain.edu/individual/n3639/n3639.n3 | N3 | text/n3 |
http://vivo.mydomain.edu/individual/n3639/n3639.ttl | Turtle | text/turtle |
http://vivo.mydomain.edu/individual/n3639/n3639.jsonld | JSON-LD | application/json |
Finally, VIVO allows you to request Linked Open Data in a way that is not specified by the standard. You can make an HTTP GET request to the URI of the individual, and include a format
parameter that specifies the format of the response.
URL | Response format | Response MIME type |
---|---|---|
http://vivo.mydomain.edu/individual/n3639?format=rdfxml | RDF/XML | application/rdf+xml |
http://vivo.mydomain.edu/individual/n3639?format=n3 | N3 | text/n3 |
http://vivo.mydomain.edu/individual/n3639?format=ttl | Turtle | text/turtle |
http://vivo.mydomain.edu/individual/n3639?format=jsonld | JSON-LD | application/json |
What is included in the response?
When you get request the public RDF about an individual in VIVO, the result is a set of RDF statements, or triples. These triples state:
- The data properties of the individual.
- The object properties that relate this individual to other individuals.
- The object properties of other individuals that relate to this individual
- The labels and types of these related individuals.
- Some triples that describe the RDF document itself.
This statement over-simplifies slightly. In VIVO, object properties and data properties can be public, or restricted to some extent. The RDF for an individual will contain only public properties.
An example response
Here is the RDF produced for the example, in N3 format.
@prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix vcard: <http://www.w3.org/2006/vcard/ns#> . @prefix obo: <http://purl.obolibrary.org/obo/> . @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 owl: <http://www.w3.org/2002/07/owl#> . @prefix vivo: <http://vivoweb.org/ontology/core#> . <http://vivo.mydomain.edu/individual/n3639> a vivo:FacultyMember , foaf:Person , owl:Thing , foaf:Agent , obo:BFO_0000002 , obo:BFO_0000001 , obo:BFO_0000004 ; rdfs:label "Baker, Able "^^xsd:string ; obo:ARG_2000028 <http://vivo.mydomain.edu/individual/n3972> ; obo:RO_0000053 <http://vivo.mydomain.edu/individual/n475> , <http://vivo.mydomain.edu/individual/n7850> ; vitro:mostSpecificType vivo:FacultyMember ; vivo:freetextKeyword "Potrezebie, Chattanooga" ; vivo:hasCollaborator <http://vivo.mydomain.edu/individual/n7429> ; vivo:relatedBy <http://vivo.mydomain.edu/individual/n3401> , <http://vivo.mydomain.edu/individual/n5855> , <http://vivo.mydomain.edu/individual/n2421> ; vivo:researchOverview "Whatever strikes my fancy." ; vivo:scopusId "abaker" . <http://vivo.mydomain.edu/individual/n3972> a vcard:Kind , obo:BFO_0000031 , owl:Thing , obo:ARG_2000379 , obo:IAO_0000030 , obo:BFO_0000002 , obo:BFO_0000001 , vcard:Individual ; obo:ARG_2000029 <http://vivo.mydomain.edu/individual/n3639> . <http://vivo.mydomain.edu/individual/n475> a owl:Thing , obo:BFO_0000023 , vivo:InvestigatorRole , obo:BFO_0000002 , obo:BFO_0000017 , vivo:PrincipalInvestigatorRole , obo:BFO_0000020 , obo:BFO_0000001 , vivo:ResearcherRole ; obo:RO_0000052 <http://vivo.mydomain.edu/individual/n3639> . <http://vivo.mydomain.edu/individual/n7850> a owl:Thing , obo:BFO_0000023 , obo:BFO_0000017 , obo:BFO_0000002 , obo:BFO_0000020 , obo:BFO_0000001 , vivo:LeaderRole ; rdfs:label "Lead Guitarist"^^xsd:string ; obo:RO_0000052 <http://vivo.mydomain.edu/individual/n3639> . <http://vivo.mydomain.edu/individual/n7429> a foaf:Person , vivo:FacultyMember , foaf:Agent , owl:Thing , obo:BFO_0000002 , obo:BFO_0000001 , obo:BFO_0000004 ; rdfs:label "Dog, Charlie" . <http://vivo.mydomain.edu/individual/n3401> a owl:Thing , vivo:Relationship , obo:BFO_0000002 , obo:BFO_0000020 , obo:BFO_0000001 , vivo:Authorship ; vivo:relates <http://vivo.mydomain.edu/individual/n3639> . <http://vivo.mydomain.edu/individual/n5855> a vivo:FacultyPosition , owl:Thing , vivo:Relationship , obo:BFO_0000002 , obo:BFO_0000020 , obo:BFO_0000001 , vivo:Position ; rdfs:label "Functionary"^^xsd:string ; vivo:relates <http://vivo.mydomain.edu/individual/n3639> . <http://vivo.mydomain.edu/individual/n2421> a owl:Thing , vivo:Relationship , obo:BFO_0000002 , obo:BFO_0000020 , obo:BFO_0000001 , vivo:Grant ; rdfs:label "Cosmogenic Lassitude in Phlegmatic Axolotls" ; vivo:relates <http://vivo.mydomain.edu/individual/n3639> . obo:BFO_0000001 a owl:Class ; rdfs:label "Entity" . obo:BFO_0000002 a owl:Class ; rdfs:label "Continuant" . obo:BFO_0000004 a owl:Class ; rdfs:label "Independent Continuant"@en-US . vivo:FacultyMember a owl:Class ; rdfs:label "Faculty Member"@en-US . foaf:Person a owl:Class ; rdfs:label "Person"@en-US . foaf:Agent a owl:Class ; rdfs:label "Agent"@en-US . owl:Thing a owl:Class . <http://vivo.mydomain.edu/individual/n3639/n3639.n3> a foaf:Document ; rdfs:label "RDF description of Baker, Able - http://vivo.mydomain.edu/individual/n3639" ; <http://purl.org/dc/elements/1.1/date> "2014-03-10T11:08:39"^^xsd:dateTime ; <http://purl.org/dc/elements/1.1/publisher> <http://vivo.mydomain.edu> ; <http://purl.org/dc/elements/1.1/rights> <http://vivo.mydomain.edu/termsOfUse> .
A graphic summary
The RDF can be expressed graphically like this:
Restricting properties
Editing the property
You can exclude a property from Linked Open Data, or include it, by editing the property within VIVO. Perhaps the easiest way to edit a property is to log in as a VIVO administrator, navigate to an individual's profile page, and turn on the verbose display:
Once the verbose display is turned on, scroll through the profile page to find the property you are interested in. You can see what it's current restriction levels are for display, update, and publishing. You also have a link to the control panel for that property:
Note that all Linked Open Data requests are treated as public, so any setting other than all users, including public
will exclude the property.
Navigate to the control panel for the property, and then to the editing form for the property.
Set the Publish level
as you like, and submit the changes.
Setting triples in the display model
Properties in VIVO can be restricted from Linked Open Data, by attaching the vitro:hiddenFromPublishBelowRoleLevelAnnot
annotation to the property.
For example, this triple in VIVO's display model would mean that the eRACommonsId
property would not be published in Linked Open Data
<http://vivoweb.org/ontology/core#eRACommonsId> <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#hiddenFromPublishBelowRoleLevelAnnot> <http://vitro.mannlib.cornell.edu/ns/vitro/role#nobody> .
Note, however, that the standard VIVO distribution includes this triple in the display model:
<http://vivoweb.org/ontology/core#:eRACommonsId> <http://vitro.mannlib.cornell.edu/ns/vitro/0.7#:hiddenFromPublishBelowRoleLevelAnnot> <http://vitro.mannlib.cornell.edu/ns/vitro/role#public> .
You would need to remove this triple in order for the more restrictive triple to take effect.
An exception to the restrictions
VIVO uses the same permissions model to restrict Linked Open Data that it uses to restrict displays or updates. So if you are logged in to VIVO as the root user, and you request Linked Open Data, no restrictions would be applied.
This is consistent with VIVO's authorization model.
An external application could take advantage of this fact to obtain full RDF about individuals. Since there is no authorization parameter on the Linked Open Data request, the client application would need to begin by logging in to VIVO as an administrator, and then retain the session cookie to submit with subsequent requests.
Error handling
If you ask for Linked Open Data for a non-existent individual, regardless of the form you use, VIVO will return a response code of 404 not found
.
If you ask for an unsupported format, either in the Accept
header or the format
parameter, VIVO will treat your request as a request for HTML, and will return the standard profile page for the individual. The response code will be 200 OK
.