SPARQL查询将记录与one-many相关联

时间:2015-08-31 05:28:23

标签: sparql jena

我有这种模型(架构)

 addEvent: {
        type: EventType,
        args: {

        _id: {
          type: GraphQLString,
          description: 'The id of the event.',
        },
        title: {
          type: GraphQLString,
          description: 'The title of the event.',
        },
        description: {
          type: GraphQLString,
          description: 'The description of the event.',
        },
        media:{
          type:new GraphQLList(mediaType),
          description:'List of media',   
        },
        location:{
          type:new GraphQLList(locationType),
          description:'List of media',   
        },
        created: {
          type: GraphQLInt,
          description: 'The created of the user.',       
        } 
         },
      resolve: (obj, {title,description,media,location,created,_id}) => {

        let toCreateEvent = {
          title,
          description,
          created:new Date(),
          start: new Date(),
          media,
          location,
          _id,
        };

         return mongo()
            .then(db => {
              return  new Promise(
                function(resolve,reject){
              let collection = db.collection('events');
                  collection.insert(toCreateEvent, (err, result) => {
                    db.close();

                    if (err) {
                      reject(err);
                      return;
                    }
                    resolve(result);
                  });
            })
          });
       }
     }

喜欢

1 product hasOffer (many) Offers 
1 offer hseRule (many) shipment rules

我该如何查询 一个产品包含所有优惠和所有运输规则。 简单来说。  如何查询一对多相关记录?

1 个答案:

答案 0 :(得分:0)

这可以使用WHERE子句中具有多个三元组的简单SPARQL查询来实现。这是有效的,因为SPARQL查询自然将数据连接在一起的图模型。
例如

$('#CommentFrequencyOk').checked(function () {
    $('#test').setAttribute('disabled');
});

来源:使用此查询在Protege中运行相同的示例。

编辑:

问题:有没有办法构建产品{offer:{rules:{}},productAttributes}?

答案:是的,您可以将SELECT ?product ?offer ?rules WHERE { {?product ns:hasOffer ?offer} {?offer ns:hasRules ?rules} } 添加到?attribute子句SELECT子句?product ns:productAttribute ?attribute(或多个此类子句,如果有的话)你有多个数据属性的属性。)但是我强烈建议你不要这样做。该查询将返回类似于SQL结果集的潜在大量数据集。因此,您将看到具有相同产品且具有产品属性的多行将使您的生活变得不必要地困难,因为该属性将出现在具有该产品的所有行中。而是运行单独的查询,您只获取产品及其属性。