Rdf 在SPARQL中查询同一属性下的数据

Rdf 在SPARQL中查询同一属性下的数据,rdf,sparql,Rdf,Sparql,我有这样的RDF数据:(更新,完整文件) 我得到这个RDF的来源是: 当您点击档案图片下方的“回形针”按钮时,您可以下载此文件。 SPARQL端点是: 演讲者 维梧微型赠款:将UMLS本体集成到维梧中,以链接生物医学科学家 1. 临床助理教授 语义网 医学信息学 年精度 医学信息学 用于药物研究和开发的链接开放药物数据。 数据分析 UMLS 2011-01-01T00:00:00 语义Web体系结构组 医疗补助 RDF 2. 高级程序员/数据分析师 2011-01-01T00:00:00 保健

我有这样的RDF数据:(更新,完整文件)

我得到这个RDF的来源是: 当您点击档案图片下方的“回形针”按钮时,您可以下载此文件。 SPARQL端点是:


演讲者
维梧微型赠款:将UMLS本体集成到维梧中,以链接生物医学科学家
1.
临床助理教授
语义网
医学信息学
年精度
医学信息学
用于药物研究和开发的链接开放药物数据。
数据分析
UMLS
2011-01-01T00:00:00
语义Web体系结构组
医疗补助
RDF
2.
高级程序员/数据分析师
2011-01-01T00:00:00
保健质量
哈贾戈斯
631-444-8873
贾贾戈斯
G
风险。limits@gmail.com
哈贾戈斯,亚诺斯
雅诺斯
631-444-1596
高级程序员/分析人员br/
亚诺斯。hajagos@stonybrook.edu
博士。
BS/HS计划
我想找到一个姓
“Hajagos”
的人的出版物。从数据中,我们可以看到它位于
“用于药物研发的链接开放药物数据”下。但是在相同的
下也有许多值。我怎么能问这个问题。我尝试了以下SPARQL,但没有得到任何有用的结果:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX vivo: <http://vivoweb.org/ontology/core#>

SELECT ?publication
WHERE {
  ?person foaf:lastName "Hajagos" .
  ?person rdfs:label ?publication
}
前缀rdfs:
前缀foaf:
前缀vivo:
选择?出版物
在哪里{
?foaf人员:姓氏“Hajagos”。
?人员rdfs:标签?出版物
}

通过此查询,我只能获得
en US
,这也是属性

的一个值。如果您将数据转换为更易于阅读的格式,如Turtle,则更容易查看数据中的连接。特别是,在转换后,我们得到了有关作者的以下描述:

<http://reach.suny.edu/individual/Hajagos_Janos>
        a                         reach:SUNY_REACH_Investigator , foaf:Person , foaf:Agent , owl:Thing ;
        rdfs:label                "Hajagos, Janos"@en-US ;
        bibo:suffixName           "Ph.D." ;
        j.0:networkId             "jhajagos" ;
        vitro-public:mainImage    <http://reach.suny.edu/individual/n1206> ;
        vivo:authorInAuthorship   <http://reach.suny.edu/individual/gHajagos_Janos_21575203> ;
        vivo:educationalTraining  <http://reach.suny.edu/individual/n20726> ;
        vivo:email                "risk.limits@gmail.com" ;
        vivo:faxNumber            "631-444-8873" ;
        vivo:hasMemberRole        <http://reach.suny.edu/individual/n2444> ;
        vivo:hasPresenterRole     <http://reach.suny.edu/individual/n6042> ;
        vivo:hasResearchArea      <http://link.informatics.stonybrook.edu/umls/CUI/C0010992> , <http://link.informatics.stonybrook.edu/umls/CUI/C1882937> , <http://link.informatics.stonybrook.edu/umls/CUI/C0025071> , <http://link.informatics.stonybrook.edu/umls/CUI/C0085567> , <http://link.informatics.stonybrook.edu/umls/CUI/C0034379> , <http://reach.suny.edu/individual/n5408> , <http://link.informatics.stonybrook.edu/umls/CUI/C0025088> ;
        vivo:middleName           "G" ;
        vivo:personInPosition     <http://reach.suny.edu/individual/n4507> , <http://reach.suny.edu/individual/n6907> ;
        vivo:phoneNumber          "631-444-1596" ;
        vivo:preferredTitle       "Senior Programmer/Analyst<br />" ;
        vivo:primaryEmail         "janos.hajagos@stonybrook.edu" ;
        foaf:firstName            "Janos"^^<http://www.w3.org/2001/XMLSchema#string> ;
        foaf:lastName             "Hajagos"^^<http://www.w3.org/2001/XMLSchema#string> .
