![Page 1: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/1.jpg)
Linked Data Mashups:From Query to Visualization
Dominic DiFranzo
![Page 2: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/2.jpg)
RDF
•Triple: Subject Predicate Object
•Use URI for universal naming
•New York has the postal abbreviation NY
•<urn:x-states:New%20York> <http://purl.org/dc/terms/alternative> "NY" .
![Page 3: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/3.jpg)
Linking
•I found a new dataset and it has the following triple
•<http://dbpedia.org/page/New_York> <http://dbpedia.org/ontology/Place/otherName> “The Empire State” .
![Page 4: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/4.jpg)
owl:sameAS
•<urn:x-states:New%20York> <http://www.w3.org/2002/07/owl#sameAs> <http://dbpedia.org/page/New_York> .
![Page 5: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/5.jpg)
![Page 6: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/6.jpg)
What We Have
![Page 7: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/7.jpg)
Current Technology
• Sunlight Foundation’s National Data Catalog, Socrata, Open311 API, and Microsoft’s Open Government Data Initiative, etc
• Store in some backend, release data through an API.
![Page 8: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/8.jpg)
Challenges
• Only ask what its built to answer• No standard - must relearn each time• Opaque - no way for consumers to see, reuse
or improve the data model• Silos of Data - no linking at the data level • VeryTop Down
![Page 9: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/9.jpg)
What We Want
![Page 10: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/10.jpg)
Linked Data
• decentralized - sources may be spread out and referenced across the Web
• modular - linked without advance planning or coordination
• scalable - once store in place, it’s easy to extend
• advantages hold even when definitions and structure of the data changes over time.
![Page 11: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/11.jpg)
![Page 12: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/12.jpg)
![Page 13: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/13.jpg)
![Page 14: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/14.jpg)
Sparql
•SPARQL is a query language for the Semantic Web.
![Page 15: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/15.jpg)
Sparql
SELECT ?node ?title
WHERE{ ?node <http://purl.org/dc/elements/1.1/title> ?title . } LIMIT 1
![Page 16: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/16.jpg)
Long!
SELECT ?node ?name WHERE{ ?node <http://xmlns.com/foaf/0.1/givenname> ?name . ?node <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> . } LIMIT 10
![Page 17: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/17.jpg)
Prefix
PREFIX foaf: <http://xmlns.com/foaf/0.1/>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?node ?name WHERE{ ?node foaf:givenname ?name . ?node rdf:type foaf:Person . } LIMIT 10
![Page 18: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/18.jpg)
Shortcuts
PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?node ?name WHERE{ ?node foaf:givenname ?name ; rdf:type foaf:Person . } LIMIT 10
![Page 19: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/19.jpg)
Graphs
![Page 20: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/20.jpg)
Named Graph
PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?graph ?node ?title WHERE{ GRAPH ?graph{ ?node dc:title ?title . } } LIMIT 3
![Page 21: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/21.jpg)
Named GraphPREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?node8 ?desc8 ?node401 ?desc401 WHERE{ GRAPH <http://data-gov.tw.rpi.edu/vocab/Dataset_401>{ ?node401 dc:description ?desc401 . } GRAPH <http://data-gov.tw.rpi.edu/vocab/Dataset_8>{ ?node8 dc:description ?desc8 . } } LIMIT 3
![Page 22: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/22.jpg)
Union PREFIX dc: <http://purl.org/dc/elements/1.1/> SELECT ?node8 ?desc8 ?node401 ?desc401 WHERE{ { GRAPH <http://data-gov.tw.rpi.edu/vocab/Dataset_401>{ ?node401 dc:description ?desc401 . } }UNION{ GRAPH <http://data-gov.tw.rpi.edu/vocab/Dataset_8>{ ?node8 dc:description ?desc8 . } } } LIMIT 3
![Page 23: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/23.jpg)
Optional
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?node ?name ?givenname WHERE{ ?node foaf:name ?name . OPTIONAL{ ?node foaf:givenname ?givenname . } }
![Page 24: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/24.jpg)
Filter
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?node ?name ?givenname WHERE{ ?node foaf:name ?name . ?node foaf:givenname ?givenname . FILTER regex(?name, "Biden") . }
![Page 25: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/25.jpg)
SPARQLProxy
• This is a web service that allows you to query any SPARQL endpoint, and get back the results in any format you want.
• A RESTful way to query any endpoint in any environment.
![Page 26: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/26.jpg)
SPARQLProxy
http://logd.tw.rpi.edu/sparql?Paramiters:query: [required] encoded String of SPARQL
queryquery-uri :[required] URI of SPARQL query (use
as an alternative to "query" parameter. These two parameters are mutul-exclusive)
![Page 27: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/27.jpg)
SPARQLProxy
service-uri: [required] URI of SPARQL Endpoint – default is the LOGD endpoint
output: output format. ''xml'' - SPARQL/XML (default) : ''exhibit'' - JSON for MIT Exhibit : ''gvds'' - JSON for Google Visualization : ''csv'' - CSV : ''html'' - HTML table : “sparql” - SPARQL JSON
![Page 28: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/28.jpg)
Example
• http://logd.tw.rpi.edu/sparql.php?query-option=text&query=PREFIX+conversion%3A+%3Chttp%3A%2F%2Fpurl.org%2Ftwc%2Fvocab%2Fconversion%2F%3E%0D%0ASELECT+%3Fg+sum%28+%3Ftriples+%29+as+%3Festimated_triples%0D%0AWHERE+{%0D%0A++GRAPH+%3Fg++{%0D%0A+++%3Fg+void%3Asubset+%3Fsubdataset+.%0D%0A+++%3Fsubdataset+conversion%3Anum_triples+%3Ftriples+.%0D%0A++}%0D%0A}+%0D%0AGROUP+BY+%3Fg%0D%0A&service-uri=&output=html&callback=&tqx=&tp=
![Page 29: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/29.jpg)
Example
// compose query $sparqlproxy_uri = "http://logd.tw.rpi.edu/ws/sparqlproxy.php" $params = array(); $params["query-uri"] = "http://logd.tw.rpi.edu/demo/retrieving-sparql-results/datagov-list-loaded-dataset.sparql"; $params["service-uri"] = "http://services.data.gov/sparql"; $params["output"] = "gvds"; $query= $sparqlproxy_uri."?". http_build_query($params,,'&') ; //specific for Drupal //show query result echo file_get_contents($query);
![Page 30: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/30.jpg)
Visualizing The Data
• Many JavaScript API and Libraries to help make visualizations
• Trades in eases of use and control/customization.
• We will focus on the Google Visualization API, very easy to use out-of-the-box but almost impossible to customize outside of what they provide. http://code.google.com/apis/chart/interactive/docs/gallery.html
![Page 31: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/31.jpg)
Visualization Example
• Start with a dataset(s) • We will look into State Library Agency Survey:
Fiscal Year 2006http://logd.tw.rpi.edu/source/data-gov/dataset/353/version/1st-anniversary
and Tax Year 2007 County Income Datahttp://logd.tw.rpi.edu/source/data-gov/dataset/1356/version/2009-Dec-03
![Page 32: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/32.jpg)
Example
• Lets make a map of "Adjusted Gross Income(AGI) per Capita”
• a US map where each state is colored according to the average AGI per person living in that state.
• We obtain a state's AGI data from Dataset 1356 and a state's population data from Dataset 353.
![Page 33: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/33.jpg)
Lets make a query
• http://logd.tw.rpi.edu/demo/building-logd-visualizations/mashup-353-population-1356-agi.sparql
![Page 34: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/34.jpg)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>AGI per Capita Map</title> </head> <body> <div>AGI per Capita Map</div> <div id='map_canvas'>Loading Map ...</div> </body></html>
![Page 35: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/35.jpg)
<!-- import Google visualization API --> <script type="text/javascript" src="http://www.google.com/jsapi"></script>
![Page 36: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/36.jpg)
<script type="text/javascript">
// load google visualization packages - STEP 1 google.load('visualization', '1', {'packages': ['geomap']}); // set callback function for drawing visualizations - STEP 2 google.setOnLoadCallback(drawMap);
![Page 37: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/37.jpg)
function drawMap() { //Query data - STEP 3 var sparqlproxy = "http://logd.tw.rpi.edu/sparql"; var queryloc = "http://logd.tw.rpi.edu/demo/building-logd-visualizations/mashup-353-population-1356-agi.sparql";
var queryurl = sparqlproxy + "?" + "output=gvds” + “&query-option=uri” + "&query-uri=" + encodeURIComponent(queryloc) ;
var query = new google.visualization.Query(queryurl); query.send(handleQueryResponse); }
![Page 38: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/38.jpg)
function handleQueryResponse(response){ // Check for query response errors. - STEP 4 if (response.isError()) { alert('Error in query: ' + response.getMessage() + ' ' + esponse.getDetailedMessage()); return; }
![Page 39: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/39.jpg)
// read data - STEP 5 var data = response.getDataTable(); // create new data - STEP 6 var newdata = new google.visualization.DataTable(); newdata.addColumn('string', 'State'); newdata.addColumn('number', 'AGI per Capita');
![Page 40: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/40.jpg)
// populate each row - STEP 7 var rows = data.getNumberOfRows(); for (var i = 0; i < rows; i++ ) { var state = 'US-' + data.getValue(i, 0);
// AGI figure uses thousand-dollar unit var value = Math.round(data.getValue(i, 1)*1000/
data.getValue(i, 2)); newdata.addRow([state, value]);
}
![Page 41: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/41.jpg)
// configure map options - STEP 8 var options = {}; options['region'] = 'US'; // show US map options['dataMode'] = 'regions'; options['width'] = 900; options['height'] = 550;
![Page 42: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/42.jpg)
// define geomap instance - STEP 9 var viz = document.getElementById('map_canvas'); new google.visualization.GeoMap(viz).draw(newdata, options ); }//end of handleQueryResponse function
</script>//end of JavaScript Tag
![Page 43: Linked Data Mashups: From Query to Visualization Dominic DiFranzo](https://reader035.vdocument.in/reader035/viewer/2022081515/56649d545503460f94a30750/html5/thumbnails/43.jpg)
See Live Version -http://logd.tw.rpi.edu/demo/building-logd-visualizations/agi-per-capita-v2.html