有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用SPARQL从三元组中提取rdf:about或rdf:ID属性?

起初这似乎是一件小事,但到目前为止,我还没有使用SPARQL获得给定资源的唯一标识符。我的意思是,给定,例如,rdf:Description rdf:about="http://...",然后一些属性标识这个资源,我想做的是首先找到这个资源,然后检索所有给定URI的三元组

我曾尝试过天真的方法,在WHERE子句中写陈述,例如:

?x rdf:about ?y and ?x rdfs:about ?y

我希望我是准确的


共 (1) 个答案

  1. # 1 楼答案

    您犯了一个典型的错误:将RDF(SPARQL查询的内容)与其序列化(即RDF/XML)混淆rdf:about(和rdf:IDrdf:Descriptionrdf:resource)是RDF/XML的一部分,RDF是一种书写RDF的方式。您可以使用RDF Validator来查看RDF/XML片段会产生什么样的RDF三元组

    在您的情况下,让我们从以下内容开始:

    <?xml version="1.0"?>
    <rdf:RDF 
       xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
       xmlns:dc="http://purl.org/dc/terms/">
      <rdf:Description rdf:about="http://www.example.org/">
        <dc:title>Example for Donal Fellows</dc:title> 
      </rdf:Description>
    </rdf:RDF>
    

    把它插入the validator你会得到:

    Number      Subject                      Predicate                        Object
    1           http://www.example.org/      http://purl.org/dc/terms/title   "Example for Donal Fellows"
    

    (你也可以要求提供图片)

    请注意,rdf:about不存在:它的值提供了三元组的主题

    如何查询与http://www.example.org关联的属性?像这样:

    select * {
        <http://www.example.org/> ?predicate ?object
    }
    

    你会得到:

    ?predicate                        ?object
    <http://purl.org/dc/terms/title>  "Example for Donal Fellows"
    

    您会注意到,在我们想要查找值的地方,查询是与变量(?v)的三重匹配。我们还可以通过以下问题来询问什么谓词将http://www.example.org/"Example for..."联系起来:

    select * {
        <http://www.example.org/> ?predicate "Example for Donal Fellows"
    }
    

    这种模式匹配是SPARQL的核心

    RDF/XML是一个棘手的问题,您可能会发现使用N-Triples更容易,它非常详细但清晰,或者turtle,它类似于N-Triples,有大量的速记和缩写。海龟通常是rdf社区的首选

    p.S.rdfs:about在任何地方都不存在