【问题标题】:Unable to Parse a SPARQL Result Set since a <literal> element has too many Attributes无法解析 SPARQL 结果集,因为 <literal> 元素具有太多属性
【发布时间】:2014-05-05 11:53:08
【问题描述】:

我正在使用 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 正在返回两个属性,而 dotNetRDF 只需要一个

<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 时没有收到此错误

【问题讨论】:

    标签: xml sparql sesame dotnetrdf openrdf


    【解决方案1】:

    额外属性q:qname 是标准格式的芝麻专用扩展。这是一个configuration setting,Sesame 的SPARQLXMLWriter 支持但默认不启用。

    但是,Workbench 客户端应用程序似乎启用了此功能并在导出查询结果时添加了这些附加属性。因此,我怀疑您是通过在 Workbench 中进行查询然后将结果导出到文件来获取查询结果。这是 Workbench 应用程序中的一个错误,现已报告(请参阅SES-2059)。

    一种解决方法是通过其他工具查询您的 Sesame 服务器,绕过 Workbench 的问题。您可以使用curl 之类的东西,或者如果您愿意,您甚至可以直接从任何网络浏览器执行此操作。

    例如,如果您的 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 开发人员稍微放松一下解析器的严格性:)

    【讨论】:

    • 谢谢,Jeen,我确实使用了工作台。由于 dotNetRDF 是开源的,我对其进行了更改并重新编译,现在没有收到此错误。您的回答也帮助我解决了另一个问题...再次感谢。
    猜你喜欢
    • 2013-02-27
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多