Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Positions in Organizations

Count the types of positions in each organization

Positions relate a person to an organization.  Each position has a type – faculty, staff, etc.  We would like to know how many positions of each type are in each organization, and which organizations have the most faculty, librarians, etc. The query below is a start.  We could embellish the query with additional selections having to do with date ranges, positions per person, and so on.

The query selects positions and identifies their "most specific type" – this is a Vitro concept in which the various types associated with an entity are reduced to a single type for display purposes.  The position must relate to an organization.  In this query we show the uri of the organizaton and the position type in the results.

Code Block
titleCount the types of positions
linenumberstrue
SELECT ?org ?pos_type (COUNT(DISTINCT ?pos) AS ?pos_count)
WHERE {
    ?pos a vivo:Position .
    ?pos vitro:mostSpecificType ?pos_type .
    ?pos vivo:relates ?org .
    ?org a foaf:Organization .
}
GROUP BY ?pos_type ?org
ORDER BY ?pos_type DESC(?pos_count) ?org


Individual Persons 

Retrieve the positions for a single person

The query begins by finding the person of interest – here the person is identified by the value of a label.  This may not return a single person.  But for this example, let's assume it does.  We could construct a query which selected the person based on their primary email or their ORCiD, or some other identifier.  The query then gets all the relatedBy assertions for this person.  VIVO uses relatedBy in many settings.  The query then limits the results to insure that the relatedBy assertions relate a foaf:Person to a vivo:Position.  The query then gets the labels for each position.

Note:  The use of SELECT * returns all variables used in the query.  

Code Block
titleRetrieve the positions for a single person
linenumberstrue
SELECT *
WHERE {
    ?person rdfs:label  'Conlon, Michael' .
    ?person vivo:relatedBy ?position .
    ?person a foaf:Person .
    ?position a vivo:Position .
    ?position rdfs:label ?position_label .
}
Info
titleOutdated

This material pertains to outdated versions of VIVO. Rather than archiving the material, it should be updated to reflect current versions of VIVO 

...

 

on 8/27/13, Eliza writes:
Hello,
We'd like to display the citation counts for articles listed on the profile pages.
So I modified the configuration file and added a citation count variable to the query.
However, the freemarker template didn't seem to pick up that variable.
See below for what was changed in the listViewConfig-authorInAuthorship.xml file:
    <query-select>    
        PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;    
        PREFIX core: &lt;http://vivoweb.org/ontology/core#&gt;
        PREFIX afn:  &lt;http://jena.hpl.hp.com/ARQ/function#&gt;
        PREFIX bibo: &lt;http://purl.org/ontology/bibo/&gt
        PREFIX c4o: &lt;http://purl.org/spar/c4o/&gt;
              
        SELECT DISTINCT ?subclass 
                        ?authorship
                        ?infoResource 
                        ?infoResourceName 
                        ?globalCitationCount
                        ?dateTime
                        ?journal
                        ?volume
                        ?startPage
                        ?endPage
                        ?publisher
                        ?locale
                        ?appearsIn
                        ?partOf
                        ?editor
                        ?hideThis
        WHERE {
            ?subject ?property ?authorship  
            OPTIONAL { ?authorship core:linkedInformationResource ?infoResource .                      
                       ?infoResource rdfs:label ?infoResourceName .
            
                       OPTIONAL { ?infoResource bibo:volume ?volume }
                       OPTIONAL { ?infoResource bibo:pageStart ?startPage }
                       OPTIONAL { ?infoResource bibo:pageEnd ?endPage }
                       OPTIONAL { ?infoResource core:placeOfPublication ?locale }
                       OPTIONAL { ?infoResource bibo:reproducedIn ?appearsInObj .
                                  ?appearsInObj rdfs:label ?appearsIn
                       }
                       OPTIONAL { ?infoResource core:publisher ?publisherObj .
                                  ?publisherObj rdfs:label ?publisher
                       }
                       OPTIONAL { ?infoResource core:editor ?editorObj .
                                  ?editorObj rdfs:label ?editor
                       }
                       OPTIONAL { ?infoResource core:partOf ?partOfObj .
                                  ?partOfObj rdfs:label ?partOf
                       }
                       OPTIONAL {  ?infoResource vitro:mostSpecificType ?subclass .
                                   ?subclass rdfs:subClassOf core:InformationResource .
                       }     
                       
                       OPTIONAL { ?infoResource core:hasPublicationVenue ?publishedIn .
                                    ?publishedIn  rdfs:label ?journal 
                       }
                       OPTIONAL { ?infoResource core:dateTimeValue ?dateTimeValue .
                                  ?dateTimeValue core:dateTime ?dateTime  
                       }
                       
                       OPTIONAL { ?infoResource c4o:hasGlobalCitationFrequency ?hasGlobalCitationFrequencyObj .
                                    ?hasGlobalCitationFrequencyObj  rdfs:label ?globalCitationCount 
                       }
                       
                       OPTIONAL { ?authorship core:hideFromDisplay ?hideThis }                                                      
            }
    #        NOT EXISTS { ?authorship core:hideFromDisplay ?hideThis } 
            <critical-data-required>
            FILTER ( bound(?infoResource) )
            </critical-data-required>
        } ORDER BY DESC(?dateTime) ?infoResourceName   
    </query-select>
