SPARQL 尝试查询产品可用性

SPARQL trying to query product availability

我正在尝试使用以下 SPARQL 查询产品的可用性,但我总是得到 null?productAvailable,尽管可用性在我所在的页面中列为 InStock试图从中提取数据,我正在使用 Apache Jena API。

我正在从下一页中提取三元组。我做错了什么?

http://www.crutchfield.com/p_500SWA10S4/Alpine-SWA-10S4.html

SELECT DISTINCT  ?productAvailable ?productUnAvailable WHERE
        {
        ?p2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> s:Product .
        ?p2 <http://schema.org/Product/offers> ?schOffer .

        OPTIONAL
          { ?schOffer s:availability ?productAvailable .
            ?productAvailable <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> s:InStock
          }
        OPTIONAL
          { ?schOffer s:availability ?productUnAvailable .
            ?productUnAvailable <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> s:OutOfStock
          }
}

如果我使用 Microdata to RDF Distiller 从该页面提取数据,相关位如下所示:

<> a schema:Product;
    schema:name "Alpine SWA-10S4"@en;
    schema:description "BassLine Series 10\" 4-ohm subwoofer"@en;
    schema:offers [ a schema:Offer;
            schema:availability schema:InStock; ] .

如果你看三元组

_:offerBNode schema:availability schema:InStock .

schema:InStock 用作对象而不是它的实例。因此,您不需要以下内容,

{ 
 ?schOffer s:availability ?productAvailable .
 ?productAvailable <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> s:InStock
}

您只需要以下模式

?schOffer s:availability s:InStock .

例如,您可以使用这样的查询

PREFIX s: <http://schema.org/>

SELECT DISTINCT  ?productName ?availabity  WHERE
{
  ?p a s:Product;
     s:name ?productName;
     s:offers ?offer .
  ?offer s:availability ?availabity .   
}

This tool 可能对您检查查询也很有用。您可以使用经过提炼的页面并运行使用它测试 SPARQL 查询。