You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by bb...@apache.org on 2011/06/24 09:45:13 UTC
svn commit: r1139186 - in
/incubator/clerezza/trunk/parent/rdf.scala.utils/src:
main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
test/scala/org/apache/clerezza/rdf/scala/utils/EasyGraphTest.scala
Author: bblfish
Date: Fri Jun 24 07:45:13 2011
New Revision: 1139186
URL: http://svn.apache.org/viewvc?rev=1139186&view=rev
Log:
CLEREZZA-510 added back linguistic ascii notation, as it has easier to understand precedence rules
Modified:
incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
incubator/clerezza/trunk/parent/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EasyGraphTest.scala
Modified: incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala?rev=1139186&r1=1139185&r2=1139186&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala (original)
+++ incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala Fri Jun 24 07:45:13 2011
@@ -193,6 +193,12 @@ class EasyGraphNode(val ref: NonLiteral,
// case other: TripleCollection => new EasyGraph(graph)
// }
+ def +(sub: EasyGraphNode) = {
+ if (graph ne sub.graph) graph.addAll(sub.graph)
+ this
+ }
+
+
/*
* create an EasyGraphNode from this one where the backing graph is protected from writes by a new
* SimpleGraph.
@@ -203,6 +209,12 @@ class EasyGraphNode(val ref: NonLiteral,
def this() = this (new BNode)
+ //
+ // Ascii arrow notation
+ //
+ // (easier to write but has odd precedence implications)
+
+
def --(rel: UriRef): Predicate = new Predicate(rel)
def --(rel: String): Predicate = new Predicate(new UriRef(rel))
@@ -217,6 +229,10 @@ class EasyGraphNode(val ref: NonLiteral,
// if (yes) func(has(rel))
// else this
+ //
+ // symbolic notation
+ //
+ // (shorter and more predictable precedence rules, but unicode issues)
def â(rel: UriRef): Predicate = --(rel)
@@ -225,21 +241,30 @@ class EasyGraphNode(val ref: NonLiteral,
/* For inverse relationships */
def âµ(rel: UriRef) = -<-(rel)
- // does not work as hoped
- // def â?(yes: Boolean, uri: UriRef)(func: Predicate => EasyGraphNode): EasyGraphNode = hasQ(yes,uri)(func)
-
- def +(sub: EasyGraphNode) = {
- if (graph ne sub.graph) graph.addAll(sub.graph)
- this
+ def â(rdfclass: UriRef): EasyGraphNode = {
+ graph.add(new TripleImpl(ref, RDF.`type`, rdfclass))
+ return EasyGraphNode.this
}
+
+
+
+ //
+ // symbolic notation
+ //
+ // (shorter and more predictable precedence rules - they are always the weakest, and so very few brakets are need
+ // when symbolic operators are used. But sometimes this notation is grammatically awkward)
+
def a(rdfclass: UriRef) = â(rdfclass)
+ def has(rel: UriRef): Predicate = --(rel)
+
+ def has(rel: String): Predicate = --(rel)
+
+ /* For inverse relationships */
+ def is(rel: UriRef) = -<-(rel)
+
- def â(rdfclass: UriRef): EasyGraphNode = {
- graph.add(new TripleImpl(ref, RDF.`type`, rdfclass))
- return EasyGraphNode.this
- }
class InversePredicate(rel: UriRef) {
def â(subj: NonLiteral) = add(subj)
@@ -256,6 +281,10 @@ class EasyGraphNode(val ref: NonLiteral,
def --(subj: EasyGraphNode) = â(subj)
// since we can only have inverses from non literals (howto deal with bndoes?)
+ def of(subj: NonLiteral) = â(subj)
+ def of(subj: String) = â(subj)
+ def of(subj: EasyGraphNode) = â(subj)
+
protected def add(subj: NonLiteral) = {
graph.add(new TripleImpl(subj, rel, ref))
EasyGraphNode.this
@@ -294,7 +323,6 @@ class EasyGraphNode(val ref: NonLiteral,
//
// arrow notation
//
- // todo: a relation to a list
def â¶(obj: String) = -->(obj)
@@ -309,6 +337,25 @@ class EasyGraphNode(val ref: NonLiteral,
def â¶(sub: EasyGraphNode) = -->(sub)
+
+ //
+ // text notation
+ //
+
+ def to(obj: String) = -->(obj)
+
+ def to(obj: Resource): EasyGraphNode = -->(obj)
+
+ def to(list: List[Resource]): EasyGraphNode = addList(list)
+
+ /**
+ * Add one relation for each member of the iterable collection
+ */
+ def toEach[T <: Resource](objs: Iterable[T]) = -->>(objs)
+
+ def to(sub: EasyGraphNode) = -->(sub)
+
+
protected def add(obj: Resource) = {
addTriple(obj)
EasyGraphNode.this
Modified: incubator/clerezza/trunk/parent/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EasyGraphTest.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EasyGraphTest.scala?rev=1139186&r1=1139185&r2=1139186&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EasyGraphTest.scala (original)
+++ incubator/clerezza/trunk/parent/rdf.scala.utils/src/test/scala/org/apache/clerezza/rdf/scala/utils/EasyGraphTest.scala Fri Jun 24 07:45:13 2011
@@ -292,4 +292,39 @@ class EasyGraphTest {
}
+ @Test
+ def usingWordOperators {
+ import org.apache.clerezza.rdf.scala.utils.EasyGraph._
+ import org.apache.clerezza.rdf.scala.utils.Lang._
+ val ez = new EasyGraph()
+ // example using arrows
+ (
+ ez.bnode("reto") a FOAF.Person
+ has FOAF.name to "Reto Bachman-Gmür".lang(rm)
+ has FOAF.title to "Mr"
+ has FOAF.currentProject to "http://clerezza.org/".uri
+ has FOAF.knows to (
+ ez.u("http://bblfish.net/#hjs") a FOAF.Person
+ has FOAF.name to "Henry Story"
+ has FOAF.currentProject to "http://webid.info/".uri
+ is identity of (
+ ez.bnode a RSAPublicKey //. notation because of precedence of operators
+ has modulus to 65537
+ has public_exponent to bblfishModulus^^hex // brackets needed due to precedence
+ )
+ has FOAF.knows toEach List(ez.bnode("reto").ref,ez.bnode("danny").ref)
+ )
+ has FOAF.knows to ( ez.bnode("danny") a FOAF.Person
+ has FOAF.name to "Danny Ayers".lang(en)
+ has FOAF.knows to "http://bblfish.net/#hjs".uri //knows
+ has FOAF.knows to ez.bnode("reto")
+ )
+ )
+ Assert.assertEquals("the two graphs should be of same size",tinyGraph.size(),ez.size())
+ Assert.assertEquals("Both graphs should contain exactly the same triples",tinyGraph,ez.getGraph)
+ ez.bnode("danny") has FOAF.name to "George"
+ Assert.assertNotSame("Added one more triple, so graphs should no longer be equal",tinyGraph,ez.getGraph)
+
+ }
+
}