程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名?

开发过程中遇到当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名的问题如何解决?下面主要结合日常开发的经验,给出你关于当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名的解决方法建议,希望对你解决当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名有所启发或帮助;

我试图通过我的 sparql 查询获取给定电影片名的演员姓名(我也有上映日期),但虑到多部电影具有相同名称的情况,我试图将它们与发布日期。有些电影没有指定上映日期,有些电影没有指定标签。

我试图在指定发布日期并且匹配时,或者当它在电影标签中并且也匹配时获得结果。 如果我无法将日期与这些属性之一匹配,我不希望返回任何结果

这是我当前的查询:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  xsd:  <http://www.w3.org/2001/XMLscheR_528_11845@a#>
PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-scheR_528_11845@a#>
PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
    
SELECT disTinCT ?film  ?aname
WHERE {
    ?film  a             dbo:Film ;
           foaf:name     "A Nightmare on Elm Street"@en ;
           dbo:@R_821_4893@  ?a .
    ?a     foaf:name     ?aname
    OPTIONAL
      { ?film  dbo:releaseDate  ?rd
        BIND(year(xsd:date(?rd)) AS ?rrd)
        FILTER ( ( ?rd = "1984-04-30"^^xsd:date ) || ( ?rrd = 1984) )
      }
    OPTIONAL
      { ?film  rdfs:label  ?lab
        FILTER regex(?lab,"1984","i")
        FILTER ( lang(?lab) = "en" )
      }
  }

解决方法

我认为您在这里误用了 OPTIONAL。相反,您应该查看 UNION。 有什么区别?

SELECT ?person ?child
WHERE {
?person a :Person .
OPTIONAL {?person :hasSon ?chilD}
OPTIONAL {?person :hasDaughter ?chilD}
}

将返回每个人,并可选择返回他们的儿子/女儿。然而,这也会返回根本没有孩子的人。

取而代之的是

SELECT ?person ?child
WHERE {
?person a :Person .
{?person :hasSon ?chilD}
UNION
{?person :hasDaughter ?chilD}
    }

只会返回拥有至少一个儿子或女儿的人。

现在,在您的示例中,我有一个这样的查询:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
PREFIX  dbp:  <http://dbpedia.org/property/>
PREFIX  xsd:  <http://www.w3.org/2001/XMLscheR_528_11845@a#>
PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-scheR_528_11845@a#>
PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
    
SELECT DISTinCT ?film  ?aname
WHERE {
    ?film  a             dbo:Film ;
           foaf:name     "A Nightmare on Elm Street"@en ;
           dbo:@R_821_4893@  ?a .
    ?a     foaf:name     ?aname
   
      { ?film  dbp:released  1984}
    UNION
      { ?film  rdfs:label  ?lab
        FILTER regex(?lab,"1984","i")
        FILTER ( lang(?lab) = "en" )
      }
  }

请注意,我使用了似乎有效的 dbp:released 属性。

似乎用于发行的属性在电影之间不一致,即有些使用 dbp:released,其他使用 dbo:releaseDate

如果这是一个问题,您当然可以在查询中添加另一个 UNION 语句来处理不同的情况。

还有一点: 有许多三元组具有推理功能,推理可以帮助处理各种此类情况(消歧、同一事物的多个属性等)

大佬总结

以上是大佬教程为你收集整理的当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名全部内容,希望文章能够帮你解决当多部电影在 DBpedia 中具有相同的名称时,无法获取给定电影名称的演员姓名所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。