gpt4 book ai didi

sparql - 仅当类型为文字时过滤语言

转载 作者:行者123 更新时间:2023-12-02 08:32:39 24 4
gpt4 key购买 nike

这可能与以下问题几乎相同: Filter by language only if the object is a literal

问题是那里的答案不适用于我的情况。

我有这个查询:

SELECT ?property ?value
WHERE { <http://dbpedia.org/resource/Facebook> ?property ?value
FILTER(STRSTARTS(STR(?property), "http://dbpedia.org/property") || STRSTARTS(STR(?property), "http://dbpedia.org/ontology"))}

Result in Virtuoso

在那里,您会看到一个属性列表,包括多种语言的“Alexa 评级 2”和“摘要”。

如果我然后尝试上述问题中建议的解决方案:

SELECT ?property ?value
WHERE { <http://dbpedia.org/resource/Facebook> ?property ?value
FILTER(STRSTARTS(STR(?property), "http://dbpedia.org/property") || STRSTARTS(STR(?property), "http://dbpedia.org/ontology"))
FILTER(!isLiteral(?value) || langMatches(lang(?value), "EN"))}

Result in Virtuoso

现在您会看到只有英文版的“abstract”存在,但“alexa rating 2”和许多其他非字符串值都消失了。

有人知道如何获取第一个查询中的所有属性,然后对于文字仅过滤掉英语吗?

最佳答案

您的第二个查询确实过滤掉具有英语以外的语言标记的文字。在 RDF 1.0 中,存在三种类型的文字:

  • 纯文本(无数据类型,无语言标记)
  • 语言标记文字(字符串和语言标记)
  • 数据类型文字(词法形式和数据类型)

因此,Alexa 评级的值为 2 文字,并且它没有语言标签,因此语言标签肯定不是' t "EN" (更重要的是,不匹配 "EN";langMatches 会进行一些更复杂的检查)。您想要的是过滤掉非英语标记的文字。这并不难;您只需将 lang(?value) = "" 添加到过滤器(因为 lang 对于没有语言标记的文字返回 ""):

SELECT ?property ?value
WHERE { <http://dbpedia.org/resource/Facebook> ?property ?value
FILTER(STRSTARTS(STR(?property), "http://dbpedia.org/property") || STRSTARTS(STR(?property), "http://dbpedia.org/ontology"))
FILTER(!isLiteral(?value) || lang(?value) = "" || langMatches(lang(?value), "EN"))}

SPARQL results

读取该过滤器的方法是:

Keep values that

  1. are not literals; or
  2. are literals, but don't have a language tag; or
  3. are literals with a language tag that matches "en".

关于sparql - 仅当类型为文字时过滤语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com