1

次の SPARQL クエリがあります。選択述語の行数と、クエリの最後の group by 句に注意してください。

クエリがすべてのレコードで正しい行数を返すようにしたいのですが、返される行数が正しくないことに気付きました。単一のレコードがある場合、1 または 2 を取得し、2 つ以上のレコードがある場合、私はそれでも2を取得します。基本的にはランダムな値を返すようです。

クエリに何らかの問題があるため、誰かが私が間違っている可能性があることを教えてもらえますか? 私はApache Jenaを使用しています。

PREFIX  rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX  pf:   <http://jena.hpl.hp.com/ARQ/property#>
PREFIX  d:    <http://data-vocabulary.org/>
PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
PREFIX  s:    <http://schema.org/>
PREFIX  xsd:  <http://www.w3.org/2001/XMLSchema#>
PREFIX  gr:   <http://purl.org/goodrelations/v1#>

SELECT DISTINCT  (count(*) AS ?rowCount) ?productName ?offerImage ?offerName ?productCategory ?salePrice ?suggestedRetailPrice ?productImage ?productThumbNail ?productUrl (GROUP_CONCAT(DISTINCT ?productdescription) AS ?productdescriptions) ?productBrand ?productId ?productSku ?productModel ?productMPN ?productManufacturer ?productGtin13 ?productGtin14 ?productGtin8 ?productAvailable ?productUnAvailable ?productUsedCondition ?productNewCondition ?productColor ?productAggregateRatingValue ?productReviewCount
WHERE
  {         

        ?p2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> d:Product .
        ?p2 <http://data-vocabulary.org/Product/offerDetails> ?schOffer .
        ?schOffer <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> d:Offer .
        ?schOffer <http://data-vocabulary.org/Offer/price> ?salePrice
        OPTIONAL
          { ?schOffer <http://data-vocabulary.org/Offer/name> ?offerName }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/name> ?productName }
        OPTIONAL
          { ?schOffer <http://data-vocabulary.org/Offer/image> ?offerImage }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/url> ?productUrl }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/image> ?productImage }
        OPTIONAL
          { ?schOffer <http://data-vocabulary.org/Offer/category> ?productCategory }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/description> ?productdescription }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/brand> ?pBrandNode
            OPTIONAL
              { ?pBrandNode <http://data-vocabulary.org/Brand/name> ?brandNodeName }
            OPTIONAL
              { ?pBrandNode <http://data-vocabulary.org/Organization/name> ?brandNodeName }
            BIND(str(coalesce(?brandNodeName, ?pBrandNode)) AS ?productBrand)
          }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/manufacturer> ?pManufacturerNode
            OPTIONAL
              { ?pManufacturerNode <http://data-vocabulary.org/manufacturer/name> ?manufacturerNodeName }
            BIND(str(coalesce(?manufacturerNodeName, ?pManufacturerNode)) AS ?productManufacturer)
          }
        OPTIONAL
          { ?p2 <http://schema.org/Product/aggregateRating> ?pAggregateRating
            OPTIONAL
              { ?pAggregateRating <http://schema.org/AggregateRating/ratingValue> ?productAggregateRatingValue }
            OPTIONAL
              { ?pAggregateRating <http://schema.org/AggregateRating/reviewCount> ?productReviewCount }
          }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/productID> ?productId }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/sku> ?productSku }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/itemCondition> ?productNewCondition .
            ?productNewCondition <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> s:NewCondition
          }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/itemCondition> ?productUsedCondition .
            ?productUsedCondition <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> s:UsedCondition
          }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/gtin13> ?productGtin13 }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/gtin14> ?productGtin14 }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/gtin8> ?productGtin8 }
        OPTIONAL
          { ?schOffer <http://data-vocabulary.org/Offer/availability> ?productAvailable
            FILTER ( ?productAvailable = s:InStock )
          }
        OPTIONAL
          { ?schOffer <http://data-vocabulary.org/Offer/availability> ?productUnAvailable
            FILTER ( ?productUnAvailable = s:OutOfStock )
          }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/model> ?productModel }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/mpn> ?productMPN }
        OPTIONAL
          { ?p2 <http://data-vocabulary.org/Product/color> ?productColor }

  }
GROUP BY ?productName ?offerImage ?offerName ?productCategory ?salePrice ?suggestedRetailPrice ?productImage ?productThumbNail ?productUrl ?productBrand ?productId ?productSku ?productModel ?productMPN ?productManufacturer ?productGtin13 ?productGtin14 ?productGtin8 ?productAvailable ?productUnAvailable ?productUsedCondition ?productNewCondition ?productColor ?productAggregateRatingValue ?productReviewCount
4

1 に答える 1

1

グループ内に複数のアイテムがあるというパターンです。カウントとグループ化なしで実行してみて、2 になる結果を見てください。

于 2015-03-13T10:26:10.707 に答える