And the template propStatement-authorInAuthorship.ftl:
    <#local timesCited>
     <#if statement.subclass??>
     <#if statement.globalCitationCount??>
     <br/>${statement.globalCitationCount!}
 </#if>
     </#if>
    </#local>
    
    ${resourceTitle} ${citationDetails} <@dt.yearSpan "${statement.dateTime!}" /> ${resourceType} ${timesCited}
    
Any reason why it's not working?

Resolution:

on 8/28/13, Eliza writes:
It's finally resolved, but not until moving the variable to another construct:
    <query-construct>
        PREFIX core: &lt;http://vivoweb.org/ontology/core#&gt;
        PREFIX rdfs: &lt;http://www.w3.org/2000/01/rdf-schema#&gt;    
        PREFIX bibo: &lt;http://purl.org/ontology/bibo/&gt;
        PREFIX c4o: &lt;http://purl.org/spar/c4o/&gt
        CONSTRUCT { 
            ?subject ?property ?authorship .  
            ?authorship ?authorshipProperty ?authorshipValue .
            ?authorship core:linkedInformationResource ?infoResource .
            ?infoResource rdfs:label ?infoResourceName .
            ?infoResource core:hasPublicationVenue ?publishedIn .
            ?publishedIn  rdfs:label ?journal .
            ?infoResource c4o:hasGlobalCitationFrequency ?hasGlobalCitationFrequencyObj .
            ?hasGlobalCitationFrequencyObj  rdfs:label ?globalCitationCount
        } WHERE {
            {
               ?subject ?property ?authorship 
            }
            UNION {
               ?subject ?property ?authorship .
               ?authorship ?authorshipProperty ?authorshipValue 
            } UNION {
               ?subject ?property ?authorship .
               ?authorship core:linkedInformationResource ?infoResource 
            } UNION {
               ?subject ?property ?authorship .
               ?authorship core:linkedInformationResource ?infoResource .
               ?infoResource rdfs:label ?infoResourceName 
            } UNION {
               ?subject ?property ?authorship .
               ?authorship core:linkedInformationResource ?infoResource .
               ?infoResource core:hasPublicationVenue ?publishedIn 
            } UNION {
               ?subject ?property ?authorship .
               ?authorship core:linkedInformationResource ?infoResource .
               ?infoResource core:hasPublicationVenue ?publishedIn .
               ?publishedIn  rdfs:label ?journal
            } UNION {
               ?subject ?property ?authorship .
               ?authorship core:linkedInformationResource ?infoResource .
               ?infoResource c4o:hasGlobalCitationFrequency ?hasGlobalCitationFrequencyObj .
               ?hasGlobalCitationFrequencyObj  rdfs:label ?globalCitationCount
            } 
        } 
    </query-construct>
This time, it was able to pick up the variable.
Not exactly sure why but it's working.

