<div dir="ltr"><div>Thanks, Vasiliy and MarLinn! I didn't realize the underlying behemoth was proprietary. That's a deal-killer for me.</div><div><br></div><div>I was excited about Graql because they say it makes nested relationships easy to represent. I once wrote a toolkit in Haskell for that[1], using the Functional Graph Library. Below I've included a demo of it, in case anyone is interested. I would like to integrate it with Sparql and other semweb tools.</div><div><br></div><div>[1] <a href="https://github.com/JeffreyBenjaminBrown/digraphs-with-text/">https://github.com/JeffreyBenjaminBrown/digraphs-with-text/</a><br></div><div><br></div><div>-- make an empty graph<br></div><div><div>> let g = empty :: RSLT</div><div><br></div><div>-- add three words to it</div><div>> g <- pure $ foldl (flip insWord) g ["the cat","water","living organism"]</div><div><br></div><div>-- add three relationship templates.</div><div>  -- Templates resemble edge labels, but with arbitrary arity and nesting.</div><div>> g <- pure $ foldl (flip insTplt) g ["_ needs _", "_ is a _","_ because _"]</div><div><br></div><div>-- view the graph so far</div><div>> view g $ nodes g</div><div>(0,"the cat") -- Expressions 0, 1 and 2 are "Words"</div><div>(1,"water")</div><div>(2,"living organism")</div><div>(3,"_ #needs _") -- Expressions 3, 4 and 5 are "Tplts" (relationship templates)</div><div>(4,"_ #(is a) _")</div><div>(5,"_ #because _")</div><div><br></div><div>-- use the relationship templates to create two relationships</div><div>> g <- pure $ fromRight $ insRel 3 [0,1] g</div><div>> g <- pure $ fromRight $ insRel 4 [0,2] g</div><div><br></div><div>> view g $ nodes g</div><div>(0,"the cat")</div><div>(1,"water")</div><div>(2,"living organism")</div><div>(3,"_ #needs _")</div><div>(4,"_ #(is a) _")</div><div>(5,"_ #because _")</div><div>(6,"the cat ##needs water") -- nodes 6 and 7 are the new relationships</div><div>(7,"the cat ##(is a) living organism")</div><div><br></div><div>-- nesting! create a "because" relationship between relationships 6 and 7</div><div>> g <- pure $ fromRight $ insRel 5 [6,7] g</div><div><br></div><div>> view g $ nodes g</div><div>(0,"the cat")</div><div>(1,"water")</div><div>(2,"living organism")</div><div>(3,"_ #needs _")</div><div>(4,"_ #(is a) _")</div><div>(5,"_ #because _")</div><div>(6,"the cat ##needs water")</div><div>(7,"the cat ##(is a) living organism")</div><div>(8,"the cat ##needs water ####because the cat ##(is a) living organism")</div><div>> </div></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 17, 2017 at 10:14 AM, Vasiliy <span dir="ltr"><<a href="mailto:vasiliy.l@gmail.com" target="_blank">vasiliy.l@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi<br>
<br>
Grakn.ai data model looks very much like RDF[1] with SPARQL[2] as a query<br>
language. There are quite a few data stores, owl reasoners and various<br>
libraries to work with rdf. There are haskell packages as well: rdf4h[3] for<br>
data representation, hsparql[4] to create and submit queries to sparql stores,<br>
swish[5] is a semantic web toolkit.<br>
<br>
Hope that would be helpful for you.<br>
<br>
<br>
[1] <a href="https://www.w3.org/TR/rdf11-concepts/" rel="noreferrer" target="_blank">https://www.w3.org/TR/rdf11-co<wbr>ncepts/</a><br>
[2] <a href="https://www.w3.org/TR/sparql11-query/" rel="noreferrer" target="_blank">https://www.w3.org/TR/sparql11<wbr>-query/</a><br>
[3] <a href="https://hackage.haskell.org/package/rdf4h" rel="noreferrer" target="_blank">https://hackage.haskell.org/pa<wbr>ckage/rdf4h</a><br>
[4] <a href="https://hackage.haskell.org/package/hsparql" rel="noreferrer" target="_blank">https://hackage.haskell.org/pa<wbr>ckage/hsparql</a><br>
[5] <a href="https://hackage.haskell.org/package/swish" rel="noreferrer" target="_blank">https://hackage.haskell.org/pa<wbr>ckage/swish</a><br>
<br>
--<br>
Best Regards<span class="HOEnZb"><font color="#888888"><br>
Vasiliy</font></span><span class=""><br>
<br>
On 03/14/2017 06:53 AM, Jeffrey Brown wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
Graql[1] is a (and stands for) graph query language. It is unusually<br>
expressive, allowing relationships to be members of other relationships[2]<br>
-- effectively, allowing one edge to be an endpoint of another edge.<br>
<br>
Someone named Felix posted a Haskell library for generating Graql<br>
queries[3].<br>
<br>
Does anyone have a Haskell program that not only generates but uses such a<br>
query?<br>
<br>
<br>
[1] <a href="https://hackage.haskell.org/package/graql" rel="noreferrer" target="_blank">https://hackage.haskell.org/pa<wbr>ckage/graql</a><br>
[2] <a href="https://discuss.grakn.ai/t/nested-relationships/" rel="noreferrer" target="_blank">https://discuss.grakn.ai/t/nes<wbr>ted-relationships/</a><br>
[3] <a href="https://discuss.grakn.ai/t/graql-haskell-how-to-run-the-test-program/" rel="noreferrer" target="_blank">https://discuss.grakn.ai/t/gra<wbr>ql-haskell-how-to-run-the-test<wbr>-program/</a><br>
<br>
<br>
<br>
<br></span><span class="">
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.<br>
<br>
</span></blockquote><div class="HOEnZb"><div class="h5">
______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/haskell-caf<wbr>e</a><br>
Only members subscribed via the mailman list are allowed to post.</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Jeff Brown | Jeffrey Benjamin Brown</div><div dir="ltr"><a href="https://msu.edu/~brown202/" style="font-size:12.8px" target="_blank">Website</a>   |   <a href="https://www.facebook.com/mejeff.younotjeff" style="font-size:12.8px" target="_blank">Facebook</a>   |   <a href="https://www.linkedin.com/in/jeffreybenjaminbrown" style="font-size:12.8px" target="_blank">LinkedIn</a><span style="font-size:12.8px">(spammy, so I often miss messages here)   </span><span style="font-size:12.8px">|</span><span style="font-size:12.8px">   </span><a href="https://github.com/jeffreybenjaminbrown" style="font-size:12.8px" target="_blank">Github</a><span style="font-size:12.8px">   </span></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</div>