Jump To …

udc.js

This first version of the UDC API substitutes hard-coded values for dimension and measure definitions that will eventually be:

  • represented as RDF,
  • stored on disk as TTL files,
  • published using CORS,
  • consumable by clients using the UDC library.

A collection of UDC data sets will initially be hosted at universaldatacube.org, however it is my hope that individuals, organizations, and institutions begin to host their own data sets in conformance with the UDC specification.

define(['udcvis/rdf'],function(rdf){

Variables are used to store the integer Ids of URIs generated by the RDF API.

  var id = rdf.id;

  var type = id('http://www.w3.org/1999/02/22-rdf-syntax-ns#type');

  var u = 'http://universaldatacube.org/';

  var types = u + 'types#';

  var dimension = id(types + 'dimension');
  var level =     id(types + 'level');
  var member =    id(types + 'member');

  var properties = u + 'properties#';

A level 'inDimension' a dimension when that level is a part of that dimension.

  var inDimension = id(properties + 'inDimension')

A member 'inLevel' a level when that member is a part of that level.

  var inLevel = id(properties + 'inLevel')

Level A 'hasParentLevel' Level B when Level B is the parent of Level A

  var hasParentLevel = id(properties + 'hasParentLevel')

var label = id('http://www.w3.org/2000/01/rdf-schema#label');

  var label = rdf.qn('rdfs:label');

  var dimensions = u + 'dimensions#';
  var levels =     u + 'levels#';
  var members =    u + 'members#';

  var insertUDCData = function(){
    (function insertDimensions(){
      var space = id(dimensions + 'Space');
      rdf.insert(space, label, 'Space');
      rdf.insert(space, type, dimension);

      var planets = id(levels + 'Planets');
      rdf.insert(planets, label, 'Planets');
      rdf.insert(planets, type, level);
      rdf.insert(planets, inDimension, space);

      var earth = id(members + 'Earth');
      rdf.insert(earth, label, 'Earth');
      rdf.insert(earth, type, member);
      rdf.insert(earth, inLevel, planets);
      rdf.insert(planets, inDimension, space);

      var continents = id(levels + 'Continents');
      rdf.insert(continents, label, 'Continents');
      rdf.insert(continents, type, level);
      rdf.insert(continents, inDimension, space);
      rdf.insert(continents, hasParentLevel, planets);

      var countries = id(levels + 'Countries');
      rdf.insert(countries, label, 'Countries');
      rdf.insert(countries, type, level);
      rdf.insert(countries, inDimension, space);
      rdf.insert(countries, hasParentLevel, continents);

      var time = id(dimensions + 'Time');
      rdf.insert(time, type, dimension);
      rdf.insert(time, label, 'Time');

      var years = id(levels + 'Years');
      rdf.insert(years, label, 'Years');
      rdf.insert(years, type, level);
      rdf.insert(years, inDimension, time);

      var year1990 = id(members + 'Earth');
      rdf.insert(year1990, label, 'Earth');
      rdf.insert(year1990, type, member);
      rdf.insert(year1990, inLevel, years);

      var causesOfDeath = id(dimensions + 'Causes_of_Death');
      rdf.insert(causesOfDeath, label, 'Causes of Death');
      rdf.insert(causesOfDeath, type, dimension);

      var addCauseOfDeath = function(name){
        var cause = id(members + '#Causes_of_Death/'+name);
        rdf.insert(cause, label, name);
        rdf.insert(cause, type, member);
        rdf.insert(cause, inDimension, causesOfDeath);
      };

      addCauseOfDeath('Cardiovascular Diseases');
      addCauseOfDeath('Infectious & Parasitic Diseases');
      addCauseOfDeath('Cancers');
      addCauseOfDeath('Respiratory Infections');
      addCauseOfDeath('Respiratory Diseases');
      addCauseOfDeath('Unintentional Injuries');
      addCauseOfDeath('Perinatal Conditions');
      addCauseOfDeath('Digestive Diseases');
      addCauseOfDeath('Intentional Injuries');
      addCauseOfDeath('Neuropsychiatric Disorders');
      addCauseOfDeath('Diabetes Mellitus');
      addCauseOfDeath('Other');
    })();
  };

  var query = function(subject, predicate, obj){
    return function(){
      return rdf.query(subject, predicate, obj);
    };
  };

  insertUDCData();

  return {
    dimensions: function(){
      return rdf.query('?', type, dimension);
    },
    levels: function(dimension){

return rdf.query('?', type, level);

      return rdf.and(
        rdf.query('?', type, level),
        rdf.query('?', inDimension, dimension)
      );
    },
    members: function(dimension){
      return rdf.and(
        rdf.query('?', type, member),
        rdf.query('?', hasDimension, dimension)
      );
    }
  };
});