Привет, я хочу получить все суперклассы подкласса. До root я использую RDFDo tNet, вот мой код:
string GetSuperClassesUntilRoot = @"
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 : <" + OntologyUrl + @">
select ?superclass where {
<" + Class+ @"> (rdfs:subClassOf|(owl:intersectionOf/rdf:rest*/rdf:first))* ?superclass .
}
";
string GetSuperClassesUntilRoot2 = @"
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 : <" + OntologyUrl + @">
SELECT ?superClass WHERE
{ <" + Class + @"> rdfs:subClassOf* ?superClass .
}
";
// FILTER (!isBlank(rdfs:subClassOf))
//FILTER(!isBlank(?superClass))
Object results = g.ExecuteQuery(GetSuperClassesUntilRoot2);
if (results is SparqlResultSet)
{
//SELECT/ASK queries give a SparqlResultSet
SparqlResultSet rset = (SparqlResultSet)results;
foreach (SparqlResult r in rset)
{
Classes.Add(r["superClass"].ToString());
//Do whatever you want with each Result
}
}
else if (results is IGraph)
{
//CONSTRUCT/DESCRIBE queries give a IGraph
IGraph resGraph = (IGraph)results;
foreach (Triple t in resGraph.Triples)
{
//Do whatever you want with each Triple
}
}
else
{
//If you don't get a SparqlResutlSet or IGraph something went wrong
//but didn't throw an exception so you should handle it here
MessageBox.Show("No Data Found.");
}
Я пробую его с некоторым файлом совы, и это сработало, но когда я использую другую сову, я получаю ошибку:
сообщение об ошибке:
Unable to Cast object of type 'VDS.RDF.Query.Patterns.FixedBlankNodePattern' to type 'VDS.RDF.Query.Patterns.NodeMatchPattern'
вот файл совы: Файл OWL Я не уверен, но может ли этот файл совы, созданный Protege 5.5, потому что он не открыт с Protege 4, как решить эту проблему? пожалуйста, помогите мне. спасибо за помощь