【问题标题】:EasyRDF - SPARQL querying DBpedia - "Undefined namespace prefix" errorEasyRDF - SPARQL 查询 DBpedia - “未定义的命名空间前缀”错误
【发布时间】:2017-09-28 08:49:45
【问题描述】:

这是我的第一个问题。我正在制作一个简单的程序来查询 DBpedia。我使用 PHP API + EasyRdf RDF Library for PHP

SPARQL 查询正确;它在http://dbpedia.org/snorql 上运行良好。我可以对 API 示例使用查询;这也是正确的。我有prefixdbofoafrdfs...

但是当我在这个条件下使用这个查询时?person dbo:birthPlace :Berlin .,我有这个错误:

致命错误:

未捕获的异常“EasyRdf_Exception”和消息“SPARQL 查询的 HTTP 请求失败:

Virtuoso 37000 错误 SP030:SPARQL 编译器,第 4 行:在 '.' 之前的 '' 未定义命名空间前缀SPARQL 查询:定义 sql:big-data-const 0 PREFIX foaf: PREFIX rdfs: PREFIX dbo: SELECT ?name ?person WHERE { ?person a dbo:MusicalArtist 。 ?person dbo:birthPlace:柏林。 ?person foaf:name ?name . ?person rdfs:comment ?description 。 } ORDER BY ?name' in D:\xampp\htdocs\HelloComposer\lib\EasyRdf\Sparql\Client.php:290 堆栈跟踪:#0 D:\xampp\htdocs\HelloComposer\lib\EasyRdf\Sparql\Client.php (120): EasyRdf_Sparql_Client->request('query', 'SELECT ?name ?p...') #1 D:\xampp\htdocs\dbpedia\index.php(43): EasyRdf_Sparql_Client->query('SELECT ? name ?p...') #2 {main} 在第 290 行的 D:\xampp\htdocs\HelloComposer\lib\EasyRdf\Sparql\Client.php 中抛出

我的 PHP 代码 --

<?php



require_once('D:\xampp\htdocs\HelloComposer\lib\EasyRdf.php');
require_once ('D:\xampp\htdocs\HelloComposer\lib\html_tag_helpers.php');

//PREFIX

EasyRdf_Namespace::set('category', 'http://dbpedia.org/resource/Category:');
EasyRdf_Namespace::set('dbpedia', 'http://dbpedia.org/resource/');
EasyRdf_Namespace::set('dbo', 'http://dbpedia.org/ontology/');
EasyRdf_Namespace::set('dbp', 'http://dbpedia.org/property/');
EasyRdf_Namespace::set('foaf', 'http://xmlns.com/foaf/0.1');
EasyRdf_Namespace::set('rdfs', 'http://www.w3.org/2000/01/rdf-schema#');




$sparql = new EasyRdf_Sparql_Client('http://dbpedia.org/sparql');
?>

<html>
<head>
  <title>EasyRdf Basic Sparql Example</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>EasyRdf Basic Sparql Example</h1>

<h2>List of artists</h2>
<ul>
<?php
    $result = $sparql->query(
        'SELECT ?person ?name ?description WHERE {'.
        '  ?person a dbo:MusicalArtist .'.
        '  ?person dbo:birthPlace :Berlin .'.
        '  ?person foaf:name ?name .'.
        '  ?person rdfs:comment ?description . '.
        '  FILTER (LANG(?description) = "en") .'.
        '} ORDER BY ?name'
    );
    foreach ($result as $row) {
        echo "<li>".link_to($row->name, $row->person)."</li>\n";
    }
?>
</ul>
<p>Total number of artists: <?= $result->numRows() ?></p>

</body>
</html>

请……帮帮我。

【问题讨论】:

  • 您是否在查询中的某处定义了前缀:
  • 在我看来查询没问题。它在 dbpedia.org/snorql 和简单的“hello world”上运行良好,jena 应用程序。
  • 感谢您的建议。在我看来查询很好。它在dbpedia.org/snorql 和简单的“hello world”上运行良好,jena 应用程序。这是官方网站的一个示例查询:wiki.dbpedia.org/OnlineAccess#1Querying DBpedia。然而,另一个流行的在线应用程序——SPARQL Query Validator 有一些错误。我正在做这件事。我有一个想法可以解决这个烦人的问题。
  • 这很奇怪。查询很好,但 dbpedia.org/snorql 中的前缀与“Berlin”有问题。目前,我正在尝试使用来自 dbpedia.org/snorql + PREFIX dbo 的标准前缀:dbpedia.org/ontology>。也许另一个前缀有问题。我正在使用这个应用程序来发现错误的部分关闭代码:sparql.org/query-validator.html
  • 在您的查询中,您没有定义了前缀:

