2017-09-23 15 views
1

Ce que j'essaie de faire est de lister toutes les classes en utilisant la requête suivante dans un fichier owl que j'ai créé en utilisant Protege 5 et qui a "foaf" comme ontologie importée.La requête SPARQL dans dotnetrdf ne demande pas l'ontologie importée

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
SELECT DISTINCT ?subject ?label ?comment 
    WHERE 
    { 
     ?subject a owl:Class 
     OPTIONAL { ?subject a rdfs:Class } 
     OPTIONAL { ?subject rdfs:label ?label } 
     OPTIONAL { ?subject rdfs:comment ?comment} 
    } 

Le problème est, quand je lance cette requête dans l'onglet SPARQL de Protege je reçois toutes les classes définies dans l'espace de noms « FOAF » mais lorsque je tente d'exécuter la même requête en utilisant dotnetrdf api en C# Je ne comprends pas le même résultat.

Après mon code en C#

var g = new Graph(); 
g.LoadFromFile(owlFile, new TurtleParser()); 
ISparqlDataset ds = new InMemoryDataset(g); 
LeviathanQueryProcessor processor = new LeviathanQueryProcessor(ds); 
var queryParser = new SparqlQueryParser(); 
var parmeterizedString = new SparqlParameterizedString(query); 
parmeterizedString.SetLiteral("value", searchQuery); 
return processor.ProcessQuery(queryParser.ParseFromString(parmeterizedString.ToString())) as SparqlResultSet; 

Qu'est-ce que je fais mal?

+0

'parmeterizedString.SetLiteral (" value ", searchQuery);' - il n'y a pas de valeur? Dans la requête. – AndyS

Répondre

4

Le simple fait d'analyser un fichier ne provoque pas de owl: les instructions imports doivent être respectées. Le moteur de recherche n'est pas sensible à OWL.

g.LoadFromFile(owlFile, new TurtleParser());

https://github.com/dotnetrdf/dotnetrdf/wiki/HowTo-Load-OWL

Alors que dotNetRDF ne supporte pas OWL en termes d'axiomes, ontologies OWL et raisonnement

LoadFromFile lit les déclarations RDF qui codent l'ontologie. Il n'y a pas de traitement au niveau OWL, et cela inclut le traitement owl:imports.

Vous pouvez simuler ceci en recherchant owl: imports et en lisant le lien dans g. Ce n'est pas parfait mais, à partir de la description originale, peut être ce qui est recherché.