80 likes | 263 Views
Initial ideas on Distributed Reasoning. Expressivity. The subset of RDF/OWL and that has rule-based inference – OWL –RL In general, datalog Example: rdfs:domain , range, subClassof , subPropertyof Inverseof , transitive property, symmetic property, …. RDF/OWL -> Datalog. Subproperty
E N D
Expressivity • The subset of RDF/OWL and that has rule-based inference – OWL –RL • In general, datalog • Example: • rdfs:domain, range, subClassof, subPropertyof • Inverseof, transitive property, symmetic property, • …
RDF/OWL -> Datalog • Subproperty • Subclass • Class instance • Property instance • Redirection • P(x,y) :- Q(x,y) . • C(x) :- D(x) . • C(a) . • P(a,b) . • a=b.
RDF/OWL -> Datalog • Domain • Range • Transitive P • Symmetric P • Functional P • InverseFunctional P • Inverse of • C(x) :- P(x,y) • C(y) :- P(x,y) • P(x,y) :- P(x,z), P(z,y) • P(x,y) :- P(y,x) • SameAs(x,y) :- P(z,x),P(z,y) • SameAs(x,y) :- P(x,z),P(y,z) • Q(x,y) :- P(y,x)
RDF/OWL -> Datalog • Conjunction • Disjunction • Property Chain • Negation • Has Value • Cardinality • C(x) :- A(x), B(x) . • C(x) :- A(x). C(x):- B(x). • R (x,y):- P(x,z), Q(z,y) . • C(x):- not D(x) .C(x): - #count{x, P(x,y)}<=0 . • C(x) :- P(x,a) . • C(x) : #count{x, P(x,y)}>=3 . This is also query language
Remote Join Free • Assumption: data are distributed; rule set is relatively small, every node has the full rule set • Data can be duplicated in GIDS manner • If there is no join, the result set can be a simple union • Domain, range, subC, subP, inverseOf, symmetric, disjunction, has value • Each node compute a local answer, the whole answer set is their union
MapReduce Negation and cardinality queries can be distributed by MapReduce (counting) void map(String name, String document): // name: document name // document: document contents for each word w in document: EmitIntermediate(w, "1"); void reduce(String word, IteratorpartialCounts): // word: a word // partialCounts: a list of aggregated partial counts int result = 0; for each pc in partialCounts: result += ParseInt(pc); Emit(AsString(result)); Also see: http://ayende.com/Blog/archive/2010/03/14/map-reduce-ndash-a-visual-explanation.aspx
Remote Join • E.g. C(x) :- D(x), E(x) • Node 1: { D(a) } • Node 2: { E(a) } • One solution: in query answering, do dependency check, and copy partial result to one place • E.,g. C1(x) : - D(X) C2(x) :-E(X) • Copy instances of C1 and C2 to one node • On that node, add rule C(x) :-C1(x), C2(x) • Optimization: hashing or indexing?