3

私は dotNetRDF を使用しており、SPARQL クエリを実行しようとしていました

PREFIX rdfh: <http://lod2.eu/schemas/rdfh#>

SELECT * WHERE{ ?lo_orderdate <http://lod2.eu/schemas/rdfh#d_year> ?d_year .
FILTER(?d_year = 1993) }

しかし、Sesameに対して実行しようとすると、このエラーが発生しました:

Unable to Parse a SPARQL Result Set since a <literal> element has too many Attributes, only 1 of 'xml:lang' or 'datatype' may be specified!
StackTrace:
   at VDS.RDF.Parsing.SparqlXmlParser.ParseValue(SparqlXmlParserContext context)
   at VDS.RDF.Parsing.SparqlXmlParser.Parse(SparqlXmlParserContext context)
   at VDS.RDF.Parsing.SparqlXmlParser.Load(ISparqlResultsHandler handler, TextReader input)
   at VDS.RDF.Parsing.SparqlXmlParser.Load(ISparqlResultsHandler handler, StreamReader input)
   at VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(ISparqlResultsHandler handler, String sparqlQuery)
   at VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet(String sparqlQuery)
   at VDS.RDF.Query.RemoteQueryProcessor.ProcessQuery(SparqlQuery query)

TTL ファイルのサンプルは次のようになります。

@prefix xsd:  ... .
@prefix rdfh: ... .
@prefix rdfh-inst: ... . # cannot put real values - don't have enough reputation
rdfh-inst:date_19920101 a rdfh:date ;
rdfh:d_datekey 19920101 ;
rdfh:d_date "January 1, 1992" ;
rdfh:d_dayofweek "Thursday" ;
rdfh:d_month "January" ;
rdfh:d_year 1992 ;
rdfh:d_yearmonthnum 199201 ;
rdfh:d_yearmonth "Jan1992" ;
rdfh:d_daynuminweek 5 ;
rdfh:d_daynuminmonth 1 ;
rdfh:d_daynuminyear 1 ;
rdfh:d_monthnuminyear 1 ;
rdfh:d_weeknuminyear 1 ;
rdfh:d_sellingseason "Winter" ;
rdfh:d_lastdayinweekfl "0" ;
rdfh:d_lastdayinmonthfl "1" ;
rdfh:d_holidayfl "1" ;
rdfh:d_weekdayfl "1" .

rdfh-inst:date_19920102 a rdfh:date ;
rdfh:d_datekey 19920102 ;
rdfh:d_date "January 2, 1992" ;
rdfh:d_dayofweek "Friday" ;
rdfh:d_month "January" ;
rdfh:d_year 1992 ;
rdfh:d_yearmonthnum 199201 ;
rdfh:d_yearmonth "Jan1992" ;
rdfh:d_daynuminweek 6 ;
rdfh:d_daynuminmonth 2 ;
rdfh:d_daynuminyear 2 ;
rdfh:d_monthnuminyear 1 ;
rdfh:d_weeknuminyear 1 ;
rdfh:d_sellingseason "Winter" ;
rdfh:d_lastdayinweekfl "0" ;
rdfh:d_lastdayinmonthfl "1" ;
rdfh:d_holidayfl "0" ;
rdfh:d_weekdayfl "1" .

Sesame は 2 つの属性を返し、dotNetRDF は 1 つしか想定していないため、このエラーが発生していると思います。

<head>
    <variable name='lo_orderdate'/>
    <variable name='d_year'/>
    <link href='info'/>
</head>
<results>
    <result>
        <binding name='d_year'>
            <literal q:qname='xsd:integer' datatype='http://www.w3.org/2001/XMLSchema#integer'>1993</literal>
        </binding>
        <binding name='lo_orderdate'>
            <uri q:qname='rdfh-inst:date_19930101'>http://lod2.eu/schemas/rdfh-inst#date_19930101</uri>
        </binding>
    </result>
    <result>
        <binding name='d_year'>
            <literal q:qname='xsd:integer' datatype='http://www.w3.org/2001/XMLSchema#integer'>1993</literal>
        </binding>
        <binding name='lo_orderdate'>
            <uri q:qname='rdfh-inst:date_19930102'>http://lod2.eu/schemas/rdfh-inst#date_19930102</uri>
        </binding>
    </result>
    </results>

OpenVirtuoso を使用している場合、このエラーは発生しません

4

1 に答える 1

2

extra 属性q:qnameは、標準形式の Sesame 固有の拡張です。これは、Sesame でサポートされている構成設定SPARQLXMLWriterですが、デフォルトでは有効になっていません。

ただし、Workbench クライアント アプリケーションはこの機能を有効にし、クエリ結果をエクスポートするときにこれらの追加属性を追加するようです。したがって、ワークベンチでクエリを実行し、結果をファイルにエクスポートすることで、クエリ結果を取得していると思われます。これは Workbench アプリケーションのバグであり、現在そのように報告されています ( SES-2059を参照)。

回避策は、ワークベンチの問題を回避して、代わりに別のツールから Sesame サーバーにクエリを実行することです。のようなものを使用するcurlことも、必要に応じて任意の Web ブラウザーから直接行うこともできます。

たとえば、SPARQL クエリが次の場合:

SELECT * WHERE {?S ?P ?O } LIMIT 100

たとえば で実行されている Sesame サーバーがあり、localhost:8080クエリしているリポジトリが と呼ばれているmyRepository場合、次の URL をブラウザに入力して、Sesame サーバーから直接結果を取得できます。

http://localhost:8080/openrdf-sesame/repositories/myRepository?query=SELECT * WHERE {?S ?P ?O } LIMIT 100

別の回避策は、dotNetRDF 開発者にパーサーの厳密さを少し緩和するよう訴えることです:)

于 2014-05-06T23:57:15.530 に答える