root/SPARQLBuilderWWW/web/newsparqlbuilder.js

リビジョン 292, 39.3 KB (コミッタ: lenz, 8 年 前)

主な修正
・APIのアドレス指定をプレフィックス部分と分離

└→3行目を変更すればアクセス先が変わるように

細かなバグフィックス
・エンドポイント・スタートクラス・エンドクラス用変数にチェック前に値を入れていた部分(バグ原因になる)を改修
・エンドポイント情報の取得部分でデータセット対応以前の実装のままだった部分を修正
・パーマリンクボタン周りの挙動を修正

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