mas01mj@640: var sparqler = new SPARQL.Service("http://harrison/sparql/"); mas01mj@640: mas01mj@640: sparqler.setPrefix("mo", "http://purl.org/ontology/mo/"); mas01mj@640: sparqler.setPrefix("foaf", "http://xmlns.com/foaf/0.1/"); mas01mj@640: sparqler.setPrefix("dc", "http://purl.org/dc/elements/1.1/"); mas01mj@640: mas01mj@640: sparqler.setRequestHeader("Accept", "application/json"); mas01mj@640: mas01mj@640: var resultsTable; mas01mj@640: mas01mj@640: $(document).ready(function() { mas01mj@640: $("#search").click(search) mas01mj@640: $("#spinner").hide(); mas01mj@640: resultsTable = $('#results').dataTable({"bFilter":false,"bLengthChange":false,"bPaginate":true, mas01mj@640: "fnRowCallback": function(nRow, aData, iDisplayIndex) mas01mj@640: { mas01mj@640: $(nRow).attr("typeof", "mo:Track"); mas01mj@640: return nRow; mas01mj@640: }, mas01mj@640: "fnDrawCallback": function () mas01mj@640: { mas01mj@640: $(".artist_name").click(function(event) { searchArtist($(this).attr("href")); return false; }); mas01mj@640: $(".album_name").click(function(event) { searchAlbum($(this).attr("href")); return false; }); mas01mj@640: } mas01mj@640: }); mas01mj@640: mas01mj@640: $("#results tbody").click(function(event) { mas01mj@640: $(resultsTable.fnSettings().aoData).each(function (){ mas01mj@640: $(this.nTr).removeClass('row_selected'); mas01mj@640: }); mas01mj@640: $(event.target.parentNode).addClass('row_selected'); mas01mj@640: }); mas01mj@640: mas01mj@640: }); mas01mj@640: mas01mj@640: function search(event) { mas01mj@640: mas01mj@640: var trackSearchString = $("#tracksearch").val(); mas01mj@640: var artistSearchString = $("#artistsearch").val(); mas01mj@640: mas01mj@640: if(trackSearchString.length == 0 && artistSearchString.length == 0) mas01mj@640: { mas01mj@640: resultsTable.fnClearTable(); mas01mj@640: return; mas01mj@640: } mas01mj@640: mas01mj@640: var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {"; mas01mj@640: mas01mj@640: 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: mas01mj@640: if(artistSearchString.length > 0) mas01mj@640: { mas01mj@653: queryString += ' FILTER regex(?artist_name, "^'+artistSearchString+'", "i")'; mas01mj@640: } mas01mj@640: else mas01mj@640: { mas01mj@640: queryString += "."; mas01mj@640: } mas01mj@640: mas01mj@640: queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title"; mas01mj@640: mas01mj@640: if(trackSearchString.length > 0) mas01mj@640: { mas01mj@653: queryString += ' FILTER regex(?track_title, "^'+trackSearchString+'", "i")'; mas01mj@640: } mas01mj@640: else mas01mj@640: { mas01mj@640: queryString += "."; mas01mj@640: } mas01mj@640: mas01mj@640: queryString += " }"; mas01mj@640: mas01mj@640: performSearch(queryString); mas01mj@640: } mas01mj@640: mas01mj@640: function searchArtist(id) { mas01mj@640: var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {"; mas01mj@640: 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: queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title."; mas01mj@640: queryString += " FILTER(sameTerm(?maker, <"+id+">))"; mas01mj@640: queryString += " }"; mas01mj@640: performSearch(queryString); mas01mj@640: } mas01mj@640: mas01mj@640: function searchAlbum(id) { mas01mj@640: var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {"; mas01mj@640: 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: queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title."; mas01mj@640: queryString += " FILTER(sameTerm(?album, <"+id+">))"; mas01mj@640: queryString += " }"; mas01mj@640: performSearch(queryString); mas01mj@640: } mas01mj@640: mas01mj@640: mas01mj@640: function performSearch(queryString) { mas01mj@640: $("#spinner").show(); mas01mj@640: $("#query").text(queryString); mas01mj@640: var query = sparqler.createQuery(); mas01mj@640: query.query(queryString, {failure: function(xhr) { alert("Bad response! "+xhr.responseText) }, success: displayResults}); mas01mj@640: } mas01mj@640: mas01mj@640: function displayResults(json) { mas01mj@640: resultsTable.fnClearTable(); mas01mj@640: if(json) { mas01mj@640: mas01mj@640: var bindings = json.results.bindings; mas01mj@640: for(var i=0; i'); mas01mj@640: var artistLink = $(''); mas01mj@640: artistEl.append(artistLink); mas01mj@640: artistLink.attr("href", bindings[i].maker.value); mas01mj@640: artistLink.attr("rel", "foaf:maker"); mas01mj@640: artistLink.addClass("artist_name"); mas01mj@640: artistLink.append(bindings[i].artist_name.value); mas01mj@640: mas01mj@640: var albumEl = $('
'); mas01mj@640: var albumLink = $(''); mas01mj@640: albumEl.append(albumLink); mas01mj@640: albumLink.attr("href", bindings[i].album.value); mas01mj@640: albumLink.attr("rel", "dc:title"); mas01mj@640: albumLink.addClass("album_name"); mas01mj@640: albumLink.append(bindings[i].album_title.value); mas01mj@640: mas01mj@640: resultsTable.fnAddData([artistEl.html(), bindings[i].track_title.value, bindings[i].tracknum.value, albumEl.html()]); mas01mj@640: } mas01mj@640: mas01mj@640: } mas01mj@640: $("#spinner").hide(); mas01mj@640: }