SPARQL Example: Positions (RUN the exmaple here: http://senrabc.github.io/vivoSparqlExamples/)

Person and Positions Diagram (VIVO 1.4 Position diagram)Image Removed

 

SPARQL Query to Retrieve the Position for a single Person

Live Results: (Note: You can click on the link below to run this query in realtime at http://sparql.vivo.ufl.edu. Be patient, it make take a few minutes to return.)

(http://sparql.vivo.ufl.edu/VIVO/query?query=PREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX+rdf%3A++%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX+bibo%3A+%3Chttp%3A%2F%2Fpurl.org%2Fontology%2Fbibo%2F%3E%0D%0APREFIX+core%3A+%3Chttp%3A%2F%2Fvivoweb.org%2Fontology%2Fcore%23%3E%0D%0APREFIX+ands%3A+%3Chttp%3A%2F%2Fpurl.org%2Fands%2Fontologies%2Fvivo%2F%3E%0D%0ASELECT++*+WHERE%0D%0A%7B%0D%0A%3FURI+core%3AprimaryEmail++%27cpb%40ufl.edu%27.%0D%0A%3FURI+core%3ApersonInPosition+%3FpositionURI.%0D%0A%3FpositionURI+rdfs%3Alabel+%3FPostionlabel%0D%0A%7D&output=text&stylesheet=%2Fxml-to-html.xsl)

 

SPARQL QUERY

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX bibo: <http://purl.org/ontology/bibo/>
PREFIX core: <http://vivoweb.org/ontology/core#>
PREFIX ands: <http://purl.org/ands/ontologies/vivo/>
SELECT  * WHERE
{

?URI core:primaryEmail  'cpb@ufl.edu'.

?URI core:personInPosition ?positionURI.

?positionURI rdfs:label ?Postionlabel

}

Live Results in JSON: 

http://sparql.vivo.ufl.edu/VIVO/query?query=PREFIX+rdfs%3A+%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0D%0APREFIX+rdf%3A++%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%0D%0APREFIX+bibo%3A+%3Chttp%3A%2F%2Fpurl.org%2Fontology%2Fbibo%2F%3E%0D%0APREFIX+core%3A+%3Chttp%3A%2F%2Fvivoweb.org%2Fontology%2Fcore%23%3E%0D%0APREFIX+ands%3A+%3Chttp%3A%2F%2Fpurl.org%2Fands%2Fontologies%2Fvivo%2F%3E%0D%0ASELECT++*+WHERE%0D%0A%7B%0D%0A%3FURI+core%3AprimaryEmail++%27cpb%40ufl.edu%27.%0D%0A%3FURI+core%3ApersonInPosition+%3FpositionURI.%0D%0A%3FpositionURI+rdfs%3Alabel+%3FPostionlabel%0D%0A%7D&output=json&stylesheet=%2Fxml-to-html.xsl

JSON Result

{

 "head": {

   "vars": [ "URI" , "positionURI" , "Postionlabel" ]

 } ,

 "results": {

   "bindings": [

     {

       "URI": { "type": "uri" , "value": "http://vivo.ufl.edu/individual/n64866" } ,

       "positionURI": { "type": "uri" , "value": "http://vivo.ufl.edu/individual/n136666" } ,

       "Postionlabel": { "datatype": "http://www.w3.org/2001/XMLSchema#string" , "type": "typed-literal" , "value": "Assistant Director and Senior Architect" }

     } ,

     {

       "URI": { "type": "uri" , "value": "http://vivo.ufl.edu/individual/n64866" } ,

       "positionURI": { "type": "uri" , "value": "http://vivo.ufl.edu/individual/n31884" } ,

       "Postionlabel": { "datatype": "http://www.w3.org/2001/XMLSchema#string" , "type": "typed-literal" , "value": "Associate Director" }

     } ,

     {

       "URI": { "type": "uri" , "value": "http://vivo.ufl.edu/individual/n64866" } ,

       "positionURI": { "type": "uri" , "value": "http://vivo.ufl.edu/individual/n908759050" } ,

       "Postionlabel": { "datatype": "http://www.w3.org/2001/XMLSchema#string" , "type": "typed-literal" , "value": "Associate Director, Software Engineering" }

     }

   ]

 }

}

 
 
 

Javascript Example to run query and get back JSON

Get the code here

https://github.com/senrabc/vivoSparqlExamples/blob/master/SPARQLExamplePositions.html

 

Set it run here:

http://senrabc.github.io/vivoSparqlExamples/

 

 

 

 

 

References

Live Google Doc: https://docs.google.com/document/d/1FlGWCG0nqQ4TAVZmnKXiVMZnGxpygdcoxRcZsxw4UG0/edit#heading=h.jx71i6lwn9um

Static Document: SPARQLExamplePositions.pdf