标签: sparql semantic-web dbpedia virtuoso linked-data


【解决方案1】:

通过DBpedia SNORQL interface 进行测试时,会自动预定义几个前缀,以使 CURI 更容易 --

PREFIX      owl: <http://www.w3.org/2002/07/owl#>
PREFIX      xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX     rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX      rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX     foaf: <http://xmlns.com/foaf/0.1/>
PREFIX       dc: <http://purl.org/dc/elements/1.1/>
PREFIX         : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX  dbpedia: <http://dbpedia.org/>
PREFIX     skos: <http://www.w3.org/2004/02/skos/core#>

当您尝试通过其他工具或界面(包括但不限于 EasyRDF)使用查询时,可能会出现混淆,因为大多数不会对所有这些前缀进行预定义 - 有些可能有不同相同前缀字符串的扩展!

对于您从 SNORQL 列表中使用的任何和所有前缀,您必须确保您的查询包含与 SNORQL 相同的定义。

对于这个查询,您只需要 SNORQL 列表中的三个(但包括所有十个不会导致任何问题),加上 dbo: --

PREFIX     foaf: <http://xmlns.com/foaf/0.1/>
PREFIX         : <http://dbpedia.org/resource/>
PREFIX     rdfs: <http://www.w3.org/2000/01/rdf-schema#>

PREFIX      dbo: <http://dbpedia.org/ontology/>

EasyRDF 中的声明看起来有点不同,但与上面在 SPARQL/SNORQL 中所做的相同。首先,查询所需的最低要求 --

EasyRdf_Namespace::set('foaf', 'http://xmlns.com/foaf/0.1/');
EasyRdf_Namespace::set('', 'http://dbpedia.org/resource/');
EasyRdf_Namespace::set('rdfs', 'http://www.w3.org/2000/01/rdf-schema#');

EasyRdf_Namespace::set('dbo', 'http://dbpedia.org/ontology/');

--第二,你需要的全套--

EasyRdf_Namespace::set('owl', 'http://www.w3.org/2002/07/owl#');
EasyRdf_Namespace::set('xsd', 'http://www.w3.org/2001/XMLSchema#');
EasyRdf_Namespace::set('rdfs', 'http://www.w3.org/2000/01/rdf-schema#');
EasyRdf_Namespace::set('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
EasyRdf_Namespace::set('foaf', 'http://xmlns.com/foaf/0.1/');
EasyRdf_Namespace::set('dc', 'http://purl.org/dc/elements/1.1/');
EasyRdf_Namespace::set('', 'http://dbpedia.org/resource/');
EasyRdf_Namespace::set('dbpedia2', 'http://dbpedia.org/property/');
EasyRdf_Namespace::set('dbpedia', 'http://dbpedia.org/');
EasyRdf_Namespace::set('skos', 'http://www.w3.org/2004/02/skos/core#');

EasyRdf_Namespace::set('dbo', 'http://dbpedia.org/ontology/');

【讨论】:

  • 谢谢先生。这将非常有用。
【解决方案2】:

好的。错误结束。什么时候可以使用 PHP 和 EasyRDF 来查询 DBpedia,你应该记住键前缀。它是PREFIX : &lt;http://dbpedia.org/resource/&gt;。您可以只使用一个声明来使用这个简单的查询 - EasyRdf_Namespace::set('', 'http://dbpedia.org/resource/')。但更好的解决方案是使用一些额外的PREFIX 来完成更艰巨的任务。

使用 EasyRDF,我建议使用以下代码:

EasyRdf_Namespace::set('owl', 'http://www.w3.org/2002/07/owl#');
EasyRdf_Namespace::set('xsd', 'http://www.w3.org/2001/XMLSchema#');
EasyRdf_Namespace::set('rdfs', 'http://www.w3.org/2000/01/rdf-schema#');
EasyRdf_Namespace::set('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
EasyRdf_Namespace::set('foaf', 'http://xmlns.com/foaf/0.1/');
EasyRdf_Namespace::set('dc', 'http://purl.org/dc/elements/1.1/');
EasyRdf_Namespace::set('', 'http://dbpedia.org/resource/');
EasyRdf_Namespace::set('skos', 'http://www.w3.org/2004/02/skos/core#');
EasyRdf_Namespace::set('dbo', 'http://dbpedia.org/ontology/');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多