[232] | 1 |
|
---|
| 2 | var PATHNUM = 0;
|
---|
| 3 | var MAXDEPTH = 0;
|
---|
| 4 | var TREESPACE = 0;
|
---|
[239] | 5 | var NODEHEIGHT = 50;
|
---|
[232] | 6 | var DRAWHEIGHT = 0;
|
---|
| 7 |
|
---|
| 8 | var endpoint = "";
|
---|
| 9 | var startclass= "";
|
---|
| 10 | var endclass = "";
|
---|
| 11 |
|
---|
[233] | 12 | var defendpoint = "";
|
---|
| 13 | var defstartclass= "";
|
---|
| 14 | var defendclass = "";
|
---|
| 15 |
|
---|
[232] | 16 | var jsontext = "";
|
---|
| 17 | var pathobj = "";
|
---|
| 18 |
|
---|
| 19 | var pathlimit = 10;
|
---|
| 20 |
|
---|
| 21 |
|
---|
| 22 | // 繝壹�繧ク隱ュ縺ソ霎シ縺ソ縺悟ョ御コ�ャ。隨ャ螳溯。� |
---|
| 23 | $(function(){
|
---|
| 24 |
|
---|
| 25 | // 繝壹�繧ク縺ョ繝代�繝�Κ蛻�r霑ス蜉
|
---|
| 26 | initparts();
|
---|
[233] | 27 |
|
---|
| 28 | getParameter();
|
---|
| 29 |
|
---|
| 30 | if(defendpoint != "" && defstartclass != "" && defendclass != ""){
|
---|
| 31 | openSPARQLBuilder();
|
---|
| 32 | }
|
---|
| 33 |
|
---|
[232] | 34 | });
|
---|
| 35 |
|
---|
| 36 | function initparts(){
|
---|
| 37 | var sbdiv = $('div#SPARQLBUILDER');
|
---|
[234] | 38 | if(sbdiv.find('div').length == 0){
|
---|
[240] | 39 | var sbtop = '<div class="SBTopItems"><input type="button" class="SBTopButton" value="Open SPARQLBuilder" onclick="openSPARQLBuilder()"><input type="button" class="SBTopButton" value="Try with Sample" onclick="openSample(\'http://www.ebi.ac.uk/rdf/services/reactome/sparql\', \'http://www.biopax.org/release/biopax-level3.owl#Protein\', \'http://www.biopax.org/release/biopax-level3.owl#Pathway\')"><br><textarea class="SBSparqlArea" rows="10"></textarea><br><input type="button" class="SBTopButton" value="Send SPARQL" onclick="sendSPARQL()"><input type="button" class="SBTopButton" value="Download Result" onclick="downloadResult()"></div><div class="SBTutorialLink">Tutorial for SPARQL Builder GUI is <a href="http://www.sparqlbuilder.org/doc/how-to-use-sparql-builder-gui/" target="_blank">here</a>.</div>';
|
---|
[238] | 40 | var sbmodal = '<div class="SBModalView"><div class="SBModalContents"><div class="SBForms"><div class="SBSelects"><select class="SBEndPointSelect"></select><select class="SBStartClassSelect"></select><select class="SBEndClassSelect"></select></div><div class="SBPermaLink"><input type="button" class="SBPermaLinkButton" value="Permalink" onclick="openPermalink()" disabled="disabled"></div></div><div class="SBMessage"><div class="SBResult"><span class="SBPathnum"></span> Path<span class="SBPlural"></span> found.</div><input type="button" class="SBViewAll" value="View All Path" onclick="viewAll()"></div><div class="SBGraph"><div class="SBAjaxLoad" style="display: none;"><div class="SBLoadIcon"><img src="images/ajax-loader.gif"></div></div></div><div class="SBPath"><div class="SBSelectedPath"></div></div><div class="SBModalButtons"><input type="button" class="SBModalButton" value="Close" onclick="closeSPARQLBuilder()"></div></div></div>';
|
---|
[232] | 41 |
|
---|
[234] | 42 | sbdiv.html(sbtop);
|
---|
| 43 | $('body').append(sbmodal);
|
---|
| 44 | }
|
---|
[232] | 45 |
|
---|
| 46 | $('.SBModalView').click(function(){
|
---|
| 47 | $(this).fadeOut(700);
|
---|
| 48 | });
|
---|
| 49 |
|
---|
[242] | 50 | $('.SBModalContents').click(function(event){
|
---|
[232] | 51 | event.stopPropagation();
|
---|
| 52 | });
|
---|
| 53 |
|
---|
| 54 | loadEndPointList();
|
---|
| 55 |
|
---|
| 56 | $(".SBEndPointSelect").change(function() {
|
---|
| 57 | changeEndPoint();
|
---|
| 58 | });
|
---|
| 59 |
|
---|
| 60 | $(".SBStartClassSelect").change(function() {
|
---|
| 61 | startClass = $(".SBStartClassSelect").val();
|
---|
[245] | 62 | loadEndClassList();
|
---|
[232] | 63 | });
|
---|
| 64 | $(".SBEndClassSelect").change(function() {
|
---|
| 65 | endClass = $(".SBEndClassSelect").val();
|
---|
| 66 | loadPathList();
|
---|
| 67 | });
|
---|
| 68 |
|
---|
| 69 | }
|
---|
| 70 |
|
---|
[233] | 71 |
|
---|
| 72 | function getParameter()
|
---|
| 73 | {
|
---|
| 74 | if( 1 < window.location.search.length )
|
---|
| 75 | {
|
---|
| 76 | var query = window.location.search.substring( 1 );
|
---|
| 77 | var parameters = query.split( '&' );
|
---|
| 78 |
|
---|
| 79 | for( var i = 0; i < parameters.length; i++ )
|
---|
| 80 | {
|
---|
| 81 | var element = parameters[ i ].split( '=' );
|
---|
| 82 | if(decodeURIComponent( element[ 0 ] ) == "ep"){
|
---|
| 83 | defendpoint = decodeURIComponent( element[ 1 ] )
|
---|
| 84 | }else if(decodeURIComponent( element[ 0 ] ) == "st"){
|
---|
| 85 | defstartclass = decodeURIComponent( element[ 1 ] )
|
---|
| 86 | }else if(decodeURIComponent( element[ 0 ] ) == "en"){
|
---|
| 87 | defendclass = decodeURIComponent( element[ 1 ] )
|
---|
| 88 | }
|
---|
| 89 | }
|
---|
| 90 | }
|
---|
| 91 | }
|
---|
| 92 |
|
---|
| 93 |
|
---|
[232] | 94 | function openSPARQLBuilder(){
|
---|
| 95 |
|
---|
| 96 | $('.SBModalView').css('top', $(window).scrollTop()).css('height', window.innerHeight).fadeIn();
|
---|
| 97 |
|
---|
[235] | 98 | resizeModalView();
|
---|
[232] | 99 |
|
---|
| 100 | $(".SBEndPointSelect").select2();
|
---|
| 101 | $(".SBStartClassSelect").select2();
|
---|
| 102 | $(".SBEndClassSelect").select2();
|
---|
| 103 |
|
---|
[233] | 104 | if(defendpoint != "" && defstartclass != "" && defendclass != ""){
|
---|
| 105 |
|
---|
[245] | 106 | $('.SBStartClassSelect').on('lsccomplete', function(){
|
---|
[233] | 107 | $('.SBStartClassSelect').val(defstartclass);
|
---|
| 108 | defstartclass = "";
|
---|
[245] | 109 |
|
---|
| 110 | $(".SBEndPointSelect").select2();
|
---|
| 111 | $(".SBStartClassSelect").select2();
|
---|
| 112 | $(".SBEndClassSelect").select2();
|
---|
| 113 |
|
---|
| 114 | $('.SBStartClassSelect').unbind('lsccomplete');
|
---|
| 115 | loadEndClassList();
|
---|
| 116 | });
|
---|
| 117 |
|
---|
| 118 | $('.SBEndClassSelect').on('leccomplete', function(){
|
---|
[233] | 119 | $('.SBEndClassSelect').val(defendclass);
|
---|
| 120 | defendclass = "";
|
---|
| 121 |
|
---|
| 122 | $(".SBEndPointSelect").select2();
|
---|
| 123 | $(".SBStartClassSelect").select2();
|
---|
| 124 | $(".SBEndClassSelect").select2();
|
---|
| 125 |
|
---|
[245] | 126 | $('.SBEndClassSelect').unbind('leccomplete');
|
---|
[233] | 127 | });
|
---|
| 128 |
|
---|
| 129 | loadPathList();
|
---|
| 130 |
|
---|
| 131 | var eplist = $('.SBEndPointSelect option');
|
---|
| 132 |
|
---|
| 133 | if(eplist.length == 0){
|
---|
| 134 | $('.SBEndPointSelect').on('epcomplete', function(){
|
---|
| 135 | $('.SBEndPointSelect').val(defendpoint);
|
---|
| 136 | defendpoint = "";
|
---|
[245] | 137 | loadStartClassList();
|
---|
[233] | 138 | $('.SBEndPointSelect').unbind('epcomplete');
|
---|
| 139 | });
|
---|
| 140 | }else{
|
---|
| 141 | $('.SBEndPointSelect').val(defendpoint);
|
---|
| 142 | defendpoint = "";
|
---|
[245] | 143 | loadStartClassList();
|
---|
[233] | 144 | }
|
---|
| 145 | }
|
---|
[232] | 146 | }
|
---|
| 147 |
|
---|
[235] | 148 | function resizeModalView(){
|
---|
| 149 |
|
---|
| 150 | if($('.SBModalView').css('display') == 'block'){
|
---|
| 151 | var mvw = $('.SBModalContents').width();
|
---|
| 152 | var mvh = $('.SBModalContents').height();
|
---|
| 153 | $('.SBModalContents .SBForms').css('width', (mvw - 201) + 'px').css('height', 56 + 'px');
|
---|
| 154 | $('.SBModalContents .SBMessage').css('width', 200 + 'px').css('height', 56 + 'px');
|
---|
| 155 | $('.SBModalContents .SBGraph').css('width', (mvw - 201) + 'px').css('height', (mvh - 57) + 'px');
|
---|
| 156 | $('.SBModalContents .SBPath').css('width', 180 + 'px').css('height', (mvh - 77 - 26) + 'px');
|
---|
| 157 | $('.SBModalContents .SBModalButtons').css('width', 200 + 'px').css('height', '26px');
|
---|
| 158 |
|
---|
[243] | 159 | var formw = $('.SBModalContents .SBForms').width();
|
---|
| 160 | var selw = Math.floor(formw - 120);
|
---|
[236] | 161 |
|
---|
[235] | 162 | if(selw % 2 == 1){
|
---|
[236] | 163 | selw--;
|
---|
[235] | 164 | }
|
---|
[236] | 165 | $('.SBModalContents .SBSelects').css('width', selw);
|
---|
[243] | 166 | $('.SBModalContents .SBPermaLink').css('width', Math.floor(formw - selw));
|
---|
[235] | 167 | }
|
---|
| 168 | }
|
---|
| 169 |
|
---|
[233] | 170 | function openSample(ep, st, en){
|
---|
| 171 | defendpoint = ep;
|
---|
| 172 | defstartclass = st;
|
---|
| 173 | defendclass = en;
|
---|
| 174 |
|
---|
| 175 | openSPARQLBuilder();
|
---|
| 176 | }
|
---|
| 177 |
|
---|
[232] | 178 | function openPermalink(){
|
---|
[233] | 179 | var baseurl = location.href;
|
---|
| 180 | var spliturl = baseurl.split('?');
|
---|
| 181 | var url = spliturl[0] + "?ep=" + encodeURIComponent(endpoint) + "&st=" + encodeURIComponent(startclass) + "&en=" + encodeURIComponent(endclass);
|
---|
[232] | 182 |
|
---|
[233] | 183 | window.open(url);
|
---|
[232] | 184 | }
|
---|
| 185 |
|
---|
| 186 | function closeSPARQLBuilder(){
|
---|
| 187 | $('.SBModalView').fadeOut();
|
---|
| 188 | }
|
---|
| 189 |
|
---|
| 190 | function switchLoadIcon(mode) {
|
---|
| 191 | if(mode == "view"){
|
---|
| 192 | $('.SBAjaxLoad').show();
|
---|
| 193 | }else{
|
---|
| 194 | $('.SBAjaxLoad').hide();
|
---|
| 195 | }
|
---|
| 196 | };
|
---|
| 197 |
|
---|
| 198 | function loadEndPointList(){
|
---|
[243] | 199 | $('.SBPermaLinkButton').attr('disabled', true);
|
---|
[232] | 200 | var url = 'http://www.sparqlbuilder.org/api/eplist';
|
---|
| 201 | $.ajax({
|
---|
| 202 | url: url,
|
---|
| 203 | success: function(data) {
|
---|
| 204 | var list = eval(data);
|
---|
| 205 | $(".SBEndPointSelect").empty();
|
---|
[241] | 206 | $(".SBEndPointSelect").append('<option value="SBDefault">SELECT Endpoint</option>');
|
---|
[232] | 207 | for (var i = 0; i < list.length; ++i) {
|
---|
| 208 | $(".SBEndPointSelect").append('<option value="' + list[i] + '">' + list[i] + '</option>');
|
---|
| 209 | switchLoadIcon("hide");
|
---|
| 210 | if($('.SBModalView').attr('display') == 'block'){
|
---|
| 211 | $(".SBEndPointSelect").select2();
|
---|
| 212 | $(".SBStartClassSelect").select2();
|
---|
| 213 | $(".SBEndClassSelect").select2();
|
---|
| 214 | }
|
---|
| 215 | }
|
---|
[233] | 216 | $(".SBEndPointSelect").trigger(new $.Event('epcomplete'));
|
---|
[232] | 217 | },
|
---|
| 218 | });
|
---|
| 219 | }
|
---|
| 220 |
|
---|
| 221 | changeEndPoint = function() {
|
---|
| 222 | endpoint = $(".SBEndPointSelect").val();
|
---|
| 223 | if(endpoint != "SBDefault"){
|
---|
[245] | 224 | loadStartClassList();
|
---|
[232] | 225 | }
|
---|
| 226 | };
|
---|
| 227 |
|
---|
[245] | 228 | loadStartClassList = function() {
|
---|
[243] | 229 | $('.SBPermaLinkButton').attr('disabled', true);
|
---|
[232] | 230 | var url = "http://www.sparqlbuilder.org/api/clist?ep=" + encodeURIComponent(endpoint);
|
---|
| 231 | $.ajax({
|
---|
| 232 | type : "GET",
|
---|
| 233 | url : url,
|
---|
| 234 | async : false,
|
---|
| 235 | success : function(data) {
|
---|
| 236 | var list = eval(data);
|
---|
| 237 | $(".SBStartClassSelect").empty();
|
---|
| 238 | $(".SBEndClassSelect").empty();
|
---|
[247] | 239 | $(".SBStartClassSelect").append('<option value="SBDefault">SELECT StartClass (From ' + list.length + ' classes below)</option>');
|
---|
[232] | 240 | for (var i = 0; i < list.length; ++i) {
|
---|
| 241 | $(".SBStartClassSelect").append('<option value="' + list[i]['uri'] + '">' + list[i]['label'] + ' (' + list[i]['number'] + ')' + '</option>');
|
---|
[245] | 242 | }
|
---|
| 243 | $(".SBStartClassSelect").select2();
|
---|
| 244 | $(".SBEndClassSelect").select2();
|
---|
| 245 | $(".SBStartClassSelect").trigger(new $.Event('lsccomplete'));
|
---|
| 246 | }
|
---|
| 247 | });
|
---|
| 248 | };
|
---|
| 249 |
|
---|
| 250 | loadEndClassList = function() {
|
---|
| 251 | $('.SBPermaLinkButton').attr('disabled', true);
|
---|
| 252 | var url = "http://www.sparqlbuilder.org/api/clist?ep=" + encodeURIComponent(endpoint) + '&class=' + encodeURIComponent($(".SBStartClassSelect").val());
|
---|
| 253 | $.ajax({
|
---|
| 254 | type : "GET",
|
---|
| 255 | url : url,
|
---|
| 256 | async : false,
|
---|
| 257 | success : function(data) {
|
---|
| 258 | var list = eval(data);
|
---|
| 259 | $(".SBEndClassSelect").empty();
|
---|
[247] | 260 | $(".SBEndClassSelect").append('<option value="SBDefault">SELECT EndClass (From ' + list.length + ' classes below)</option>');
|
---|
[245] | 261 | for (var i = 0; i < list.length; ++i) {
|
---|
[232] | 262 | $(".SBEndClassSelect").append('<option value="' + list[i]['uri'] + '">' + list[i]['label'] + ' (' + list[i]['number'] + ')' + '</option>');
|
---|
| 263 | }
|
---|
| 264 | $(".SBStartClassSelect").select2();
|
---|
| 265 | $(".SBEndClassSelect").select2();
|
---|
[245] | 266 | $(".SBEndClassSelect").trigger(new $.Event('leccomplete'));
|
---|
[232] | 267 | }
|
---|
| 268 | });
|
---|
| 269 | };
|
---|
| 270 |
|
---|
| 271 | loadPathList = function() {
|
---|
[233] | 272 | startclass = $(".SBStartClassSelect").val();
|
---|
| 273 | endclass = $(".SBEndClassSelect").val();
|
---|
| 274 |
|
---|
| 275 | if(defendpoint != "" && defstartclass != "" && defendclass != ""){
|
---|
| 276 | endpoint = defendpoint;
|
---|
| 277 | startclass = defstartclass;
|
---|
| 278 | endclass = defendclass;
|
---|
| 279 | }
|
---|
| 280 |
|
---|
[232] | 281 | $('.SBSaveESE').attr('disabled', true);
|
---|
| 282 | if (startclass == null || endclass == null || startclass == "SBDefault" || endclass == "SBDefault"){
|
---|
| 283 | return;
|
---|
| 284 | }
|
---|
| 285 |
|
---|
| 286 | pathlimit = 10;
|
---|
| 287 |
|
---|
| 288 | $('.SBResult').hide();
|
---|
| 289 | $('.SBViewAll').hide();
|
---|
[239] | 290 | $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and click to generate a SPARQL</h1><img src=\"images/pathline.png\" style="display:none;">');
|
---|
[232] | 291 |
|
---|
| 292 | var url = "http://www.sparqlbuilder.org/api/plist?ep=" + encodeURIComponent(endpoint)
|
---|
| 293 | + "&startclass=" + encodeURIComponent(startclass)
|
---|
| 294 | + "&endclass=" + encodeURIComponent(endclass);
|
---|
[239] | 295 |
|
---|
[232] | 296 | switchLoadIcon("view");
|
---|
| 297 | setTimeout(function(){
|
---|
| 298 | $.ajax({
|
---|
| 299 | type : "GET",
|
---|
| 300 | url : url,
|
---|
| 301 | //async : false,
|
---|
| 302 | timeout : 1000000,
|
---|
| 303 | success : function(data) {
|
---|
| 304 | jsontext = data;
|
---|
| 305 | view_map();
|
---|
| 306 | switchLoadIcon("hide");
|
---|
[243] | 307 | $('.SBPermaLinkButton').attr('disabled', false);
|
---|
[232] | 308 | },
|
---|
| 309 | error: function(data){
|
---|
| 310 | switchLoadIcon("hide");
|
---|
| 311 | alert("error: ", data);
|
---|
| 312 | }
|
---|
| 313 | });
|
---|
| 314 | }, 100);
|
---|
| 315 | };
|
---|
| 316 |
|
---|
| 317 | function viewAll(){
|
---|
| 318 | pathlimit = 0;
|
---|
| 319 | view_map();
|
---|
| 320 | }
|
---|
| 321 |
|
---|
| 322 | generateSPARQL = function() {
|
---|
| 323 | var path = JSON.stringify(pathobj);
|
---|
| 324 | var url = 'http://www.sparqlbuilder.org/api/sparql?path=' + encodeURIComponent(path);
|
---|
| 325 | $.ajax({
|
---|
| 326 | type: "GET",
|
---|
| 327 | url : url,
|
---|
| 328 | dataType: 'text',
|
---|
| 329 | async: false,
|
---|
| 330 | success : function(data) {
|
---|
| 331 | $(".SBSparqlArea").val(data);
|
---|
| 332 | closeSPARQLBuilder();
|
---|
| 333 | }
|
---|
| 334 | });
|
---|
| 335 | };
|
---|
| 336 |
|
---|
| 337 | function sendSPARQL(){
|
---|
| 338 | var sendep = $(".SBEndPointSelect").val();
|
---|
| 339 |
|
---|
| 340 | var query = $(".SBSparqlArea").val();
|
---|
| 341 |
|
---|
| 342 | if(sendep == "SBDefault" || query == ""){
|
---|
| 343 | return;
|
---|
| 344 | }
|
---|
| 345 |
|
---|
| 346 | query = encodeURIComponent(query);
|
---|
| 347 |
|
---|
| 348 | openpage = sendep + "?format=text%2Fhtml&query=" + query;
|
---|
| 349 |
|
---|
| 350 | window.open(openpage);
|
---|
| 351 | }
|
---|
| 352 |
|
---|
| 353 | function downloadResult(){
|
---|
| 354 |
|
---|
| 355 | var sendep = $(".SBEndPointSelect").val();
|
---|
| 356 |
|
---|
| 357 | var query = $(".SBSparqlArea").val();
|
---|
| 358 |
|
---|
| 359 | if(sendep == "SBDefault" || query == ""){
|
---|
| 360 | return;
|
---|
| 361 | }
|
---|
| 362 |
|
---|
| 363 | qr = sendQuery(sendep,query);
|
---|
| 364 |
|
---|
| 365 | qr.fail(
|
---|
| 366 | function (xhr, textStatus, thrownError) {
|
---|
| 367 | alert("Error: A '" + textStatus+ "' occurred.");
|
---|
| 368 | }
|
---|
| 369 | );
|
---|
| 370 | qr.done(
|
---|
| 371 | function (d) {
|
---|
| 372 | downloadCSV(d.results.bindings);
|
---|
| 373 | }
|
---|
| 374 | );
|
---|
| 375 | }
|
---|
| 376 |
|
---|
| 377 | function downloadCSV(data){
|
---|
| 378 |
|
---|
| 379 | if (data instanceof Array) {
|
---|
| 380 | var result_txt ="";
|
---|
| 381 |
|
---|
| 382 | var i=0;
|
---|
| 383 | for ( var key in data[0]) {
|
---|
| 384 | if(i>0){result_txt +=",";}
|
---|
| 385 | result_txt += key;
|
---|
| 386 | i++;
|
---|
| 387 | }
|
---|
| 388 |
|
---|
| 389 | result_txt += "\n";
|
---|
| 390 |
|
---|
| 391 | for (var d = 0; d < data.length; d++) {
|
---|
| 392 | var i = 0;
|
---|
| 393 | for ( var key in data[d]) {
|
---|
| 394 | if(i>0){result_txt +=",";}
|
---|
| 395 | result_txt += data[d][key].value;
|
---|
| 396 | i++;
|
---|
| 397 | }
|
---|
| 398 | result_txt += '\n';
|
---|
| 399 | }
|
---|
| 400 |
|
---|
| 401 | var blob = new Blob( [result_txt], {type: 'text/plain'} )
|
---|
| 402 |
|
---|
| 403 | var link = document.createElement('a')
|
---|
| 404 | link.href = URL.createObjectURL(blob)
|
---|
| 405 | link.download = 'result' + '.csv'
|
---|
| 406 |
|
---|
| 407 | document.body.appendChild(link) // for Firefox
|
---|
| 408 | link.click()
|
---|
| 409 | document.body.removeChild(link) // for Firefox
|
---|
| 410 | }
|
---|
| 411 | };
|
---|
| 412 |
|
---|
[238] | 413 |
|
---|
| 414 | // 繧ー繝ゥ繝墓緒逕サ驛ィ蛻� |
---|
[232] | 415 | view_map = function(){
|
---|
| 416 |
|
---|
[238] | 417 | // make_data繝。繧ス繝�ラ縺ョ邨先棡繧貞叙蠕� |
---|
[239] | 418 | var json = make_data();
|
---|
[232] | 419 |
|
---|
[238] | 420 | // 繝代せ謨ー縺�縺ァ縺ェ縺代l縺ー
|
---|
| 421 | if(json['nodes'].length != 0){
|
---|
[232] | 422 |
|
---|
[238] | 423 | // 蜃コ譚・荳翫′縺」縺溽オ先棡繧呈ク。縺励※繝槭ャ繝嶺ク翫�蠎ァ讓吶r繧サ繝�ヨ
|
---|
| 424 | set_map_location(0, json['nodes'], json['links']);
|
---|
[232] | 425 |
|
---|
[238] | 426 | // SVG縺ョ蟷�→鬮倥&逕ィ縺ォ謠冗判鬆伜沺縺ョ繧オ繧、繧コ繧貞叙蠕� |
---|
| 427 | var width = $('.SBGraph').width();
|
---|
| 428 | var height = $('.SBGraph').height();
|
---|
| 429 | // SVG蜀��繧ー繝ゥ繝暮Κ蛻�ォ倥&�医ヱ繧ケ謨ー縺ォ蠢懊§繧具シ峨r繧サ繝�ヨ
|
---|
| 430 | var graphheight = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2);
|
---|
[232] | 431 |
|
---|
[238] | 432 | // 繧ケ繧ウ繧「陦ィ遉コ縺ョ繝槭�繧ク繝ウ
|
---|
| 433 | var scoreleftmargin = NODEHEIGHT * 1.5;
|
---|
[232] | 434 |
|
---|
[244] | 435 | var scrollsvg = function(delta){
|
---|
| 436 | // 迴セ蝨ィ縺ョ繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョ迥カ諷九r蜿門セ� |
---|
| 437 | var vb = svg.attr("viewBox");
|
---|
| 438 | // 繧ケ繝壹�繧ケ縺ァ蛹コ蛻�j蜷�、縺ォ蛻�ァ」
|
---|
| 439 | var spvb = vb.split(" ");
|
---|
| 440 |
|
---|
| 441 | // 繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョy縺ョ蛟、縺九i莉雁屓縺ョ繝帙う繝シ繝ォ繧、繝吶Φ繝医�蟾ョ蛻�r蠑輔¥
|
---|
| 442 | var vby = (parseInt(spvb[1]) - parseInt(delta));
|
---|
| 443 |
|
---|
| 444 | // 0繧貞牡縺」縺ヲ縺�◆繧�縺ォ
|
---|
| 445 | if(vby < 0){
|
---|
| 446 | vby = 0;
|
---|
| 447 | // 繧ケ繧ッ繝ュ繝シ繝ォ荳企剞�医げ繝ゥ繝輔し繧、繧コ蠑輔¥陦ィ遉コ鬆伜沺繧オ繧、繧コ�峨r雜�∴縺ヲ縺�◆繧芽」懈ュ」
|
---|
| 448 | }else if(vby > (graphheight - height)){
|
---|
| 449 | vby = (graphheight - height);
|
---|
| 450 | // 陬懈ュ」縺励◆邨先棡0繧貞牡縺」縺ヲ縺�◆繧�縺ォ
|
---|
| 451 | if(vby < 0){
|
---|
| 452 | vby = 0;
|
---|
| 453 | }
|
---|
| 454 | }
|
---|
| 455 |
|
---|
| 456 | // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆y繧偵そ繝�ヨ縺励ン繝・繝シ繝懊ャ繧ッ繧ケ繧呈峩譁ー
|
---|
| 457 | svg.attr("viewBox", "0 " + vby + " " + width + " " + height);
|
---|
| 458 | }
|
---|
| 459 |
|
---|
[238] | 460 | // SVG縺ョ蜑企勁
|
---|
| 461 | d3.select(".SBGraph svg").remove();
|
---|
| 462 | // 逕サ髱「繧オ繧、繧コ縺ォ蜷医o縺婀VG縺ョ霑ス蜉
|
---|
| 463 | var svg = d3.select(".SBGraph").append("svg")
|
---|
| 464 | .attr("width", width)
|
---|
| 465 | .attr("height", height)
|
---|
| 466 | // 繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョ繧サ繝�ヨ
|
---|
[244] | 467 | .attr("viewBox", "0 0 " + width + " " + height);
|
---|
[232] | 468 |
|
---|
[244] | 469 | // SVG縺後せ繧ッ繝ュ繝シ繝ォ縺輔l縺滓凾縺ョ繧、繝吶Φ繝医r繝悶Λ繧ヲ繧カ縺ォ蠢懊§縺ヲ繧サ繝�ヨ
|
---|
| 470 | var mousewheelevent = 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll';
|
---|
| 471 | $(".SBGraph svg").on(mousewheelevent,function(e){
|
---|
| 472 | // 繝悶Λ繧ヲ繧カ縺ォ蠢懊§縺ヲ繧ケ繧ッ繝ュ繝シ繝ォ縺ョ蛟、繧貞叙蠕� |
---|
| 473 | var delta = e.originalEvent.deltaY ? -(e.originalEvent.deltaY) : e.originalEvent.wheelDelta ? e.originalEvent.wheelDelta : -(e.originalEvent.detail);
|
---|
| 474 | // FireFox縺縺ィ繧ケ繧ッ繝ュ繝シ繝ォ騾溷コヲ縺碁撼蟶ク縺ォ驕�>蝣エ蜷医′縺ゅk縺ョ縺ァ陬懈ュ」
|
---|
| 475 | if(delta < 0 && delta > -100){
|
---|
| 476 | delta = -100;
|
---|
| 477 | }else if(0 < delta && delta < 100){
|
---|
| 478 | delta = 100;
|
---|
| 479 | }
|
---|
[232] | 480 |
|
---|
[244] | 481 | // 繧ケ繧ッ繝ュ繝シ繝ォ縺ョ繝�ヵ繧ゥ繝ォ繝医�蜍穂ス懊→繝舌ヶ繝ェ繝ウ繧ー繧偵く繝」繝ウ繧サ繝ォ
|
---|
| 482 | e.preventDefault();
|
---|
| 483 | e.stopPropagation();
|
---|
| 484 | // 蛟、繧呈ク。縺励※繧ケ繧ッ繝ュ繝シ繝ォ
|
---|
| 485 | scrollsvg(delta);
|
---|
| 486 | });
|
---|
[232] | 487 |
|
---|
[238] | 488 | // 閭梧勹縺ョ霑ス蜉�磯ォ倥&莉・螟悶�謠冗判鬆伜沺縺昴�縺セ縺セ�� |
---|
| 489 | var bg = svg
|
---|
| 490 | .append("rect")
|
---|
| 491 | .attr("x", 0)
|
---|
| 492 | .attr("y", 0)
|
---|
| 493 | .attr("width", width)
|
---|
| 494 | .attr("height", function(){
|
---|
| 495 | // 繧ー繝ゥ繝暮Κ蛻��鬮倥&縺梧緒逕サ鬆伜沺縺ョ鬮倥&繧貞牡縺」縺ヲ縺�◆繧会シ医ヱ繧ケ縺悟ー代↑縺代l縺ー�画緒逕サ鬆伜沺縺ョ鬮倥&繧定ソ斐☆
|
---|
| 496 | if(graphheight < height){
|
---|
| 497 | return height;
|
---|
| 498 | }else{
|
---|
| 499 | return graphheight;
|
---|
| 500 | }
|
---|
| 501 | })
|
---|
| 502 | // 閭梧勹繧定埋縺�げ繝ャ繝シ縺ォ
|
---|
| 503 | .attr("fill", "#fafafa");
|
---|
[232] | 504 |
|
---|
[238] | 505 | // links驟榊�繧呈ク。縺励Μ繝ウ繧ッ縺ョ菴懈�
|
---|
| 506 | var link = svg.selectAll(".link")
|
---|
| 507 | .data(json.links)
|
---|
| 508 | .enter().append("line")
|
---|
| 509 | .attr("class", "link")
|
---|
| 510 | .style("stroke", "#999")
|
---|
| 511 | .style("stroke-opacity", 0.6)
|
---|
| 512 | .style("stroke-width", 2);
|
---|
[232] | 513 |
|
---|
[238] | 514 | // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨�菴懈�
|
---|
| 515 | var node = svg.selectAll(".node")
|
---|
| 516 | .data(json.nodes)
|
---|
| 517 | .enter().append("circle")
|
---|
| 518 | .attr("class", "node")
|
---|
| 519 | .attr("r", (NODEHEIGHT / 2))
|
---|
| 520 | .attr("cx", function(d) { return d.x;} )
|
---|
| 521 | .attr("cy", function(d) { return d.y; })
|
---|
| 522 | .style("fill", function(d) { return d.nodecolor; })
|
---|
| 523 | .style("stroke", '#fafafa')
|
---|
| 524 | .style("stroke-width", '1.5px')
|
---|
[239] | 525 | // 譛ォ遶ッ繝弱�繝峨�縺ソ繝槭え繧ケ繧「繧、繧ウ繝ウ繧偵�繧、繝ウ繧ソ繝シ縺ォ
|
---|
| 526 | .style("cursor", function(d){
|
---|
| 527 | if(d.path == "notend"){
|
---|
| 528 | return 'normal';
|
---|
| 529 | }else{
|
---|
| 530 | return 'pointer';
|
---|
| 531 | }
|
---|
| 532 | });
|
---|
[232] | 533 |
|
---|
[238] | 534 | // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈�
|
---|
| 535 | var tnode = svg.selectAll("text.node")
|
---|
| 536 | .data(json.nodes)
|
---|
| 537 | .enter().append("svg:text")
|
---|
| 538 | .attr("class", "tnode")
|
---|
| 539 | .attr("x", function(d) { return d.x; })
|
---|
| 540 | .attr("y", function(d) { return d.y; })
|
---|
| 541 | .text(function(d) { return d.name; })
|
---|
| 542 | .style("fill", '#000000')
|
---|
| 543 | .style("text-anchor", 'middle')
|
---|
| 544 | .style("pointer-events", "none");
|
---|
[232] | 545 |
|
---|
[238] | 546 | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医�菴懈�
|
---|
| 547 | var tlink = svg.selectAll("text.link")
|
---|
| 548 | .data(json.links)
|
---|
| 549 | .enter().append("svg:text")
|
---|
| 550 | .attr("class", "tlink")
|
---|
| 551 | .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; })
|
---|
| 552 | .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; })
|
---|
| 553 | .style("fill", '#000000')
|
---|
| 554 | .style("text-anchor", 'middle');
|
---|
[232] | 555 |
|
---|
[238] | 556 | // 繧ケ繧ウ繧「繝�く繧ケ繝医�菴懈�
|
---|
| 557 | var tscore = svg.selectAll("text.score")
|
---|
| 558 | .data(json.nodes)
|
---|
| 559 | .enter().append("svg:text")
|
---|
| 560 | .attr("class", "tscore")
|
---|
| 561 | .attr("x", function(d) { return (d.x + scoreleftmargin); })
|
---|
[239] | 562 | .attr("y", function(d) { return d.y + 4; })
|
---|
[238] | 563 | .text(function(d) { return d.score; })
|
---|
[245] | 564 | .style("fill", 'hsl(0, 50%, 75%)')
|
---|
[238] | 565 | .style("text-anchor", 'middle')
|
---|
| 566 | .style("pointer-events", "none");
|
---|
[232] | 567 |
|
---|
[238] | 568 | // 繝弱�繝峨∈縺ョ繧ェ繝ウ繝槭え繧ケ縺ァ繝代せ謗「邏「縲√ヱ繧ケ荳ュ縺ョ繝ェ繝ウ繧ッ譁�ュ励r陦ィ遉コ
|
---|
| 569 | node.on("mouseover", function(d){
|
---|
[232] | 570 |
|
---|
[238] | 571 | // 陦ィ遉コ縺吶k繝代せ菫晏ュ倡畑驟榊�
|
---|
| 572 | var path = [];
|
---|
| 573 | // 繝代せ陦ィ遉コ諠�ア菫晏ュ倡畑驟榊�
|
---|
| 574 | var pathname = [];
|
---|
[232] | 575 |
|
---|
[238] | 576 | // 縺セ縺壹が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�id縺ィ蜷榊燕繧偵◎繧後◇繧瑚ソス蜉
|
---|
| 577 | path.push(d.nodeid);
|
---|
| 578 | pathname.push(d.name);
|
---|
[232] | 579 |
|
---|
[238] | 580 | // 繝代せ謗「邏「
|
---|
| 581 | do{
|
---|
| 582 | // 繝ェ繝ウ繧ッ縺ョ謨ー縺縺醍ケー繧願ソ斐@
|
---|
| 583 | for(var i = 0; i < link.data().length; i++){
|
---|
| 584 | // 迴セ蝨ィ縺ョ譛蠕悟ーセ縺ォ郢九′繧九Μ繝ウ繧ッ縺後≠繧後�
|
---|
| 585 | if(path[(path.length-1)] == link.data()[i].target){
|
---|
| 586 | // 縺昴�繝ェ繝ウ繧ッ縺ョ繧ス繝シ繧ケ蛛エ繝弱�繝峨�id繧定ソス蜉
|
---|
| 587 | path.push(link.data()[i].source);
|
---|
| 588 | // 縺昴�繝ェ繝ウ繧ッ縺ョ蜷榊燕縺ィ繧ス繝シ繧ケ蛛エ繝弱�繝峨�蜷榊燕繧定ソス蜉
|
---|
| 589 | pathname.push(link.data()[i].property);
|
---|
| 590 | pathname.push(node.data()[link.data()[i].source].name);
|
---|
| 591 | }
|
---|
| 592 | }
|
---|
| 593 | // 繝ォ繝シ繝医ヮ繝シ繝峨↓霎ソ繧顔捩縺上∪縺ァ郢ー繧願ソ斐☆
|
---|
| 594 | }while(path[(path.length-1)] != 0);
|
---|
[232] | 595 |
|
---|
[238] | 596 | // 繝ォ繝シ繝医ヮ繝シ繝峨∪縺溘�騾比クュ繝弱�繝峨↑繧� |
---|
| 597 | if(d.nodeid == 0 || d.path == "notend"){
|
---|
| 598 | // 繝代せ陦ィ遉コ鬆伜沺繧偵ョ繝輔か繝ォ繝医↓
|
---|
[239] | 599 | $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and click to generate a SPARQL</h1>');
|
---|
[238] | 600 | // 譛ォ遶ッ繝弱�繝峨↑繧� |
---|
| 601 | }else{
|
---|
[232] | 602 |
|
---|
[239] | 603 | // 繝代せ陦ィ遉コ鬆伜沺逕ィ譁�ュ怜�
|
---|
| 604 | var resultText = '';
|
---|
[238] | 605 | // 繝代せ縺ョ蜷榊燕驟榊�蛻�セ後m縺九i郢ー繧願ソ斐@縺ェ縺後i
|
---|
| 606 | for (var i = pathname.length;i > 0; i--){
|
---|
| 607 | // 螂�焚逡ェ逶ョ�医ヮ繝シ繝会シ峨↑繧� |
---|
| 608 | if(i % 2 == 1){
|
---|
| 609 | // 繝ォ繝シ繝医°騾比クュ縺区忰遶ッ縺九↓蠢懊§縺ヲ繧ッ繝ゥ繧ケ繧呈欠螳壹@霑ス險� |
---|
| 610 | if(i == 1){
|
---|
| 611 | resultText = resultText + "<div class=\"SBLeafNode\">" + pathname[i - 1] + "</div>";
|
---|
| 612 | }else if(i == pathname.length){
|
---|
| 613 | resultText = resultText + "<div class=\"SBRootNode\">" + pathname[i - 1] + "</div>";
|
---|
| 614 | }else{
|
---|
| 615 | resultText = resultText + "<div class=\"SBPathNode\">" + pathname[i - 1] + "</div>";
|
---|
| 616 | }
|
---|
| 617 | // 蛛カ謨ー逡ェ逶ョ�医Μ繝ウ繧ッ�峨�繝ェ繝ウ繧ッ逕サ蜒上r蜑榊セ後↓縺、縺題ソス險� |
---|
| 618 | }else{
|
---|
| 619 | resultText = resultText + "<img src=\"images/pathline.png\"><div class=\"SBPathProperty\">" + pathname[i - 1] + "</div><img src=\"images/pathline.png\">";
|
---|
| 620 | }
|
---|
| 621 | }
|
---|
[232] | 622 |
|
---|
[238] | 623 | // 繝代せ陦ィ遉コ鬆伜沺縺ョ蜀�ョケ繧呈嶌縺肴鋤縺� |
---|
| 624 | $('.SBSelectedPath').html(resultText);
|
---|
[235] | 625 |
|
---|
[238] | 626 | // 繧オ繝シ繝悶Ξ繝�ヨ縺ォ騾√j霑斐☆繝代せ繧ェ繝悶ず繧ァ繧ッ繝医r菫晏ュ� |
---|
| 627 | pathobj = d.path;
|
---|
[232] | 628 |
|
---|
[238] | 629 | // 繝代せ陦ィ遉コ鬆伜沺縺ョ陦ィ遉コ險ュ螳壹rvisivle縺ォ
|
---|
| 630 | $('.SBPath').css('overflow-y', 'visible');
|
---|
[232] | 631 |
|
---|
[238] | 632 | // 繝代せ蜀�ョケ縺ョ鬮倥&縺後ヱ繧ケ陦ィ遉コ鬆伜沺繧定カ�∴縺ヲ縺�◆繧� |
---|
| 633 | if($('.SBPath').height() < $('.SBSelectedPath').innerHeight()){
|
---|
| 634 | // 繝代せ陦ィ遉コ鬆伜沺縺ョ陦ィ遉コ險ュ螳壹r繧ケ繧ッ繝ュ繝シ繝ォ縺ォ
|
---|
| 635 | $('.SBPath').css('overflow-y', 'scroll');
|
---|
| 636 | }
|
---|
| 637 | }
|
---|
[235] | 638 |
|
---|
[238] | 639 | // 繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�鬮倥&縺ォ隕ェ繧貞粋繧上○繧九◆繧√↓蜷医o縺帙k鬮倥&繧剃ソ晏ュ� |
---|
| 640 | var movey = d.y;
|
---|
[232] | 641 |
|
---|
[238] | 642 | // 蜷�ヮ繝シ繝峨↓蟇セ縺� |
---|
| 643 | node
|
---|
| 644 | // 霈ェ驛ュ邱壹�濶イ繧定ィュ螳� |
---|
| 645 | .style("stroke", function(d){
|
---|
| 646 | // 縺セ縺壹�閭梧勹濶イ�医ョ繝輔か繝ォ繝茨シ峨r謖�ョ� |
---|
| 647 | var strokecolor = "#fafafa";
|
---|
[232] | 648 |
|
---|
[238] | 649 | // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 650 | for(var n = 0; n < path.length; n++){
|
---|
| 651 | // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i
|
---|
| 652 | if(path[n] == d.nodeid){
|
---|
| 653 | // 霈ェ驛ュ邱壹r襍、縺ォ
|
---|
| 654 | strokecolor = "#ffaaaa";
|
---|
| 655 | }
|
---|
| 656 | }
|
---|
[232] | 657 |
|
---|
[238] | 658 | // 縺薙%縺セ縺ァ縺ァ蠕励i繧後◆霈ェ驛ュ邱壹�濶イ繧定ソ斐☆
|
---|
| 659 | return strokecolor;
|
---|
| 660 | })
|
---|
| 661 | // 鬮倥&縺ョ蛟、
|
---|
| 662 | .attr("cy", function(d){
|
---|
[232] | 663 |
|
---|
[238] | 664 | // 迴セ蝨ィ縺ョ鬮倥&繧貞叙蠕� |
---|
| 665 | var currenty = d.y
|
---|
[232] | 666 |
|
---|
[238] | 667 | // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 668 | for(var n = 0; n < path.length; n++){
|
---|
| 669 | // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i
|
---|
| 670 | if(path[n] == d.nodeid){
|
---|
| 671 | // 蜀�Κ縺ァ謖√▽鬮倥&繧偵が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨→蜷後§縺ォ�亥�謠冗判譎ゅ↓蜿肴丐�� |
---|
| 672 | d.y = movey;
|
---|
| 673 | }
|
---|
| 674 | }
|
---|
[232] | 675 |
|
---|
[238] | 676 | // 莉翫�迴セ譎らせ縺ョ鬮倥&繧定ソ斐☆
|
---|
| 677 | return currenty;
|
---|
| 678 | });
|
---|
[232] | 679 |
|
---|
[238] | 680 | // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓蟇セ縺� |
---|
| 681 | tlink
|
---|
| 682 | // 繝�く繧ケ繝郁。ィ遉コ蛻、螳� |
---|
| 683 | .text(function(d) {
|
---|
| 684 | // 繝�ヵ繧ゥ繝ォ繝医〒遨コ繧偵そ繝�ヨ
|
---|
| 685 | var linktext = "";
|
---|
[232] | 686 |
|
---|
[238] | 687 | // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 688 | for(var t = 0; t < path.length; t++){
|
---|
| 689 | // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ縺ェ繧峨�
|
---|
| 690 | if(path[t] == d.target){
|
---|
| 691 | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ
|
---|
| 692 | linktext = d.property
|
---|
| 693 | }
|
---|
| 694 | }
|
---|
| 695 |
|
---|
| 696 | // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆繝ェ繝ウ繧ッ繝�く繧ケ繝医r霑斐☆
|
---|
| 697 | return linktext;
|
---|
| 698 | });
|
---|
| 699 |
|
---|
[239] | 700 | // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺� |
---|
| 701 | link
|
---|
| 702 | // 邱壹�濶イ蛻、螳� |
---|
| 703 | .style("stroke", function(d){
|
---|
[238] | 704 |
|
---|
[239] | 705 | var strokecolor = "#999";
|
---|
[238] | 706 |
|
---|
| 707 | // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 708 | for(var t = 0; t < path.length; t++){
|
---|
| 709 | // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ縺ェ繧峨�
|
---|
| 710 | if(path[t] == d.target){
|
---|
| 711 | // 繝ェ繝ウ繧ッ縺ョ濶イ縺ォ襍、繧偵そ繝�ヨ
|
---|
| 712 | strokecolor = "#ffaaaa"
|
---|
| 713 | }
|
---|
| 714 | }
|
---|
| 715 |
|
---|
[239] | 716 | // 邱壹�濶イ繧定ソ斐☆
|
---|
[238] | 717 | return strokecolor;
|
---|
[239] | 718 | });
|
---|
[232] | 719 |
|
---|
[239] | 720 | // 縺薙%縺セ縺ァ縺ョ險ュ螳壹r蜈�↓蜀肴緒逕サ
|
---|
| 721 | redraw();
|
---|
[232] | 722 |
|
---|
[239] | 723 | // 繧ッ繝ェ繝�け縺輔l縺溘→縺� |
---|
| 724 | }).on("click", function(d){
|
---|
| 725 | // 譛ォ遶ッ繝弱�繝峨↑繧峨せ繝代�繧ッ繝ォ逋コ陦� |
---|
| 726 | if(d.path != "notend"){
|
---|
| 727 | generateSPARQL();
|
---|
| 728 | }
|
---|
| 729 | });
|
---|
[232] | 730 |
|
---|
[239] | 731 | // 蜀肴緒逕サ髢「謨ー
|
---|
| 732 | var redraw = function (duration){
|
---|
[232] | 733 |
|
---|
[239] | 734 | // 縺九¢繧区凾髢薙′譛ェ謖�ョ壹↑繧峨�
|
---|
| 735 | if(duration == undefined){
|
---|
| 736 | // 0.5遘偵°縺代※繧「繝九Γ繝シ繧キ繝ァ繝ウ
|
---|
| 737 | duration = 500;
|
---|
| 738 | }
|
---|
[232] | 739 |
|
---|
[239] | 740 | // 蜷�Μ繝ウ繧ッ縺ォ縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
|
---|
| 741 | link
|
---|
| 742 | .transition()
|
---|
| 743 | .duration(duration)
|
---|
| 744 | .attr("x1", function(d) {return node.data()[d.source].x;})
|
---|
| 745 | .attr("y1", function(d) {return node.data()[d.source].y;})
|
---|
| 746 | .attr("x2", function(d) {return node.data()[d.target].x;})
|
---|
| 747 | .attr("y2", function(d) {return node.data()[d.target].y;});
|
---|
[232] | 748 |
|
---|
[239] | 749 | // 蜷�ヮ繝シ繝峨↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
|
---|
| 750 | node
|
---|
| 751 | .transition()
|
---|
| 752 | .duration(duration)
|
---|
| 753 | .attr("cx", function(d) {return d.x;})
|
---|
| 754 | .attr("cy", function(d) {return d.y;});
|
---|
[232] | 755 |
|
---|
[239] | 756 | // 蜷�ヮ繝シ繝峨ユ繧ュ繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ縲√ユ繧ュ繧ケ繝域緒逕サ菴咲スョ繧剃ク贋ク九↓謖ッ繧� |
---|
| 757 | tnode
|
---|
| 758 | .transition()
|
---|
| 759 | .duration(duration)
|
---|
| 760 | .attr("x", function(d) {return d.x;})
|
---|
| 761 | .attr("y", function(d) {
|
---|
| 762 | // 繝�ヵ繧ゥ繝ォ繝医〒蟆代@荳九£繧� |
---|
| 763 | var updown = (NODEHEIGHT * 0.4);
|
---|
| 764 | // 螂�焚逡ェ逶ョ縺ョ豺ア縺輔↑繧牙ー代@荳翫£繧� |
---|
| 765 | if(d.group % 2 == 1){
|
---|
| 766 | updown = -(NODEHEIGHT * 0.2);
|
---|
| 767 | }
|
---|
| 768 | // 縺昴�蛟、繧帝ォ倥&縺ォ霑斐☆縺薙→縺ァ繝�く繧ケ繝域緒逕サ菴咲スョ縺御コ偵>驕輔>縺ォ縺ェ繧� |
---|
| 769 | return d.y + updown;
|
---|
| 770 | });
|
---|
[232] | 771 |
|
---|
[239] | 772 | // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
|
---|
| 773 | tlink
|
---|
| 774 | .transition()
|
---|
| 775 | .duration(duration)
|
---|
| 776 | .attr("x", function(d) {return (node.data()[d.source].x + node.data()[d.target].x) / 2;})
|
---|
| 777 | .attr("y", function(d) {return ((node.data()[d.source].y + node.data()[d.target].y) / 2) + 4;});
|
---|
[232] | 778 |
|
---|
[239] | 779 | };
|
---|
[232] | 780 |
|
---|
[239] | 781 | // 蛻晏屓縺ョ縺ソduration繧�縺ィ謖�ョ壹@蜀肴緒逕サ�医い繝九Γ繝シ繧キ繝ァ繝ウ縺ェ縺暦シ� |
---|
| 782 | redraw(0);
|
---|
[232] | 783 |
|
---|
[239] | 784 | }else{
|
---|
| 785 | // SVG縺ョ蜑企勁
|
---|
| 786 | d3.select(".SBGraph svg").remove();
|
---|
| 787 | }
|
---|
| 788 | };
|
---|
[232] | 789 |
|
---|
| 790 |
|
---|
[239] | 791 | // 繝��繧ソ菴懈�繝。繧ス繝�ラ
|
---|
| 792 | make_data = function(){
|
---|
[232] | 793 |
|
---|
[239] | 794 | // 邨先棡逕ィ繧ェ繝悶ず繧ァ繧ッ繝医r蛻晄悄蛹� |
---|
| 795 | ret = new Object();
|
---|
| 796 | ret['nodes'] = new Array();
|
---|
| 797 | ret['links'] = new Array();
|
---|
[232] | 798 |
|
---|
[239] | 799 | // 蜷�ィョ螟画焚縺ョ蛻晄悄蛹� |
---|
[232] | 800 | PATHNUM = 0;
|
---|
| 801 | MAXDEPTH = 0;
|
---|
| 802 | TREESPACE = 0;
|
---|
| 803 | DRAWHEIGHT = NODEHEIGHT;
|
---|
| 804 |
|
---|
[239] | 805 | // 陦ィ遉コ縺吶k繝代せ謨ー
|
---|
[232] | 806 | var viewnum;
|
---|
| 807 |
|
---|
[239] | 808 | // jsontext繧貞叙蠕� |
---|
[232] | 809 | var obj = jsontext;
|
---|
| 810 |
|
---|
[239] | 811 | // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧偵Μ繧サ繝�ヨ
|
---|
[237] | 812 | $('.SBResult').css('color', 'black').css('font-weight', 'normal').css('margin-top', '4px');
|
---|
[232] | 813 |
|
---|
[239] | 814 | // 隍�焚蠖「縺ョs繧偵▽縺代k
|
---|
[232] | 815 | $('.SBPlural').text('s');
|
---|
| 816 |
|
---|
[239] | 817 | // 繝代せ縺ョ謨ー縺�縺縺」縺溘i
|
---|
[232] | 818 | if(obj.length == 0){
|
---|
[239] | 819 | // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧定オ、縺ョ螟ェ蟄励↓縺鈴伜沺蜀�ク贋ク倶クュ螟ョ縺ォ
|
---|
[237] | 820 | $('.SBResult').css('color', 'red').css('font-weight', 'bold').css('margin-top', '20px');
|
---|
[239] | 821 | // 隍�焚蠖「縺ョs繧貞炎髯、
|
---|
[232] | 822 | $('.SBPlural').text('');
|
---|
[239] | 823 | // 繝代せ謨ー縺�縺ェ繧� |
---|
[232] | 824 | }else if(obj.length == 1){
|
---|
[239] | 825 | // 隍�焚蠖「縺ョs繧貞炎髯、
|
---|
[232] | 826 | $('.SBPlural').text('');
|
---|
| 827 | }
|
---|
| 828 |
|
---|
[239] | 829 | // 繝代せ縺ョ謨ー縺悟香莉・荳九↑繧� |
---|
[232] | 830 | if(obj.length <= 10){
|
---|
[239] | 831 | // 陦ィ遉コ謨ー繧偵ヱ繧ケ謨ー縺ォ
|
---|
[232] | 832 | viewnum = obj.length;
|
---|
[239] | 833 | // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧帝伜沺蜀�ク贋ク倶クュ螟ョ縺ォ
|
---|
[237] | 834 | $('.SBResult').css('margin-top', '20px');
|
---|
[239] | 835 | // 蜈ィ陦ィ遉コ繝懊ち繝ウ繧帝國縺� |
---|
[244] | 836 | $('.SBViewAll').hide();
|
---|
[239] | 837 | // 繝ェ繝溘ャ繝医′10縺ェ繧峨�
|
---|
[232] | 838 | }else if(pathlimit == 10){
|
---|
[239] | 839 | // 陦ィ遉コ繝代せ謨ー繧�0縺ォ
|
---|
[232] | 840 | viewnum = 10;
|
---|
[239] | 841 | // 蜈ィ陦ィ遉コ繝懊ち繝ウ繧貞�縺� |
---|
[244] | 842 | $('.SBViewAll').show();
|
---|
[239] | 843 | // 繝ェ繝溘ャ繝医′縺ェ縺代l縺ー
|
---|
[232] | 844 | }else{
|
---|
[239] | 845 | // 陦ィ遉コ繝代せ謨ー繧貞�繝代せ謨ー縺ォ
|
---|
[232] | 846 | viewnum = obj.length;
|
---|
[239] | 847 | // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧帝伜沺蜀�ク贋ク倶クュ螟ョ縺ォ
|
---|
[237] | 848 | $('.SBResult').css('margin-top', '20px');
|
---|
[239] | 849 | // 蜈ィ陦ィ遉コ繝懊ち繝ウ繧帝國縺� |
---|
[244] | 850 | $('.SBViewAll').hide();
|
---|
[232] | 851 | }
|
---|
| 852 |
|
---|
[239] | 853 | // 邨先棡繝代せ謨ー縺ョ蛟、繧呈峩譁ー
|
---|
[232] | 854 | $('.SBPathnum').text(obj.length);
|
---|
[239] | 855 | // 邨先棡繝代せ謨ー繧定。ィ遉コ
|
---|
[232] | 856 | $('.SBResult').show();
|
---|
| 857 |
|
---|
[239] | 858 | // obj繝医ャ繝鈴嚴螻、縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 859 | for(var i = 0; i < viewnum; i++){
|
---|
| 860 | if(i == 0){
|
---|
| 861 | // 蛻晏屓縺縺代Ν繝シ繝医ヮ繝シ繝峨r繝励ャ繧キ繝・
|
---|
| 862 | ret['nodes'].push({'name': obj[0]['label'], 'uri': obj[0]['startClass'], 'group': 0, 'x':50, 'y':50, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': 'hsl(40, 50%, 75%)'});
|
---|
| 863 | }
|
---|
| 864 | // 蜈医↓source縺ォ0�医Ν繝シ繝茨シ峨r莉」蜈・
|
---|
| 865 | var source = 0;
|
---|
| 866 | // 蜈ア騾壹Ν繝シ繝亥愛螳壹rtrue縺ォ
|
---|
| 867 | var isCommon = true;
|
---|
[232] | 868 |
|
---|
[239] | 869 | // 縺薙�繝代せ縺ョ繧ケ繧ウ繧「繧貞叙蠕� |
---|
| 870 | var score = obj[i]['score'];
|
---|
[232] | 871 |
|
---|
[239] | 872 | // classLinks縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 873 | for(var j = 0;j < obj[i]['classLinks'].length; j++){
|
---|
[232] | 874 |
|
---|
[239] | 875 | // 繝ェ繝ウ繧ッ縺ョ蜷榊燕繧旦RL譛ォ蟆セ縺九i蜿門セ� |
---|
| 876 | var propertytext = obj[i]['classLinks'][j]['predicate'];
|
---|
| 877 | var propertysplit1 = propertytext.split("/");
|
---|
| 878 | var propertysplit2 = propertysplit1[propertysplit1.length - 1];
|
---|
| 879 | var propertysplit3 = propertysplit2.split("#");
|
---|
| 880 | propertytext = propertysplit3[propertysplit3.length - 1];
|
---|
[232] | 881 |
|
---|
[239] | 882 | // 豺ア縺輔′譛螟ァ繧医j螟ァ縺阪¢繧後�譖エ譁ー
|
---|
| 883 | if(MAXDEPTH < j+1){
|
---|
| 884 | MAXDEPTH = j+1;
|
---|
| 885 | }
|
---|
| 886 | // 縺薙%縺セ縺ァ蜈ア騾壹Ν繝シ繝医↑繧� |
---|
| 887 | if(isCommon){
|
---|
| 888 | // 莉雁屓繧ょ�騾壹°遒コ隱阪☆繧九◆繧√�繝輔Λ繧ー
|
---|
| 889 | var isCommonNow = false;
|
---|
| 890 | // nodes驟榊�縺ォ蜷後§linkedClass縺梧里縺ォ縺ゅk縺狗「コ隱� |
---|
| 891 | var targets = [];
|
---|
| 892 | for(var k = 0; k < ret['nodes'].length; k++){
|
---|
| 893 | // 蜷碁嚴螻、縺九▽蜷後§蜷榊燕縺ョ繧ゅ�縺後≠縺」縺溘itargets驟榊�縺ォ逡ェ蜿キ繧定ソス蜉
|
---|
| 894 | if(ret['nodes'][k]['group'] == (j+1) && obj[i]['classLinks'][j]['linkedClass'] == ret['nodes'][k]['uri']){
|
---|
| 895 | targets.push(k);
|
---|
| 896 | }
|
---|
| 897 | }
|
---|
[232] | 898 |
|
---|
[239] | 899 | // 譌「縺ォ縺ゅ▲縺溷エ蜷医�links驟榊�縺ォ蜷後§link縺悟ュ伜惠縺吶k縺狗「コ隱� |
---|
| 900 | if(targets.length != 0){
|
---|
| 901 | // 蜈医⊇縺ゥ隕九▽縺代◆targets縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 902 | for(var l = 0; l <targets.length; l++){
|
---|
| 903 | // links驟榊�縺ォ蜈ィ縺丞酔縺俶擅莉カ縺ョ繧ゅ�縺後≠繧九°遒コ隱� |
---|
| 904 | for(var m = 0; m < ret['links'].length; m++){
|
---|
| 905 | // 縺ゅ▲縺溷エ蜷井サ雁屓縺ョ繧ゅ�縺ッ霑ス蜉縺帙★source繧呈峩譁ー縺励※谺。縺ク
|
---|
| 906 | if(ret['links'][m]['source'] == source && ret['links'][m]['target'] == targets[l] && ret['links'][m]['uri'] == obj[i]['classLinks'][j]['predicate'] && !isCommonNow){
|
---|
| 907 | // 蜈ア騾壹Ν繝シ繝医ヵ繝ゥ繧ー繧偵が繝ウ
|
---|
| 908 | isCommonNow = true;
|
---|
| 909 | source = targets[l];
|
---|
| 910 | }
|
---|
| 911 | }
|
---|
| 912 | }
|
---|
[232] | 913 |
|
---|
[239] | 914 | // 蜷дarget繧堤「コ隱阪@縺ヲ蜈ア騾壹Ν繝シ繝医〒縺ッ縺ェ縺九▲縺溷エ蜷域眠隕剰ソス蜉
|
---|
| 915 | if(!isCommonNow){
|
---|
| 916 | isCommon = false;
|
---|
| 917 | ret['nodes'].push({'name': obj[i]['classLinks'][j]['label'], 'uri': obj[i]['classLinks'][j]['linkedClass'], 'group': (j+1), 'x':0, 'y':0, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': '#cccccc'});
|
---|
| 918 | ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'property': propertytext, 'uri': obj[i]['classLinks'][j]['predicate']});
|
---|
| 919 | source = ret['nodes'].length - 1;
|
---|
| 920 | }
|
---|
[232] | 921 |
|
---|
[239] | 922 | // 縺ェ縺九▲縺溷エ蜷医�蛻・譚。莉カ縺ェ縺ョ縺ァ譁ー隕剰ソス蜉縺励※谺。縺ク
|
---|
| 923 | }else{
|
---|
[232] | 924 |
|
---|
[239] | 925 | isCommon = false;
|
---|
| 926 | ret['nodes'].push({'name': obj[i]['classLinks'][j]['label'], 'uri': obj[i]['classLinks'][j]['linkedClass'], 'group': (j+1), 'x':0, 'y':0, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': '#cccccc'});
|
---|
| 927 | ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'property': propertytext, 'uri': obj[i]['classLinks'][j]['predicate']});
|
---|
| 928 | source = ret['nodes'].length - 1;
|
---|
| 929 | }
|
---|
| 930 | // 譌「縺ォ蜈ア騾壹Ν繝シ繝医〒縺ェ縺�↑繧画眠隕剰ソス蜉縺励※谺。縺ク
|
---|
| 931 | }else{
|
---|
| 932 | ret['nodes'].push({'name': obj[i]['classLinks'][j]['label'], 'uri': obj[i]['classLinks'][j]['linkedClass'], 'group': (j+1), 'x':0, 'y':0, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': '#cccccc'});
|
---|
| 933 | ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'property': propertytext, 'uri': obj[i]['classLinks'][j]['predicate']});
|
---|
| 934 | source = ret['nodes'].length - 1;
|
---|
| 935 | }
|
---|
[232] | 936 |
|
---|
[239] | 937 | }
|
---|
| 938 | // 譛蠕鯉シ域忰遶ッ繝弱�繝会シ峨↓蜷�ィョ蛟、繧定ソス蜉
|
---|
| 939 | ret['nodes'][ret['nodes'].length - 1]['path'] = obj[i];
|
---|
| 940 | ret['nodes'][ret['nodes'].length - 1]['score'] = score;
|
---|
| 941 | ret['nodes'][ret['nodes'].length - 1]['nodecolor'] = 'hsl(150, 50%, 75%)';
|
---|
| 942 | // 繝代せ謨ー繧定ソス蜉
|
---|
| 943 | PATHNUM++;
|
---|
| 944 | }
|
---|
| 945 | // 繝弱�繝蛾俣縺ョ繧ケ繝壹�繧ケ繧定ィ育ョ� |
---|
| 946 | TREESPACE = $('.SBGraph').width() / (MAXDEPTH + 1);
|
---|
[232] | 947 |
|
---|
[239] | 948 | // 縺ァ縺阪◆邨先棡繧定ソ斐☆
|
---|
| 949 | return ret;
|
---|
[232] | 950 | };
|
---|
| 951 |
|
---|
| 952 | set_map_location = function(myNodeIndex, nodes, links, depth, fromAngle, toAngle){
|
---|
| 953 |
|
---|
| 954 | // depth縺梧悴螳夂セゥ縺ェ繧峨�0繧偵そ繝�ヨ
|
---|
| 955 | if (depth == undefined){
|
---|
| 956 | depth = 0;
|
---|
| 957 | }
|
---|
| 958 |
|
---|
| 959 | // 蜷�ィョ蛻晄悄蛹� |
---|
| 960 | var children = undefined;
|
---|
| 961 | var parent = undefined;
|
---|
| 962 | var parentsChildren = undefined;
|
---|
| 963 |
|
---|
| 964 | // links驟榊�縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
|
---|
| 965 | for (var i=0; i<links.length; i++){
|
---|
| 966 | // 縺昴�links縺ョtarget縺稽yNodeIndex縺ェ繧英arent繧偵そ繝�ヨ
|
---|
| 967 | if (links[i].target == myNodeIndex){
|
---|
| 968 | parent = links[i].source;
|
---|
| 969 | }
|
---|
| 970 | }
|
---|
| 971 |
|
---|
| 972 | // parent縺瑚ヲ九▽縺九▲縺ヲ縺�◆縺ェ繧峨�
|
---|
| 973 | if (parent != undefined){
|
---|
| 974 | // parent縺ィlinks繧呈ク。縺揚et_children繝。繧ス繝�ラ繧貞ョ溯。� |
---|
| 975 | parentsChildren = get_children(parent, links);
|
---|
| 976 | }
|
---|
| 977 |
|
---|
| 978 | if(myNodeIndex != 0){
|
---|
| 979 | DRAWHEIGHT += (NODEHEIGHT * 1.5);
|
---|
| 980 | var x = (depth * TREESPACE) + (TREESPACE / 3);
|
---|
| 981 | var y = DRAWHEIGHT;
|
---|
| 982 | nodes[myNodeIndex].x = x;
|
---|
| 983 | nodes[myNodeIndex].y = y;
|
---|
| 984 | }else{
|
---|
| 985 | var x = TREESPACE / 3;
|
---|
| 986 | var y = (NODEHEIGHT * 1.5) * ((PATHNUM - 1) / 2) + NODEHEIGHT;
|
---|
| 987 | nodes[myNodeIndex].x = x;
|
---|
| 988 | nodes[myNodeIndex].y = y;
|
---|
| 989 | }
|
---|
| 990 |
|
---|
| 991 | children = get_children(myNodeIndex, links);
|
---|
| 992 |
|
---|
| 993 | for (var i=0; i<children.length; i++){
|
---|
| 994 | if(i == 0){
|
---|
| 995 | DRAWHEIGHT -= (NODEHEIGHT * 1.5);
|
---|
| 996 | }
|
---|
| 997 | var child = children[i];
|
---|
| 998 | set_map_location(child, nodes, links, depth+1, fromAngle + ((toAngle - fromAngle) / children.length) * i, fromAngle + ((toAngle - fromAngle) / children.length) * (i+1));
|
---|
| 999 | }
|
---|
| 1000 |
|
---|
| 1001 | };
|
---|
| 1002 |
|
---|
| 1003 | // 謖�ョ壹&繧後◆隕ェ縺梧戟縺、蟄舌r霑斐☆
|
---|
| 1004 | get_children = function(index, links){
|
---|
| 1005 | var children = new Array();
|
---|
| 1006 | // links縺ョ謨ー縺縺醍「コ隱阪@縺ェ縺後i
|
---|
| 1007 | for (var i=0; i<links.length; i++){
|
---|
| 1008 | // 隕ェ縺梧ク。縺輔l縺溯ヲェ縺ィ荳閾エ縺吶k譎ゅ�蟄舌r霑ス蜉
|
---|
| 1009 | if (links[i].source == index){
|
---|
| 1010 | children.push(links[i].target);
|
---|
| 1011 | }
|
---|
| 1012 | }
|
---|
| 1013 | return children;
|
---|
| 1014 | };
|
---|