我想获得我的本体的所有类。这是Protege创建的RDF/XML格式的本体文件的一部分:
<!-- http://www.w3.org/2002/07/owl#aqua -->
<Class rdf:about="&owl;aqua"/>
<!-- http://www.w3.org/2002/07/owl#varioPerfect -->
<Class rdf:about="&owl;varioPerfect"/>
我编写了这个查询,它在Protege中正常工作,但是当我在dotNetRDF中使用它时,它返回类的完整URI,而不仅仅是它的名称。
public string[] ontologysearch()
{
List<string> list = new List<string>();
TripleStore store = new TripleStore();
Graph mygraph = new Graph();
mygraph.LoadFromFile("D:/msc/search-engine/project/catalogXML.owl");
store.Add(mygraph);
string sparqlQuery1 = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
+ "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#>"
+ "SELECT distinct ?cls1"
+ " WHERE{"
+ " ?cls1 a owl:Class .}";
SparqlQueryParser sparqlParser = new SparqlQueryParser();
SparqlQuery query = sparqlParser.ParseFromString(sparqlQuery1);
InMemoryDataset ds = new InMemoryDataset(mygraph);
//Get the Query processor
ISparqlQueryProcessor processor = new LeviathanQueryProcessor(ds);
Object results = processor.ProcessQuery(query);
if (results is SparqlResultSet)
{
SparqlResultSet r = results as SparqlResultSet;
foreach (SparqlResult res in r)
{
list.Add(res["cls1"].ToString());
}
}
return list.ToArray();
我预期的结果只是“Aqua”,但实际上是“http://www.w3.org/2002/07/owl#Aqua”。为什么会发生这种情况,我如何取回名称呢?
RDF和OWL中的非匿名资源由IRIS标识。您的本体论清楚地表明http://www.w3.org/2002/07/owl#Aqua是类。如果你要求上课,那是你应该得到的。可能是Protege在显示结果时去掉了http://www.w3.org/2002/07/owl#部分,但结果实际上仍然是IRI。
注意:您确实不应该定义其IRI以标准OWL名称空间开头的新类。您应该定义自己的前缀,通常与本体IRI相关。
如果您只想获得字符串“Aqua”作为结果,您有两个选项。第一种(也是首选的)方法是检索类的rdfs:label(如果它有的话),它应该是类的字符串名。如果由于某种原因这不起作用,您可以取URI的字符串值并去掉前缀的字符串值。以下是DBpedia SPARQLendpoint上这两种方法的示例:
select ?class ?label where {
?class a owl:Class ; rdfs:label ?label
filter langMatches(lang(?label),'en')
}
limit 10
sql prettyprint-override">select ?class ?name where {
?class a owl:Class
bind(strafter(str(?class),str(dbpedia-owl:)) as ?name)
}
limit 10
为了显示的目的,通常不推荐去除URI的前缀,因为它假设URI具有人类可读的形式。在DBPedia的情况下,这恰好起作用,但许多数据集都具有带有内部代码的URI,而不是人类可读的名称。因此,如果rdfs:label
(它被显式定义为资源的人类可读表示形式)可用,您应该尝试并始终使用它。
问题内容: 很难说出这里的要求。这个问题是模棱两可的,模糊的,不完整的,过于广泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 嗨,我试图发现如何解决我的查询以返回正确的结果。这是我的查询: 查询应返回一个小数点后一位数字(3.5)。在PhpMyAdmin中进行测试时,它工作正常,但是在我的网站上,它返回。 数据库连接一切正常。 问题
问题内容: 我有一堆应聘者,他们有一些或多个工作,每个人都在公司工作,并且使用了一些技能。 坏的ascii艺术如下: 这是我的数据库: 。 。 。 。 这是我对查询的尝试(请注意,我打算将通配符更改为字段名称;我只是想使某些功能生效): HediSql说 查询出了什么问题?我希望从不良的ascii艺术中可以清楚地知道我要达到的目标。 (此外,它对我连接表的顺序是否有任何速度差异?我将担心新的MyS
我的代码: 当我尝试运行这样的东西时: 我得到了: 但为什么? 我的主要目标是将返回承诺的中的token转换为一个变量。然后才预形成一些动作。
问题内容: 我的代码: 当我尝试运行这样的东西时: 我越来越: 但为什么? 我的主要目标是将令牌(从令牌中返回承诺)转换为变量。然后才执行一些操作。 问题答案: 只要其结果尚未解决,promise将始终记录未决。无论promise状态如何(已解决或仍处于待处理状态),您都必须调用promise来捕获结果: 这是为什么? 承诺只是向前的方向;您只能解决一次。a的解析值传递给其或方法。 根据Promi
问题内容: 快速版本 基本上,我正在更新hibernate表,后续查询正在加载陈旧的值。 详细版本 hibernate(3.3.1.GA)和EhCache(2.4.2)。 包含页面的持久对象,我将页面添加到本书的中间。我正在使用Databinder / Wicket,尽管我认为这并不相关。 适用的字段/方法是: 最终结果是,有一个新页面添加到列表中,并且数据库也进行了相应更新,我已经在我的数据存储