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.

URLAccept headerResponse formatResponse MIME type
http://vivo.mydomain.edu/individual/n3639
application/rdf+xmlRDF/XMLapplication/rdf+xml
http://vivo.mydomain.edu/individual/n3639
text/n3N3text/n3
http://vivo.mydomain.edu/individual/n3639
text/turtleTurtletext/turtle
http://vivo.mydomain.edu/individual/n3639
application/jsonJSON-LDapplication/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:

URLResponse formatResponse MIME type
http://vivo.mydomain.edu/individual/n3639/n3639.rdf
RDF/XMLapplication/rdf+xml
http://vivo.mydomain.edu/individual/n3639/n3639.n3
N3text/n3
http://vivo.mydomain.edu/individual/n3639/n3639.ttl
Turtletext/turtle
http://vivo.mydomain.edu/individual/n3639/n3639.jsonld
JSON-LDapplication/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.

URLResponse formatResponse MIME type
http://vivo.mydomain.edu/individual/n3639?format=rdfxml
RDF/XMLapplication/rdf+xml
http://vivo.mydomain.edu/individual/n3639?format=n3
N3text/n3
http://vivo.mydomain.edu/individual/n3639?format=ttl
Turtletext/turtle
http://vivo.mydomain.edu/individual/n3639?format=jsonld
JSON-LDapplication/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:

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.