簡體   English   中英

SPARQL 查詢中同一列下的返回值

[英]Return values under same column in SPARQL query

給定三個可能的三元組對象, foaf:namefoaf:givenNamefoaf:familyName ,其中語句要么有foaf:name要么foaf:givenName + foaf:familyName ,例如:

<uri1> <foaf:name> "Lolly Loozles" .

<uri2> <foaf:givenName> "Stotly" .
<uri2> <foaf:familyName> "Styles" .

想知道如何編寫一個 SPARQL 查詢來返回一個新變量,比如pretty_name ,它要么是foaf:name的值,要么是來自foaf:givenNamefoaf:familyName的值的串聯。

導致類似:

?o     | ?pretty_name
----------------------
<uri1> | Lolly Loozles
<uri2> | Stotly Styles

到目前為止,這是我所擁有的,但不確定如何進行:

PREFIX : <https://example.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

# select two variables, not ideal...
SELECT ?foaf_fullName ?pretty_name

WHERE {    

    # Find all triples
    ?s ?p ?o .

    # Binds
    OPTIONAL { ?s foaf:name ?foaf_fullName }
    OPTIONAL { ?s foaf:givenName ?givenName }
    OPTIONAL { ?s foaf:familyName ?familyName }

    # Filter where predicate is part of list
    FILTER (?p IN (foaf:name, foaf:givenName, foaf:familyName ) )

    # Binds
    BIND( CONCAT(?givenName, ' ', ?familyName) AS ?pretty_name ) .

}

我曾想象並嘗試添加另一個BIND以添加到?pretty_name ,但 SPARQL 引擎沒有它:

BIND( ?foaf_fullName AS ?pretty_name ) .

我也很幸運地寫了一個CONSTRUCT語句來獲取我正在尋找的值,但沒有能力寫回這個三元組(出於多種原因):

CONSTRUCT { 
    ?s :hasPrettyName ?foaf_fullName .
    ?s :hasPrettyName ?pretty_name .
}

我原以為CONSTRUCT可以伴隨SELECT ,但一定是錯的?

任何見解或建議將不勝感激。

使用@StanislavKralin 評論/建議在沒有IF子句的情況下使用COALESCE效果很好:

PREFIX : <https://example.org/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

# select two variables, not ideal...
SELECT ?foaf_fullName ?pretty_name

WHERE {    

    # Find all triples
    ?s ?p ?o .

    # Binds
    OPTIONAL { ?s foaf:name ?foaf_fullName }
    OPTIONAL { ?s foaf:givenName ?givenName }
    OPTIONAL { ?s foaf:familyName ?familyName }

    # Filter where predicate is part of list
    FILTER (?p IN (foaf:name, foaf:givenName, foaf:familyName ) )

    # Binds
    BIND( COALESCE(?foaf_fullName, CONCAT(?givenName, ' ', ?familyName)) AS ?pretty_name )

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM