使用SPARQL和SPIN对数据进行RDF

使用SPARQL和SPIN对数据进行RDF,sparql,rdf,graphdb,spin-rdf,Sparql,Rdf,Graphdb,Spin Rdf,我想对数据进行RDF,我需要使用SPARQL查询(我使用的是SPIN)构造一个具有两个属性(Title和Author)的对象(Book)。所有的书都有“书名”,但有时没有“作者” 当这种情况发生时,它不会创建这本“书”,我想用“标题”创建它 我使用的是GraphDB,以下是查询: prefix spif: <http://spinrdf.org/spif#> prefix pres: <http://example.com/pruebardf/> CONSTRUCT {

我想对数据进行RDF,我需要使用SPARQL查询(我使用的是SPIN)构造一个具有两个属性(Title和Author)的对象(Book)。所有的书都有“书名”,但有时没有“作者”

当这种情况发生时,它不会创建这本“书”,我想用“标题”创建它

我使用的是GraphDB,以下是查询:

prefix spif: <http://spinrdf.org/spif#>
prefix pres: <http://example.com/pruebardf/>

CONSTRUCT {
    ?rdfIRI a           pres:Book ;
            pres:Author ?author   .
}
WHERE {
     SERVICE <http://localhost:7200/rdf-bridge/1683716393221> {
         ?bookRow a                <urn:Row> ;
                  <urn:col:Author> ?author   ;
                  <urn:col:Title>  ?title    .
     }
     BIND(IRI(CONCAT("http://example.com/", spif:encodeURL(?title))) AS ?rdfIRI)
}
前缀spif:
前缀pres:
构造{
?rdfIRI一本书;
主持人:作者?作者。
}
在哪里{
服务{
?a排图书;
作者
标题
}
绑定(IRI(CONCAT)(“http://example.com/,spif:encodeURL(?title)))为?rdfIRI)
}

有解决办法吗?我可以使用其他SPARQL语法。

服务
部分中使用
可选
,使模式在缺少
时不会失败

然后,
构造
将不再放入
?rdfIRI pres:Author?Author
三元组,而是包括
?rdfIRI a press:Book


如果要在数据中缺少?author时设置它,请查看使用
COALESCE

将标题用作URL不是一个好主意,因为标题不够稳定。最好使用一些自然键(如ISBN)