【问题标题】:sparql query: get several values from a Listsparql 查询:从列表中获取多个值
【发布时间】:2016-12-12 09:36:11
【问题描述】:

我的查询返回的结果取决于图像列表中两个 sparql OPTIONS 子句中的哪一个先出现。虽然此时使用 Jena ARQ 不是一个选项,我想用纯 SPARQL 查询来解决这个问题,但我仍然想知道如何使用 Jena 来解决它。 我的数据演示附在下面,数据可能包含图像列表。我的图像表示也在下面。我也附上了我的查询。 如果存在图像列表,sprql 查询有两个变量 urlX 和 urlY 在 2 OPTIONS 块中声明。根据哪个 OPTIONS 先出现,我得到那个变量的值,而另一个变量没有得到。似乎问题与使用 OPTIONS 子句有关。我不确定我还能尝试什么,我远不是 sparql 查询方面的专家。我希望查询执行以下操作:如果存在图像集合,我想查看两个图像大小 (dc:conformsTo) 是否存在并获取 urlX 和 urlY 值,或者获取存在的值。非常感谢您的宝贵时间。

我的数据表示:

@prefix dc: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix lews: <http://lews.com/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

lews:26331340 lews:name "the Human Good Luck Charm is Back"^^xsd:token ;
        dc:created "2014-10-20T17:14:55.357-07:00"^^xsd:dateTime ;
        dc:identifier "26331340"^^xsd:int ;
        dc:modified "2016-08-04T13:43:00.897-07:00"^^xsd:dateTime ;
        dc:title "the Human Good Luck Charm is Back" ;
        dc:hasPart <http://lews.com/content/26331340#Images> ;
        dc:abstract "As the World Series gets underway..." ;
        dc:description "The super fan who rooted for the Royals is back to boost morale." ;
        dc:subject "hoping for a World Series victory".

<http://lews.com/content/26331340#Images> dc:identifier "Images"^^xsd:token ;
        rdf:first lews:26331375 ;
        rdf:rest _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331376 ;
        rdf:li <http://lews.com/content/26331340#Images> , _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331376 , _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331377 , _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331378 , _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331379 , _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331380 ;
        a rdf:List .

_:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331376 rdf:first lews:26331376 ;
        rdf:rest _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331377 .

_:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331377 rdf:first lews:26331377 ;
        rdf:rest _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331378 .

_:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331378 rdf:first lews:26331378 ;
        rdf:rest _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331379 .

_:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331379 rdf:first lews:26331379 ;
        rdf:rest _:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331380 .

_:genid-15e530b0195547d9ac3f8e5e6785a747-x26331340Images26331380 rdf:first lews:26331380 ;
        rdf:rest rdf:nil .

我的图像表示:

@prefix dc: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix lews: <http://abcnews.com/content/> .
@prefix mrss: <http://search.yahoo.com/mrss/> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

lews:26331376 lews:name "141020_wn_donvan0_704x396.jpg"^^xsd:token ;
        lews:section "wnt"^^xsd:token ;
        lews:type "Image"^^xsd:token ;
        dc:conformsTo "704x396"^^xsd:token ;
        dc:created "2014-10-20T17:15:09.637-07:00"^^xsd:dateTime ;
        dc:hasFormat <http://lews.go.com/images/WNT/141020_wn_donvan0_704x396.jpg> ;
        dc:identifier "26331376"^^xsd:int ;
        dc:isPartOf <http://lews.go.com/WNT> ;
        dc:modified "2014-10-20T17:15:09.947-07:00"^^xsd:dateTime ;
        dc:type "StillImage"^^xsd:token ;
        mrss:height "396"^^xsd:int ;
        mrss:width "704"^^xsd:int ;
        xsd:date "2014-10-20"^^xsd:date ;
        xsd:gMonthDay "--10-20"^^xsd:gMonthDay ;
        xsd:gYear "2014"^^xsd:gYear ;
        xsd:gYearMonth "2014-10"^^xsd:gYearMonth .

我的查询:

PREFIX dc:     <http://purl.org/dc/terms/>
PREFIX mrss:   <http://search.yahoo.com/mrss/>
PREFIX search: <http://www.openrdf.org/contrib/lucenesail#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX lews: <http://abcnews.com/content/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?id ?title ?description ?urlX ?urlY ?section ?imgName
    ?subject dc:identifier ?id.

    OPTIONAL {?subject dc:title ?title.}
    OPTIONAL {?subject dc:description ?description.}
    OPTIONAL {?subject dc:isPartOf ?section.}

    OPTIONAL {  
                ?subject dc:hasPart ?imageCol.
                ?imageCol dc:identifier "Images"^^xsd:token. 

                OPTIONAL{
                    ?imageCol rdf:li ?bnode.
                    ?bnode rdf:first ?image.
                    ?image lews:name ?imgName;                               
                           dc:conformsTo "4x3";
                           dc:hasFormat ?urlX.                                   
                }        
                OPTIONAL{
                    ?imageCol rdf:li ?bnode.
                    ?bnode rdf:first ?image.
                    ?image lews:name ?imgName;                               
                           dc:conformsTo "16x9";
                           dc:hasFormat ?urlY.                                   
                }        

    }

}
LIMIT ${limit}

【问题讨论】:

  • 您可以使用聚合并按数据项分组,然后使用SAMPLE 选择图像样本。但首先,我认为您必须使用有趣的 SPARQL 1.1 属性路径来解析子选择中的列表,如解释,例如这里:stackoverflow.com/questions/17523804/…
  • 我查看了聚合,我不知道它如何处理我的数据。

标签: sparql


【解决方案1】:

如果我正确理解了你想要什么,你只需要对选项进行不同的分组:

PREFIX dc:     <http://purl.org/dc/terms/>
PREFIX mrss:   <http://search.yahoo.com/mrss/>
PREFIX search: <http://www.openrdf.org/contrib/lucenesail#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX lews: <http://abcnews.com/content/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?id ?title ?description ?urlX ?urlY ?section ?imgName {
    ?subject dc:identifier ?id.

    OPTIONAL { ?subject dc:title ?title. }
    OPTIONAL { ?subject dc:description ?description. }
    OPTIONAL { ?subject dc:isPartOf ?section. }

    OPTIONAL {
        ?subject dc:hasPart ?imageCol.
        ?imageCol dc:identifier "Images"^^xsd:token.

        OPTIONAL {
            ?imageCol rdf:li ?bnode.
            ?bnode rdf:first ?image.
            ?image lews:name ?imgName;
            # Here we optionally bind ?urlX and/or ?urlY
            OPTIONAL {
                ?image dc:conformsTo "4x3";
                    dc:hasFormat ?urlX.
            }
            OPTIONAL {
                ?image dc:conformsTo "16x9";
                    dc:hasFormat ?urlY.
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多