DBpedia SPARQL 查询返回多个重复记录

2023-12-12

我对 SPARQL 还很陌生,并且对它现有的多种语法标准感到困惑。 我正在努力使用以下查询从 DBpedia 获取唯一数据:

SELECT DISTINCT ?Museum, ?name, ?abstract, ?thumbnail, ?latitude,
   ?longitude, ?photoCollection, ?website, ?homepage, ?wikilink
WHERE { 
  ?Museum a dbpedia-owl:Museum ; 
          dbpprop:name ?name ; 
          dbpedia-owl:abstract ?abstract ; 
          dbpedia-owl:thumbnail ?thumbnail ; 
          geo:lat ?latitude ;  
          geo:long ?longitude ; 
          dbpprop:hasPhotoCollection ?photoCollection ;
          dbpprop:website ?website ; 
          foaf:homepage ?homepage ; 
          foaf:isPrimaryTopicOf ?wikilink .
  FILTER(langMatches(lang(?abstract),"EN")) 
  FILTER (langMatches(lang(?name),"EN"))
}
LIMIT 20

SPARQL 结果

任何人都可以看到,条目Geffrye_Museum and Institute_for_Museum_Research结果重复,因为Institute_for_Museum_Research它的名称有两个不同的值Geffrye_Museum有两个经度值。在这两种重复的情况下,我希望丢弃第二个值;即,对于Geffrye_Museum经度值-0.0762194必须被忽略,并且对于Institute_for_Museum_Research名称值"Institut für Museumsforschung"@en必须被忽略。

请注意,我已经对我想要的字段应用了过滤,这只是 DBpedia 中我想在查询级别本身处理的大量数据。那么,当同一列有多个值时,如何使 DBpedia 仅返回第一个值呢?


我们先看一个案例。对于 Geffrye,会出现重复结果,因为数据中存在多个经度,如以下查询所示:

SELECT ?museum ?latitude ?longitude
WHERE { 
  VALUES ?museum { dbpedia:Geffrye_Museum }
  ?museum a dbpedia-owl:Museum ; 
          geo:lat ?latitude ;  
          geo:long ?longitude .
}
GROUP BY ?museum ?latitude ?longitude

SPARQL 结果

产生

museum                                     latitude longitude
http://dbpedia.org/resource/Geffrye_Museum 51.5317  -0.07663
http://dbpedia.org/resource/Geffrye_Museum 51.5317  -0.0762194

幸运的是,这很容易解决。正如中所讨论的这个问题您可以按特征值对结果进行分组,然后对这些值进行采样、最小化、最大化等,以准确获得您想要的结果。例如,如果您想要最大的经度值,您可以使用MAX(?longtude) as ?longitude在您的 SELECT 中,如以下查询所示,它会生成单个值。

SELECT ?museum ?latitude (MAX(?longitude) as ?longitude)
WHERE { 
  VALUES ?museum { dbpedia:Geffrye_Museum }
  ?museum a dbpedia-owl:Museum ; 
          geo:lat ?latitude ;  
          geo:long ?longitude .
}
GROUP BY ?museum ?latitude

SPARQL 结果

当然,它假设有一些分组知识?latitude并最大化?longitude。分组可能是一个更好的主意?museum并使用聚合投影来提取其他值,如下所示:

SELECT ?museum (MAX(?latitude) as ?latitude) (MAX(?longitude) as ?longitude)
WHERE { 
  VALUES ?museum { dbpedia:Geffrye_Museum }
  ?museum a dbpedia-owl:Museum ; 
          geo:lat ?latitude ;  
          geo:long ?longitude .
}
GROUP BY ?museum

SPARQL 结果

对所有变量采用这种方法会产生如下结果:

SELECT DISTINCT ?Museum
  (SAMPLE(?name) as ?name)
  (SAMPLE(?abstract) as ?abstract)
  (SAMPLE(?thumbnail) as ?thumbnail)
  (MAX(?latitude) as ?latitude)
  (MAX(?longitude) as ?longitude)
  (SAMPLE(?photoCollection) as ?photoCollection)
  (SAMPLE(?website) as ?website)
  (SAMPLE(?homepage) as ?homepage)
  (SAMPLE(?wikilink) as ?wikilink)
WHERE { 
  ?Museum a dbpedia-owl:Museum ; 
          dbpprop:name ?name ; 
          dbpedia-owl:abstract ?abstract ; 
          dbpedia-owl:thumbnail ?thumbnail ; 
          geo:lat ?latitude ;  
          geo:long ?longitude ; 
          dbpprop:hasPhotoCollection ?photoCollection ;
          dbpprop:website ?website ; 
          foaf:homepage ?homepage ; 
          foaf:isPrimaryTopicOf ?wikilink .
  FILTER(langMatches(lang(?abstract),"EN")) 
  FILTER (langMatches(lang(?name),"EN"))
}
GROUP BY ?Museum
LIMIT 20