要获得更一般的结果(并稍微清理查询),可以使用:

prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix vivo: <http://vivoweb.org/ontology/core#>

select ?lastName ?label where {
  ?authorship vivo:linkedAuthor [ foaf:lastName ?lastName ] ;
              vivo:linkedInformationResource [ rdfs:label ?label ] .
}
返回

s                                          p
http://reach.suny.edu/individual/Hajagos_J http://xmlns.com/foaf/0.1/lastName
s                                              p
http://reach.suny.edu/individual/Hajagos_Janos http://xmlns.com/foaf/0.1/lastName
但是这个问题

select ?s ?p { ?s ?p "Hajagos"^^xsd:string } 
返回

s                                          p
http://reach.suny.edu/individual/Hajagos_J http://xmlns.com/foaf/0.1/lastName
s                                              p
http://reach.suny.edu/individual/Hajagos_Janos http://xmlns.com/foaf/0.1/lastName
请注意,个人是不同的!这不是一个伟大的事态发展。我们可以查询两者,但是

select ?s ?p { 
  { ?s ?p "Hajagos" } UNION { ?s ?p "Hajagos"^^xsd:string }
}
发现

s                                              p
http://reach.suny.edu/individual/Hajagos_J     http://xmlns.com/foaf/0.1/lastName
http://reach.suny.edu/individual/Hajagos_Janos http://xmlns.com/foaf/0.1/lastName

该数据不是完整的RDF/XML;你能提供一个完整的RDF文件,我们可以工作吗?嗨,泰勒,谢谢你耐心的回复。我刚刚更新了完整的rdf文件,并添加了SPARQL端点的链接。下课后我会试试你的解决方案,看看是否有效。。谢谢..实际上只提供了RDF/xml数据。我需要手动将其转换为turtle/ntriples吗?您不需要转换它;它们都是RDF的有效序列化。其中一个更易于人类阅读,当数据以人类可读的形式存在时,编写查询更容易,因为更容易看到其中的内容。但数据来自哪里?我认为(从前面的问题来看)您正在查询一个Virtuoso端点,我希望它能够以多种格式提供结果。不过,这没什么大不了的。谢谢Joshua,但我尝试在端点中运行您的倒数第二个查询(即Hajagos查询),但什么也没有得到。端点是否有问题,或者“Hajagos”没有在foaf注册?@YuchunCui我在端点上运行时包含了第二次查询结果的链接。我得到了很多结果,但哈贾戈斯的结果并不在其中。我已经包含了一些关于为什么会这样的想法,但我还不确定解决方案是什么……我也在考虑你的问题Joshua,是不是因为“Janos Hajagos”,这个人没有在foaf上注册,所以我们不能通过过滤他的姓来获得他?@YuchunCui我不知道你所说的“在foaf上注册”是什么意思。没有foaf数据的中央或权威存储库。Foaf只是一个人们可以使用(或不使用)的词汇表。这里的问题似乎是值
“Hajagos”
(没有数据类型)和
“Hajagos”^^xsd:string
不同,并且端点不包含可下载配置文件所包含的所有信息(至少在我们执行这些查询时是如此)。我不知道你会不会解决这个问题,除了,也许你会自己抓取一些页面并收集数据。我会试试的。。谢谢你这么多的帮助!
select ?s ?p { ?s ?p "Hajagos"^^xsd:string } 
s                                              p
http://reach.suny.edu/individual/Hajagos_Janos http://xmlns.com/foaf/0.1/lastName
select ?s ?p { 
  { ?s ?p "Hajagos" } UNION { ?s ?p "Hajagos"^^xsd:string }
}
s                                              p
http://reach.suny.edu/individual/Hajagos_J     http://xmlns.com/foaf/0.1/lastName
http://reach.suny.edu/individual/Hajagos_Janos http://xmlns.com/foaf/0.1/lastName