def decomposeJoinBlock(jb, l, genPred, prefixes, decomposition, c): # jb == joinblock # l == list de endpoints tl = [] sl = [] fl = [] #print "len jb.triples" + str(len(jb.triples)) for bgp in jb.triples: if isinstance(bgp, Triple): tl.append(bgp) elif isinstance(bgp, Filter): fl.append(bgp) elif isinstance(bgp, Optional): sl.append( Optional( decomposeUnionBlock(bgp.bgg, l, genPred, prefixes, decomposition, c))) elif isinstance(bgp, UnionBlock): pub = decomposeUnionBlock(bgp, l, genPred, prefixes, decomposition, c) if pub: sl.append(pub) elif isinstance(bgp, JoinBlock): pub = decomposeJoinBlock(bgp, l, genPred, prefixes, decomposition, c) if pub: sl.append(pub) #print 'fl' #print fl if tl: gs = getGroups(l, tl, genPred, prefixes, decomposition, c) #print 'gs' #print gs if gs: gs.extend(sl) sl = gs else: return None fl1 = includeFilter(sl, fl) fl = list(set(fl) - set(fl1)) #print "sl" + str(sl) + str(len(sl)) #print "fl" + str(fl) if sl: if (len(sl) == 1 and isinstance(sl[0], UnionBlock) and fl != []): sl[0] = updateFilters(sl[0], fl) j = JoinBlock(sl, filters=fl) #print "filters" + str(j.filters) return j else: return None
def makePlanJoinBlock(jb, plan): sl = [] ol = [] for bgp in jb.triples: if type(bgp) == list: sl.extend(bgp) elif isinstance(bgp, Optional): ol.append(Optional(makePlanUnionBlock(bgp.bgg, plan))) elif isinstance(bgp, UnionBlock): sl.append(makePlanUnionBlock(bgp, plan)) elif isinstance(bgp, Service): sl.append(bgp) pl = makePlanAux(sl, plan) if ol: pl = [pl] pl.extend(ol) return JoinBlock(pl)
def decomposeJoinBlock(jb, l, genPred, prefixes, decomposition, c): # jb == joinblock # l == list de endpoints tl = [] sl = [] fl = [] for bgp in jb.triples: # print bgp if isinstance(bgp, Triple): tl.append(bgp) elif isinstance(bgp, Filter): fl.append(bgp) elif isinstance(bgp, Optional): sl.append( Optional( decomposeUnionBlock(bgp.bgg, l, genPred, prefixes, decomposition, c))) elif isinstance(bgp, UnionBlock): pub = decomposeUnionBlock(bgp, l, genPred, prefixes, decomposition, c) if pub: sl.append(pub) # print 'tl' # print tl if tl: gs = getGroups(l, tl, genPred, prefixes, decomposition, c) # print 'gs' # print gs if gs: gs.extend(sl) sl = gs else: return None includeFilter(sl, fl) # print 'sl' # print sl if sl: return JoinBlock(sl) else: return None
def p_bgp_4(p): """ bgp : OPTIONAL LKEY group_graph_pattern RKEY """ p[0] = Optional(p[3])
def p_bgp_service_4(p): """ bgp_service : OPTIONAL LKEY group_graph_pattern_service RKEY """ p[0] = Optional(p[3])