SPARQL 结果

必须对所有变量使用聚合投影似乎有点尴尬,但它会起作用。但是,您也可以首先在子查询中进行聚合,这将清理变量投影,但代价是子查询。 (子查询不一定会对查询产生负面影响;事实上,它可能是相反的。不过,查询本身有点难以阅读。)

SELECT * WHERE { 
  # Select museums and a single latitude and longitude for them.
  {
    SELECT ?Museum (MAX(?longitude) as ?longitude) (MAX(?latitude) as ?latitude) WHERE {
      ?Museum a dbpedia-owl:Museum ;
              geo:lat ?latitude ;
              geo:long ?longitude .
    }
    GROUP BY ?Museum
  }
  # Get the rest of the properties of the museum.
  ?Museum dbpprop:name ?name ;
          dbpedia-owl:abstract ?abstract ; 
          dbpedia-owl:thumbnail ?thumbnail ; 
          dbpprop:hasPhotoCollection ?photoCollection ;
          dbpprop:website ?website ; 
          foaf:homepage ?homepage ; 
          foaf:isPrimaryTopicOf ?wikilink .
  FILTER(langMatches(lang(?abstract),"EN")) 
  FILTER (langMatches(lang(?name),"EN"))
}
GROUP BY ?Museum
LIMIT 20

SPARQL 结果

最后,由于您需要对名称和地理坐标进行标准化,因此您的最终查询将类似于以下内容。在你的问题中,你只说你想保留“第一个结果”,但结果没有强加特定的顺序,因此不存在唯一的“第一个结果”。有了手头的数据,您可以使用(MIN(?name) as ?name)你会得到你想要的博物馆研究所的名称,但如果你有一个特定的限制,你需要弄清楚如何使它更具体。

SELECT * WHERE { 
  # Select museums and a single latitude, longitude, and name for them.
  {
    SELECT ?Museum 
           (MIN(?name) as ?name)
           (MAX(?longitude) as ?longitude)
           (MAX(?latitude) as ?latitude)
    WHERE {
      ?Museum a dbpedia-owl:Museum ;
              dbpprop:name ?name ;
              geo:lat ?latitude ;
              geo:long ?longitude .
      FILTER (langMatches(lang(?name),"EN"))
    }
    GROUP BY ?Museum
  }
  # Get the rest of the properties of the museum.
  ?Museum dbpprop:name ?name ;
          dbpedia-owl:abstract ?abstract ; 
          dbpedia-owl:thumbnail ?thumbnail ; 
          dbpprop:hasPhotoCollection ?photoCollection ;
          dbpprop:website ?website ; 
          foaf:homepage ?homepage ; 
          foaf:isPrimaryTopicOf ?wikilink .
  FILTER(langMatches(lang(?abstract),"EN")) 
}
LIMIT 20

