mas01mj@640
|
1 var sparqler = new SPARQL.Service("http://harrison/sparql/");
|
mas01mj@640
|
2
|
mas01mj@640
|
3 sparqler.setPrefix("mo", "http://purl.org/ontology/mo/");
|
mas01mj@640
|
4 sparqler.setPrefix("foaf", "http://xmlns.com/foaf/0.1/");
|
mas01mj@640
|
5 sparqler.setPrefix("dc", "http://purl.org/dc/elements/1.1/");
|
mas01mj@640
|
6
|
mas01mj@640
|
7 sparqler.setRequestHeader("Accept", "application/json");
|
mas01mj@640
|
8
|
mas01mj@640
|
9 var resultsTable;
|
mas01mj@640
|
10
|
mas01mj@640
|
11 $(document).ready(function() {
|
mas01mj@640
|
12 $("#search").click(search)
|
mas01mj@640
|
13 $("#spinner").hide();
|
mas01mj@640
|
14 resultsTable = $('#results').dataTable({"bFilter":false,"bLengthChange":false,"bPaginate":true,
|
mas01mj@640
|
15 "fnRowCallback": function(nRow, aData, iDisplayIndex)
|
mas01mj@640
|
16 {
|
mas01mj@640
|
17 $(nRow).attr("typeof", "mo:Track");
|
mas01mj@640
|
18 return nRow;
|
mas01mj@640
|
19 },
|
mas01mj@640
|
20 "fnDrawCallback": function ()
|
mas01mj@640
|
21 {
|
mas01mj@640
|
22 $(".artist_name").click(function(event) { searchArtist($(this).attr("href")); return false; });
|
mas01mj@640
|
23 $(".album_name").click(function(event) { searchAlbum($(this).attr("href")); return false; });
|
mas01mj@640
|
24 }
|
mas01mj@640
|
25 });
|
mas01mj@640
|
26
|
mas01mj@640
|
27 $("#results tbody").click(function(event) {
|
mas01mj@640
|
28 $(resultsTable.fnSettings().aoData).each(function (){
|
mas01mj@640
|
29 $(this.nTr).removeClass('row_selected');
|
mas01mj@640
|
30 });
|
mas01mj@640
|
31 $(event.target.parentNode).addClass('row_selected');
|
mas01mj@640
|
32 });
|
mas01mj@640
|
33
|
mas01mj@640
|
34 });
|
mas01mj@640
|
35
|
mas01mj@640
|
36 function search(event) {
|
mas01mj@640
|
37
|
mas01mj@640
|
38 var trackSearchString = $("#tracksearch").val();
|
mas01mj@640
|
39 var artistSearchString = $("#artistsearch").val();
|
mas01mj@640
|
40
|
mas01mj@640
|
41 if(trackSearchString.length == 0 && artistSearchString.length == 0)
|
mas01mj@640
|
42 {
|
mas01mj@640
|
43 resultsTable.fnClearTable();
|
mas01mj@640
|
44 return;
|
mas01mj@640
|
45 }
|
mas01mj@640
|
46
|
mas01mj@640
|
47 var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
|
mas01mj@640
|
48
|
mas01mj@640
|
49 queryString += " ?track a mo:Track; mo:track_number ?tracknum; foaf:maker ?maker. ?album mo:track ?track; dc:title ?album_title. ?maker foaf:name ?artist_name";
|
mas01mj@640
|
50
|
mas01mj@640
|
51 if(artistSearchString.length > 0)
|
mas01mj@640
|
52 {
|
mas01mj@653
|
53 queryString += ' FILTER regex(?artist_name, "^'+artistSearchString+'", "i")';
|
mas01mj@640
|
54 }
|
mas01mj@640
|
55 else
|
mas01mj@640
|
56 {
|
mas01mj@640
|
57 queryString += ".";
|
mas01mj@640
|
58 }
|
mas01mj@640
|
59
|
mas01mj@640
|
60 queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title";
|
mas01mj@640
|
61
|
mas01mj@640
|
62 if(trackSearchString.length > 0)
|
mas01mj@640
|
63 {
|
mas01mj@653
|
64 queryString += ' FILTER regex(?track_title, "^'+trackSearchString+'", "i")';
|
mas01mj@640
|
65 }
|
mas01mj@640
|
66 else
|
mas01mj@640
|
67 {
|
mas01mj@640
|
68 queryString += ".";
|
mas01mj@640
|
69 }
|
mas01mj@640
|
70
|
mas01mj@640
|
71 queryString += " }";
|
mas01mj@640
|
72
|
mas01mj@640
|
73 performSearch(queryString);
|
mas01mj@640
|
74 }
|
mas01mj@640
|
75
|
mas01mj@640
|
76 function searchArtist(id) {
|
mas01mj@640
|
77 var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
|
mas01mj@640
|
78 queryString += " ?track a mo:Track; mo:track_number ?tracknum; foaf:maker ?maker. ?album mo:track ?track; dc:title ?album_title. ?maker foaf:name ?artist_name";
|
mas01mj@640
|
79 queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title.";
|
mas01mj@640
|
80 queryString += " FILTER(sameTerm(?maker, <"+id+">))";
|
mas01mj@640
|
81 queryString += " }";
|
mas01mj@640
|
82 performSearch(queryString);
|
mas01mj@640
|
83 }
|
mas01mj@640
|
84
|
mas01mj@640
|
85 function searchAlbum(id) {
|
mas01mj@640
|
86 var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
|
mas01mj@640
|
87 queryString += " ?track a mo:Track; mo:track_number ?tracknum; foaf:maker ?maker. ?album mo:track ?track; dc:title ?album_title. ?maker foaf:name ?artist_name";
|
mas01mj@640
|
88 queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title.";
|
mas01mj@640
|
89 queryString += " FILTER(sameTerm(?album, <"+id+">))";
|
mas01mj@640
|
90 queryString += " }";
|
mas01mj@640
|
91 performSearch(queryString);
|
mas01mj@640
|
92 }
|
mas01mj@640
|
93
|
mas01mj@640
|
94
|
mas01mj@640
|
95 function performSearch(queryString) {
|
mas01mj@640
|
96 $("#spinner").show();
|
mas01mj@640
|
97 $("#query").text(queryString);
|
mas01mj@640
|
98 var query = sparqler.createQuery();
|
mas01mj@640
|
99 query.query(queryString, {failure: function(xhr) { alert("Bad response! "+xhr.responseText) }, success: displayResults});
|
mas01mj@640
|
100 }
|
mas01mj@640
|
101
|
mas01mj@640
|
102 function displayResults(json) {
|
mas01mj@640
|
103 resultsTable.fnClearTable();
|
mas01mj@640
|
104 if(json) {
|
mas01mj@640
|
105
|
mas01mj@640
|
106 var bindings = json.results.bindings;
|
mas01mj@640
|
107 for(var i=0; i<bindings.length; i++)
|
mas01mj@640
|
108 {
|
mas01mj@640
|
109 var artistEl = $('<div />');
|
mas01mj@640
|
110 var artistLink = $('<a/>');
|
mas01mj@640
|
111 artistEl.append(artistLink);
|
mas01mj@640
|
112 artistLink.attr("href", bindings[i].maker.value);
|
mas01mj@640
|
113 artistLink.attr("rel", "foaf:maker");
|
mas01mj@640
|
114 artistLink.addClass("artist_name");
|
mas01mj@640
|
115 artistLink.append(bindings[i].artist_name.value);
|
mas01mj@640
|
116
|
mas01mj@640
|
117 var albumEl = $('<div />');
|
mas01mj@640
|
118 var albumLink = $('<a/>');
|
mas01mj@640
|
119 albumEl.append(albumLink);
|
mas01mj@640
|
120 albumLink.attr("href", bindings[i].album.value);
|
mas01mj@640
|
121 albumLink.attr("rel", "dc:title");
|
mas01mj@640
|
122 albumLink.addClass("album_name");
|
mas01mj@640
|
123 albumLink.append(bindings[i].album_title.value);
|
mas01mj@640
|
124
|
mas01mj@640
|
125 resultsTable.fnAddData([artistEl.html(), bindings[i].track_title.value, bindings[i].tracknum.value, albumEl.html()]);
|
mas01mj@640
|
126 }
|
mas01mj@640
|
127
|
mas01mj@640
|
128 }
|
mas01mj@640
|
129 $("#spinner").hide();
|
mas01mj@640
|
130 }
|