【问题标题】:How to get composer of a symphony in dbpedia?如何在 dbpedia 中获取交响曲的作曲家?
【发布时间】:2016-05-23 14:59:50
【问题描述】:

这是我的查询

select *
{
?symphonies_by_composer <http://www.w3.org/2004/02/skos/core#broader>  <http://dbpedia.org/resource/Category:Symphonies_by_composer> .
?symphony <http://purl.org/dc/terms/subject>  ?symphonies_by_composer .
}

我在 Dbpedia 端点 http://dbpedia.org/sparql/ 上运行它

它给了我很多交响乐。我想构造我的三元组,添加我自己的属性,即 mo:composedBy 像这样:

PREFIX mo: <http:blablabla.com/mo#> 

construct 
{
?symphony mo:composedBy ?composer .
?symphony a mo:Symphony
}
{
?symphonies_by_composer <http://www.w3.org/2004/02/skos/core#broader>  <http://dbpedia.org/resource/Category:Symphonies_by_composer> .
?symphony <http://purl.org/dc/terms/subject>  ?symphonies_by_composer .
}

但我不知道如何获取?composer 变量的绑定。

你知道吗?

(我知道可能没有办法得到它,如果你认为没有办法,请告诉我,不幸的是,我会通过这些数据)

【问题讨论】:

  • CONSTRUCT 查询的第二部分基本上是您编写 SELECT 查询时要做的事情。而且您只能查询 DBpedia 中的数据。例如属性http://dbpedia.org/property/composerhttp://dbpedia.org/ontology/composer,但正如您所知,并非所有音乐都包含有关它的信息。

标签: sparql rdf owl ontology dbpedia


【解决方案1】:

在 DBPedia 中似乎没有明确的关系将这些交响曲与代表作曲家的实际资源联系起来。

一种可能的解决方法是从类别的prefLabel 中提取作曲家的名字,方法是剪掉第一位(“Syphonies by”):

PREFIX mo: <http://example.com/mo#> 
PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
CONSTRUCT
{
      ?symphony mo:composedBy ?composer_name .
      ?symphony a mo:Symphony
}
   WHERE
{
    ?symphonies_by_composer skos:broader  <http://dbpedia.org/resource/Category:Symphonies_by_composer> ;
                            skos:prefLabel ?label .
    ?symphony dct:subject  ?symphonies_by_composer .
    BIND(SUBSTR(STR(?label), (STRLEN("Symphonies by ") + 1)) AS ?composer_name)
} 

这会将每个作曲家的名称作为文字值返回给您。

第二个可能的步骤是尝试从名称中重建识别作曲家的资源的实际 IRI。例如,在“Hans Werner Henze”的情况下,识别此人的实际资源是http://dbpedia.org/resource/Hans_Werner_Henze,因此一两个简单的进一步字符串操作(替换空格并与 dbpedia 基本 IRI 连接)将解决此问题。但是,这很脆弱,因为无法保证资源存在,即使存在,也无法保证它是否实际上标识了作曲家(例如,可能有不止一个 Hans Werner Henze)。

当然,您可以通过执行后续查询来进一步扩展此功能,以验证资源是否存在并且是正确的,但这需要一些额外的试验和错误。如果目标只是作曲家的名字,那么第一个示例查询在大多数情况下应该可以正常工作。

【讨论】:

  • 这确实是我最终做的,第一种方法。虽然我不喜欢 lirel 值,所以我将其更改为 IRI
猜你喜欢
  • 1970-01-01
  • 2013-05-26
  • 2018-04-22
  • 1970-01-01
  • 2021-08-07
  • 2014-01-29
  • 2013-04-20
  • 2015-10-17
  • 2016-09-21
相关资源
最近更新 更多