SPARQL 结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DBpedia SPARQL 查询返回多个重复记录 的相关文章

  • 如何删除sparql查询中的重复项

    我写了这个查询并返回情侣列表和特定条件 在http live dbpedia org sparql http live dbpedia org sparql SELECT DISTINCT actor person2 cnt WHERE s
  • SPARQL 支持 protege 5

    protege 5 2 0 SPARQL 查询插件 2 02 对 SPARQL 的支持程度如何 我尝试使用 FILTER STRSTARTS STR subject STR prefix 我得到 未知函数 http www w3 org 2
  • 数据导入期间超出 Fuseki GC 开销限制

    我正在尝试在启动时将 LinkedMDB 610 万个三元组 导入到我的本地版本的 jena fuseki 中 path to fuseki server file path to linkedmdb nt ds 它运行了一分钟 然后因以下
  • 如何使用 DBpedia 属性构建主题层次结构?

    我试图通过遵循下面提到的两个 DBpedia 属性来构建主题层次结构 skos 更广泛的财产 dcterms 主题属性 我的目的是给这个词确定它的主题 例如 给出这个词 支持向量机 我想从中识别主题 例如分类算法 机器学习等 然而 有时我对
  • 使用 rdflib 为 sparqlWrapper 的 sparql 'SELECT' 查询的输出构建图表

    我正在尝试根据 SPARQL 查询的结果构建一个图表 为了构建查询 我使用 SparqlWrapper 和 DBpedia 作为知识库 from SPARQLWrapper import SPARQLWrapper JSON from rd
  • Sparql 查询永远运行

    我在耶拿执行 SPARQL 查询时遇到了困难 结果导致了我无法理解的行为 我正在尝试查询 Esco 本体 https ec europa eu esco download https ec europa eu esco download 我
  • SPARQL递归祖先查询

    我被 SPARQL 中的递归查询困住了 我无法理解它 我想获得一个实例的所有祖先 a a hasParent b b hasParent c c hasParent d 所以结果将是 b c and d 如果实例是 a 有什么想法如何构造父
  • dbpedia 提取 JSON

    http dbpedia org resource Los Angeles http dbpedia org resource Los Angeles您可以通过在 HTTP 请求中使用适当的标头以编程方式以多种格式请求此数据 例如 Acce
  • 禁用 apache.http.wire 调试日志

    我正在将 Travis CI 与我的 github 存储库 java 项目 一起使用 我的一项测试使用 SPARQL 和 Jena 从 Dbpedia 获取数据 它导致我在日志中将许多记录打印到 Travis 输出中 从而导致 Travis
  • 为 RDBMS(MySQL 数据库)创建 SPARQL 端点的最佳方法

    我正在 想做 一些链接开放数据集的实验 特别是政府推出的实验 我有一个 RDBMS 更具体地说是 MySQL 我设计它时考虑了语义网络的想法 即我将信息存储为对象 谓词和定义对象的类 反过来 所有对象通过主语 gt 谓词 gt 宾语形式的语
  • sparql 主题的完整树

    例如 当我有一个人图时 例如约翰和约翰有工作地址 家庭地址 电话号码 关系等 是否有可能在不知道它是什么的情况下检索与 john 及其子类相关的所有内容 这样我就可以检索例如以下内容 John lt address lt house num
  • 如何将嵌入的 Blazegraph 内容转储到 RDF 文件?

    I have 创建了 blazegraph RDF4J 存储库和连接 https wiki blazegraph com wiki index php Sesame API Tutorial在斯卡拉中 val props new Prope
  • Jena 桌面 SPARQL 客户端 (TDB)?

    我正在开发一个使用 Jena 进行存储 带有 TDB 后端 的应用程序 我正在寻找类似 Squirrel 的东西 它可以让我看到正在存储的内容 运行查询等 这似乎是一个明显需要的东西 但我的 可能措辞不好 谷歌查询没有出现任何有希望的东西
  • 在 Protege 中使用 SPARQL 推断数据

    我正在尝试推断 RDF 数据 假设我有这些三元组 RDF Turtle 是我使用 Protege 创建的 prefix owl
  • 提取给定节点的所有父节点

    我正在尝试使用以下命令提取每个给定 GO Id 节点 的所有父级EBI RDF sparql 端点 https www ebi ac uk rdf services sparql 我是根据this https stackoverflow c
  • 用于查找艺术家属性的 dbpedia SPARQL 查询

    我试图通过 DBPedia 和 SPARQL 查询语言获取有关艺术家的详细信息 但是 根据我的理解 如何获取某些信息似乎几乎是不可能的 我正在尝试找到一位艺术家并获取诸如他们的家乡之类的信息 我猜查询应该类似于 SELECT c WHERE
  • 如何返回从起始资源到指定路径深度的所有 S->P->O 三元组?

    我的目标是以图形方式表示指定资源的深度两条边内的 S gt P gt O 关系 p Person 1 我希望从查询中返回该路径长度内的所有关系 s p o在我的图形应用程序中进行进一步处理 我尝试了下面的第一个查询 它给了我第一组 s p
  • 如何将dbpedia导入neo4j? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要将 dbpedia 导入 neo4j 我从这里下载 dbpedia http wiki dbpedia org Download
  • SPARQL (Jena) UPDATE 可以通过文字集合(而不是文字)进行参数化吗?

    我可以调用参数化的 SPARQL UPDATE 如 Jena 的ParameterizedSparqlString 将属性设置为多个 例如字面值 例如 我有 Set
  • 如何以 JSON-LD 返回 SPARQL 结果?

    返回 SPARQL 查询结果的好方法是什么JSON LD http www w3 org TR 2014 REC json ld 20140116 最好靠近标准化 JSON 格式 http www w3 org TR 2013 REC sp

