2

jQueryのgetJSONを使用してSesameSPARQLエンドポイントをクエリした結果の.srjファイルをロードする方法の例を誰かに教えてもらえますか?Acceptヘッダーやその他のトリックを設定しようとしましたが、200コードが表示され、明らかにエラーは発生しませんが、ファイルのコンテンツが読み込まれません。

$.getJSON("http://localhost:8090/openrdf-sesame/repositories/myrepo?queryLn=SPARQL&query=QUERY&limit=none&infer=true&Accept=application%2Fsparql-results%2Bjson",
{
},
function(data) {
   alert('data = ', data);
});

私はこのようなものと他の無数の変種を試しましたが、それでも機能しません。私は両方のケースをテストしたことに言及する必要があります:

  1. TomcatはApacheにマウントされていません。クロスドメイン要求がある場合は、ブラウザーで必要なすべてを設定してみました。
  2. TomcatはApacheにマウントされています-私が知る限り、これは動作するために他に何も必要としませんでしたが、それでも成功しませんでした。

リクエストヘッダーは次のとおりです。

Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:en-us,en;q=0.5
Connection:keep-aliveHost:localhost:8090
Origin:http://localhost
Referer:http://localhost/d3v280/examples/ablodvis/localtest.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0

応答ヘッダーは次のとおりです。

Content-Disposition:attachment; filename=query-result.srj
Content-Language:en-US
Content-Type:application/sparql-results+json;charset=UTF-8
Date:Mon, 28 May 2012 14:06:06 GMT
Server:Apache-Coyote/1.1
Transfer-Encoding:chunked

ご覧のとおり、query-result.srjファイルに結果が表示されますが、アクセス方法がわかりません。私は最初のバージョンが機能することを非常に望んでいますが、どうやら私は何かが欠けています。同様のgetJSONリクエストはすべて機能しました。

ほぼ機能するリクエストは次のとおりです。

 $.ajax({

        beforeSend: function(xhrObj){
                      xhrObj.setRequestHeader("Accept","application/sparql-results+json");
                },

        dataType: 'jsonp',
        url: queryUrl,
        success: function(data) {
          // callback code here
          console.log("source: " + data.length)
          alert('success!');
        }
      });

ただし、Firefoxでは「無効なラベルエラー」がスローされますが、Chromeではエラーはスローされませんが、query-results.srjファイルの2行目にあるように、Uncaught SyntaxError:Unexpected token:。応答の最初の行は次のようになります。

{
"head": {
    "vars": [ "s", "p", "o", "r" ]
}, 
"results": {
    "bindings": [ ...

今回は、リクエストが正常に実行され、ブラウザで確認できます(少なくとも、ChromeとFirefoxの両方のデバッグモードで)。jsonpトリックがSesameでは機能しないことを理解する必要がありますか?Sesameから回答を受け取った場合は、ファイルにコピーし、 file.jsに名前を変更して、$。 getJSONをロードします。これで問題なく動作します...このアプリケーションのサーバー側コードは必要ありません。 SPARQLクエリの結果を直接処理します。$.getJSONまたは$.ajaxを使用して、残りのソース(WorldBank、DBPediaなど)を簡単にセットアップできました。

よろしくお願いします!

4

1 に答える 1

4

これをテストするために独自の単純なJQueryスクリプトを作成しましたが、すべて期待どおりに機能しているようです。それが機能するまでには時間がかかりましたが、ほとんどの場合、これは私のスクリプトがSesameと同じサーバーで実行されていなかったという事実と関係がありました。

jsonpに関する質問に答えるために更新します。リリース2.7.0以降、SesameはJSONPコールバックをサポートします( SES-1019を参照)。

ただし、JQueryスクリプトがゴマサーバーと同じホストで実行されている場合、次のスクリプトはクエリ結果をテーブルとして出力します。私はあなたと何が違うのかよくわかりません。これが再利用を処理するのに最も効率的であるとは言いませんが、少なくともこれはうまくいくので、これが役立つことを願っています。

脚本:

      $(document).ready(function() {
      $.ajax({
                url: 'http://localhost:8080/openrdf-sesame/repositories/test',
                dataType: 'json', 
                data: { 
                    queryLn: 'SPARQL',
                    query: "SELECT * WHERE { ?s ?p ?o }", 
                    limit: 'none',
                    infer: 'true',
                    Accept: 'application/sparql-results+json'
                },
                success: displayData, 
                error: displayError
        });
    });

    function displayError(xhr, textStatus, errorThrown) {
        alert(textStatus);
        alert(errorThrown);
    }

    function displayData(data) {
        var header = $('#result thead').append('<tr/>');
        $.each(data.head.vars, function(key,value) {
            header.append("<th>" + value + "</th>");
        });


        $.each(data.results.bindings, function(index, bs) {
        var row = $('<tr/>');
        $.each(data.head.vars, function(key, varname) {
            row.append("<td>" + bs[varname].value + "</td>"); 
            });
        $("#result tbody").after(row);
        });
    }

HTML本文には空のテーブルが含まれています。

  <table id="result" border=1>
  <thead/>
     <tbody/>
  </table>
于 2012-05-29T23:43:44.270 に答える