C'est ma première question. Je fais un programme simple pour interroger DBpedia. J'utilise PHP API + EasyRdf RDF Library for PHP.EasyRDF - SPARQL interrogation DBpedia - Erreur "préfixe d'espace de noms non défini"
La requête SPARQL est correcte; ça fonctionne bien sur http://dbpedia.org/snorql. Je peux utiliser la requête pour l'exemple d'API; c'est aussi correct. Je prefix
avec dbo
, foaf
, rdfs
...
Mais quand j'utilise cette requête avec cette condidion ?person dbo:birthPlace :Berlin .
, j'ai cette erreur:
Fatal error:
Uncaught exception 'EasyRdf_Exception' with message 'HTTP request for SPARQL query failed:
Virtuoso 37000 Error SP030: SPARQL compiler, line 4: Undefined namespace prefix at '' before '.' SPARQL query: define sql:big-data-const 0 PREFIX foaf: PREFIX rdfs: PREFIX dbo: SELECT ?name ?person WHERE { ?person a dbo:MusicalArtist . ?person dbo:birthPlace :Berlin . ?person foaf:name ?name . ?person rdfs:comment ?description . } ORDER BY ?name' in D:\xampp\htdocs\HelloComposer\lib\EasyRdf\Sparql\Client.php:290 Stack trace: #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} thrown in D:\xampp\htdocs\HelloComposer\lib\EasyRdf\Sparql\Client.php on line 290
Mon code 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>
S'il vous plaît ... aidez-moi.
Avez-vous défini le préfixe ':' quelque part dans votre requête? – AKSW
À mon avis, la requête est bien. Cela fonctionne bien sur http://dbpedia.org/snorql et simplement, "bonjour monde", application de Jena. – Cezary
Merci de votre suggestion. À mon avis, la requête est bien. Cela fonctionne bien sur http://dbpedia.org/snorql et simplement, "bonjour monde", application de Jena. Il s'agit d'une requête d'exemples sur ce site officiel: http://wiki.dbpedia.org/OnlineAccess#1 Querying DBpedia. Cependant, une autre application en ligne populaire - le vérificateur de requêtes SPARQL a quelques erreurs. Je travaille sur ça. J'ai une idée pour résoudre ce problème ennuyeux. – Cezary