随机推荐

  • 在 Laravel 中反序列化数据

    我将购物车数据保存到orders表与serialize方法 现在在我的订单 查看 页面中 我想将它们显示给用户以显示他们的订单历史记录 如何将以前序列化的数据恢复为 PHP 中可用的对象 数组 我保存数据的代码片段 order gt car
  • 设置 php-fpm 默认配置文件位置

    我已经从源代码 php php fpm nginx 构建了几次 我习惯把所有东西都藏在里面 usr local 然而 php fpm 配置文件php fpm conf总是加载自 etc 当然我可以用以下命令更改位置 y启动 php fpm
  • “连接被对等方重置”是什么意思?

    TCP 连接上的 连接被对等方重置 错误是什么意思 这是致命错误还是只是通知或与网络故障有关 这是致命的 远程服务器已向您发送了 RST 数据包 这表明连接立即断开 而不是通常的握手 这绕过了正常的半封闭状态转换 我喜欢这个描述 对等方重置
  • Spring Batch:使用新线程从 Spring MVC 控制器中启动作业

    我有一个从 Spring MVC 控制器启动的 Spring Batch 作业 控制器从用户处获取上传的文件 并且作业应该处理该文件 RequestMapping value upload public ModelAndView uploa
  • 声音将在 Eclipse 中播放,但不会在导出的 jar 文件中播放

    当我运行 JAR 时 声音不播放 但当我在 Eclipse 中运行它时 声音会播放 这是我加载剪辑的位置 文件是从 jar 的目录加载的 而不是从 jar 内加载 public void init System out println gr
  • Firebase 崩溃无法读取

    我在阅读 FireBase 上的崩溃报告时遇到问题 我的报告如下所示 我已经关注了这些说明来表示堆栈跟踪 得到了相同的结果 我正在使用 Xcode 8 我的应用程序是用 Swift 3 制作的 已经在我的中写了 FIRApp configu
  • 如何在 flutter 中制作自定义按钮形状

    I am working on a project and i want to achieve a button 我怎样才能轻松地做出这个形状 您可以使用定制画家 看一下这个很好的例子关于如何使用这个 这是您想要实现的一个小示例 虽然我没有
  • 为 Log4j 配置 Eclipse

    我正在开发一个使用 apache jena 的应用程序 以使用 sparql 访问 dbpedia 嗯 我对 DBPedia 和 apache jena 非常陌生 我做了一些研究并开始使用一些示例代码来创建 VCARD 公共类 DpPedi
  • 如何从 SQLite 获取最近 3 小时的数据

    我正在使用当前系统时间在表中插入数据 例如System currentTimeMillis 因此 在获取数据时 我只需要获取最近 3 小时的数据 以下链接对我没有帮助 因为这个链接使用了我没有的特定日期格式 从sqlite中根据最近几个小时
  • 事件 - 文档已编辑

    编辑文档时是否有事件 如果没有 有谁知道我在哪里可以找到可用 VBA 事件的列表 以下是文档对象的事件 http msdn microsoft com en us library aa140279 office 10 aspx Events
  • 关于 Runtime.getRuntime().totalMemory() 的问题

    以下函数用于计算内存使用情况 private static long getMemoryUse putOutTheGarbage long totalMemory Runtime getRuntime totalMemory putOutT
  • 单一资源的嵌套 form_

    我有一个单一的嵌套资源 如下所示 map resources bookings member gt rate gt post do booking booking resource review end 给我这些路线 new booking
  • 什么是银行冲突? (进行Cuda/OpenCL编程)

    我一直在阅读 CUDA 和 OpenCL 的编程指南 但我无法弄清楚银行冲突是什么 他们只是深入研究如何解决问题 而不详细说明主题本身 有人能帮我理解吗 如果帮助是在 CUDA OpenCL 的背景下 或者只是计算机科学中一般的银行冲突 我
  • 在 RECYCLER VIEW 中添加页脚视图?

    我想在回收器视图的底部添加页脚布局 下面是我的适配器视图 它会膨胀页眉布局以及其他项目 感谢帮助 public class SplitMembersAdapter extends RecyclerViewAdapter
  • MySql 存储过程循环光标 - 语法错误

    语法错误在哪里 DECLARE irid INT DEFAULT 0 DECLARE tmp joinid INT DEFAULT 0 DECLARE loopjoins eof INT DEFAULT FALSE DECLARE CONT
  • Python:线程可以同时读/写同一个 TCP 套接字吗?

    我想要同一个 TCP 套接字有一个读取器线程和一个写入器线程 可以吗 在访问之前我需要锁定吗 平台是Windows 7 CPython 2 7 4 对于 Unix 内核 两个线程一个读取另一个写入文件 套接字 与两个进程执行相同操作相同 由
  • 如何使用 webview url 发送标头值?

    我开发了一个带有 webview 的 android 应用程序 我想用 url 发送标头值 如果可能的话谁帮我提供一下源代码 Map
  • Java 中的泛型,使用通配符

    我有一个关于 Java 泛型的问题 即使用通配符 我有一个像这样的 GenClass 示例类 public class GenClass
  • 使用 Typescript 和 Visual Studio 2015 运行时进行编辑?

    在 Visual Studio 2013 中使用 Typescript 时 我似乎记得我可以在浏览器窗口中运行 TypeScript 源时编辑它 然后刷新浏览器窗口并获取新的更改 现在 在 Visual Studio 2015 中 Visu
  • DBpedia SPARQL 查询返回多个重复记录

    我对 SPARQL 还很陌生 并且对它现有的多种语法标准感到困惑 我正在努力使用以下查询从 DBpedia 获取唯一数据 SELECT DISTINCT Museum name abstract thumbnail latitude lon