From 274d9ef57ef9624dcd27435d112cc61340a17c7e Mon Sep 17 00:00:00 2001 From: kortschak Date: Tue, 29 Jul 2014 08:44:39 +0930 Subject: [PATCH] Rename Provenance -> Label 's/Provenance/Label/g' 's/provenance/label/g' with human vetting. --- TODO.md | 16 +- docs/HTTP.md | 4 +- graph/iterator/value_comparison_iterator.go | 2 +- graph/leveldb/iterator.go | 8 +- graph/leveldb/leveldb_test.go | 6 +- graph/leveldb/triplestore.go | 20 +- graph/memstore/triplestore.go | 38 +-- graph/memstore/triplestore_test.go | 2 +- graph/mongo/iterator.go | 6 +- graph/mongo/triplestore.go | 34 +-- http/http_test.go | 2 +- quad/cquads/actions.rl | 2 +- quad/cquads/cquads_test.go | 360 ++++++++++++++-------------- quad/cquads/parse.go | 28 +-- quad/nquads/actions.rl | 2 +- quad/nquads/nquads_test.go | 256 ++++++++++---------- quad/nquads/parse.go | 10 +- quad/quad.go | 28 +-- static/js/cayley_write.js | 4 +- templates/write.html | 4 +- 20 files changed, 416 insertions(+), 416 deletions(-) diff --git a/TODO.md b/TODO.md index 85276a6..0f0fed4 100644 --- a/TODO.md +++ b/TODO.md @@ -26,11 +26,11 @@ Usually something that should be taken care of. ### Bootstraps Start discussing bootstrap triples, things that make the database self-describing, if they exist (though they need not). Talk about sameAs and indexing and type systems and whatnot. -### Better surfacing of Provenance +### Better surfacing of Label It exists, it's indexed, but it's basically useless right now ### Optimize HasA Iterator -There are some simple optimizations that can be done there. And was the first one to get right, this is the next one. +There are some simple optimizations that can be done there. And was the first one to get right, this is the next one. A simple example is just to convert the HasA to a fixed (next them out) if the subiterator size is guessable and small. ### Gremlin features @@ -39,7 +39,7 @@ A simple example is just to convert the HasA to a fixed (next them out) if the s A way to limit the number of subresults at a point, without even running the query. Essentially, much as GetLimit() does for the end, be able to do the same in between #### "Up" and "Down" traversals -Getting to the predicates from a node, or the nodes from a predicate, or some odd combinations thereof. Ditto for provenance. +Getting to the predicates from a node, or the nodes from a predicate, or some odd combinations thereof. Ditto for label. #### Value comparison Expose the value-comparison iterator in the language @@ -66,7 +66,7 @@ The necessary component to make mid-query limit work. Acts as a limit on Next(), Hopefully easy now that the AppEngine shim exists. Questionably fast. ### Postgres Backend - It'd be nice to run on SQL as well. It's a big why not? + It'd be nice to run on SQL as well. It's a big why not? #### Generalist layout Notionally, this is a simple triple table with a number of indicies. Iterators and iterator optimization (ie, rewriting SQL queries) is the 'fun' part #### "Short Schema" Layout? @@ -75,7 +75,7 @@ The necessary component to make mid-query limit work. Acts as a limit on Next(), ### New Iterators #### Predicate Iterator - Really, this is just the generalized value comparison iterator, across strings and dates and such. + Really, this is just the generalized value comparison iterator, across strings and dates and such. ## Longer Term (and fuzzy) @@ -83,7 +83,7 @@ The necessary component to make mid-query limit work. Acts as a limit on Next(), There's a whole body of work there, and a lot of interested researchers. They're the choir who already know the sermon of graph stores. Once ease-of-use gets people in the door, supporting extensions that make everyone happy seems like a win. And because we're query-language agnostic, it's a cleaner win. See also bootstrapping, which is the first goal toward this (eg, let's talk about sameAs, and index it appropriately.) ### Replication - Technically it works now if you piggyback on someone else's replication, but that's cheating. We speak HTTP, we can send triple sets over the wire to some other instance. Bonus points for a way to apply morphisms first -- massive graph on the backend, important graph on the frontend. + Technically it works now if you piggyback on someone else's replication, but that's cheating. We speak HTTP, we can send triple sets over the wire to some other instance. Bonus points for a way to apply morphisms first -- massive graph on the backend, important graph on the frontend. ### Related services Eg, topic service, recon service -- whether in Cayley itself or as part of the greater project. @@ -102,6 +102,6 @@ The necessary component to make mid-query limit work. Acts as a limit on Next(), ### All sorts of backends: #### Git? Can we access git in a meaningful fashion, giving a history and rollbacks to memory/flat files? -#### ElasticSearch -#### Cassandra +#### ElasticSearch +#### Cassandra #### Redis diff --git a/docs/HTTP.md b/docs/HTTP.md index a968bc6..fece408 100644 --- a/docs/HTTP.md +++ b/docs/HTTP.md @@ -93,7 +93,7 @@ POST Body: JSON triples "subject": "Subject Node", "predicate": "Predicate Node", "object": "Object node", - "provenance": "Provenance node" // Optional + "label": "Label node" // Optional }] // More than one triple allowed. ``` @@ -121,7 +121,7 @@ POST Body: JSON triples "subject": "Subject Node", "predicate": "Predicate Node", "object": "Object node", - "provenance": "Provenance node" // Optional + "label": "Label node" // Optional }] // More than one triple allowed. ``` diff --git a/graph/iterator/value_comparison_iterator.go b/graph/iterator/value_comparison_iterator.go index 611d549..fd6a1a8 100644 --- a/graph/iterator/value_comparison_iterator.go +++ b/graph/iterator/value_comparison_iterator.go @@ -17,7 +17,7 @@ package iterator // "Value Comparison" is a unary operator -- a filter across the values in the // relevant subiterator. // -// This is hugely useful for things like provenance, but value ranges in general +// This is hugely useful for things like label, but value ranges in general // come up from time to time. At *worst* we're as big as our underlying iterator. // At best, we're the null iterator. // diff --git a/graph/leveldb/iterator.go b/graph/leveldb/iterator.go index 22119f4..dda7edf 100644 --- a/graph/leveldb/iterator.go +++ b/graph/leveldb/iterator.go @@ -124,7 +124,7 @@ func PositionOf(prefix []byte, d quad.Direction, qs *TripleStore) int { return qs.hasher.Size() + 2 case quad.Object: return 2*qs.hasher.Size() + 2 - case quad.Provenance: + case quad.Label: return -1 } } @@ -136,7 +136,7 @@ func PositionOf(prefix []byte, d quad.Direction, qs *TripleStore) int { return 2 case quad.Object: return qs.hasher.Size() + 2 - case quad.Provenance: + case quad.Label: return -1 } } @@ -148,7 +148,7 @@ func PositionOf(prefix []byte, d quad.Direction, qs *TripleStore) int { return 2*qs.hasher.Size() + 2 case quad.Object: return 2 - case quad.Provenance: + case quad.Label: return -1 } } @@ -160,7 +160,7 @@ func PositionOf(prefix []byte, d quad.Direction, qs *TripleStore) int { return qs.hasher.Size() + 2 case quad.Object: return 3*qs.hasher.Size() + 2 - case quad.Provenance: + case quad.Label: return 2 } } diff --git a/graph/leveldb/leveldb_test.go b/graph/leveldb/leveldb_test.go index 36ee878..2501e14 100644 --- a/graph/leveldb/leveldb_test.go +++ b/graph/leveldb/leveldb_test.go @@ -73,7 +73,7 @@ func (o ordered) Less(i, j int) bool { o[i].Subject == o[j].Subject && o[i].Predicate == o[j].Predicate && o[i].Object == o[j].Object && - o[i].Provenance < o[j].Provenance: + o[i].Label < o[j].Label: return true @@ -359,8 +359,8 @@ func TestSetIterator(t *testing.T) { t.Errorf("Failed to get expected results from predicate iterator, got:%v expect:%v", got, expect) } - // Provenance iterator. - it = qs.TripleIterator(quad.Provenance, qs.ValueOf("status_graph")) + // Label iterator. + it = qs.TripleIterator(quad.Label, qs.ValueOf("status_graph")) expect = []*quad.Quad{ {"B", "status", "cool", "status_graph"}, diff --git a/graph/leveldb/triplestore.go b/graph/leveldb/triplestore.go index b7c9c77..89f578a 100644 --- a/graph/leveldb/triplestore.go +++ b/graph/leveldb/triplestore.go @@ -125,8 +125,8 @@ func (qs *TripleStore) createKeyFor(d [3]quad.Direction, triple *quad.Quad) []by func (qs *TripleStore) createProvKeyFor(d [3]quad.Direction, triple *quad.Quad) []byte { key := make([]byte, 0, 2+(qs.hasher.Size()*4)) // TODO(kortschak) Remove dependence on String() method. - key = append(key, []byte{quad.Provenance.Prefix(), d[0].Prefix()}...) - key = append(key, qs.convertStringToByteHash(triple.Get(quad.Provenance))...) + key = append(key, []byte{quad.Label.Prefix(), d[0].Prefix()}...) + key = append(key, qs.convertStringToByteHash(triple.Get(quad.Label))...) key = append(key, qs.convertStringToByteHash(triple.Get(d[0]))...) key = append(key, qs.convertStringToByteHash(triple.Get(d[1]))...) key = append(key, qs.convertStringToByteHash(triple.Get(d[2]))...) @@ -176,9 +176,9 @@ func (qs *TripleStore) RemoveTriple(t *quad.Quad) { qs.UpdateValueKeyBy(t.Get(quad.Subject), -1, batch) qs.UpdateValueKeyBy(t.Get(quad.Predicate), -1, batch) qs.UpdateValueKeyBy(t.Get(quad.Object), -1, batch) - if t.Get(quad.Provenance) != "" { + if t.Get(quad.Label) != "" { batch.Delete(qs.createProvKeyFor(pso, t)) - qs.UpdateValueKeyBy(t.Get(quad.Provenance), -1, batch) + qs.UpdateValueKeyBy(t.Get(quad.Label), -1, batch) } err = qs.db.Write(batch, nil) if err != nil { @@ -197,7 +197,7 @@ func (qs *TripleStore) buildTripleWrite(batch *leveldb.Batch, t *quad.Quad) { batch.Put(qs.createKeyFor(spo, t), bytes) batch.Put(qs.createKeyFor(osp, t), bytes) batch.Put(qs.createKeyFor(pos, t), bytes) - if t.Get(quad.Provenance) != "" { + if t.Get(quad.Label) != "" { batch.Put(qs.createProvKeyFor(pso, t), bytes) } } @@ -207,8 +207,8 @@ func (qs *TripleStore) buildWrite(batch *leveldb.Batch, t *quad.Quad) { qs.UpdateValueKeyBy(t.Get(quad.Subject), 1, nil) qs.UpdateValueKeyBy(t.Get(quad.Predicate), 1, nil) qs.UpdateValueKeyBy(t.Get(quad.Object), 1, nil) - if t.Get(quad.Provenance) != "" { - qs.UpdateValueKeyBy(t.Get(quad.Provenance), 1, nil) + if t.Get(quad.Label) != "" { + qs.UpdateValueKeyBy(t.Get(quad.Label), 1, nil) } } @@ -272,8 +272,8 @@ func (qs *TripleStore) AddTripleSet(t_s []*quad.Quad) { resizeMap[t.Subject]++ resizeMap[t.Predicate]++ resizeMap[t.Object]++ - if t.Provenance != "" { - resizeMap[t.Provenance]++ + if t.Label != "" { + resizeMap[t.Label]++ } } for k, v := range resizeMap { @@ -411,7 +411,7 @@ func (qs *TripleStore) TripleIterator(d quad.Direction, val graph.Value) graph.I prefix = "po" case quad.Object: prefix = "os" - case quad.Provenance: + case quad.Label: prefix = "cp" default: panic("unreachable " + d.String()) diff --git a/graph/memstore/triplestore.go b/graph/memstore/triplestore.go index 6263ce8..26c59f1 100644 --- a/graph/memstore/triplestore.go +++ b/graph/memstore/triplestore.go @@ -26,10 +26,10 @@ import ( ) type TripleDirectionIndex struct { - subject map[int64]*llrb.LLRB - predicate map[int64]*llrb.LLRB - object map[int64]*llrb.LLRB - provenance map[int64]*llrb.LLRB + subject map[int64]*llrb.LLRB + predicate map[int64]*llrb.LLRB + object map[int64]*llrb.LLRB + label map[int64]*llrb.LLRB } func NewTripleDirectionIndex() *TripleDirectionIndex { @@ -37,7 +37,7 @@ func NewTripleDirectionIndex() *TripleDirectionIndex { tdi.subject = make(map[int64]*llrb.LLRB) tdi.predicate = make(map[int64]*llrb.LLRB) tdi.object = make(map[int64]*llrb.LLRB) - tdi.provenance = make(map[int64]*llrb.LLRB) + tdi.label = make(map[int64]*llrb.LLRB) return &tdi } @@ -49,8 +49,8 @@ func (tdi *TripleDirectionIndex) GetForDir(d quad.Direction) map[int64]*llrb.LLR return tdi.object case quad.Predicate: return tdi.predicate - case quad.Provenance: - return tdi.provenance + case quad.Label: + return tdi.label } panic("illegal direction") } @@ -104,9 +104,9 @@ func (ts *TripleStore) AddTripleSet(triples []*quad.Quad) { func (ts *TripleStore) tripleExists(t *quad.Quad) (bool, int64) { smallest := -1 var smallest_tree *llrb.LLRB - for d := quad.Subject; d <= quad.Provenance; d++ { + for d := quad.Subject; d <= quad.Label; d++ { sid := t.Get(d) - if d == quad.Provenance && sid == "" { + if d == quad.Label && sid == "" { continue } id, ok := ts.idMap[sid] @@ -148,9 +148,9 @@ func (ts *TripleStore) AddTriple(t *quad.Quad) { ts.size++ ts.tripleIdCounter++ - for d := quad.Subject; d <= quad.Provenance; d++ { + for d := quad.Subject; d <= quad.Label; d++ { sid := t.Get(d) - if d == quad.Provenance && sid == "" { + if d == quad.Label && sid == "" { continue } if _, ok := ts.idMap[sid]; !ok { @@ -160,8 +160,8 @@ func (ts *TripleStore) AddTriple(t *quad.Quad) { } } - for d := quad.Subject; d <= quad.Provenance; d++ { - if d == quad.Provenance && t.Get(d) == "" { + for d := quad.Subject; d <= quad.Label; d++ { + if d == quad.Label && t.Get(d) == "" { continue } id := ts.idMap[t.Get(d)] @@ -183,8 +183,8 @@ func (ts *TripleStore) RemoveTriple(t *quad.Quad) { ts.triples[tripleID] = quad.Quad{} ts.size-- - for d := quad.Subject; d <= quad.Provenance; d++ { - if d == quad.Provenance && t.Get(d) == "" { + for d := quad.Subject; d <= quad.Label; d++ { + if d == quad.Label && t.Get(d) == "" { continue } id := ts.idMap[t.Get(d)] @@ -192,8 +192,8 @@ func (ts *TripleStore) RemoveTriple(t *quad.Quad) { tree.Delete(Int64(tripleID)) } - for d := quad.Subject; d <= quad.Provenance; d++ { - if d == quad.Provenance && t.Get(d) == "" { + for d := quad.Subject; d <= quad.Label; d++ { + if d == quad.Label && t.Get(d) == "" { continue } id, ok := ts.idMap[t.Get(d)] @@ -201,8 +201,8 @@ func (ts *TripleStore) RemoveTriple(t *quad.Quad) { continue } stillExists := false - for d := quad.Subject; d <= quad.Provenance; d++ { - if d == quad.Provenance && t.Get(d) == "" { + for d := quad.Subject; d <= quad.Label; d++ { + if d == quad.Label && t.Get(d) == "" { continue } nodeTree := ts.index.GetOrCreate(d, id) diff --git a/graph/memstore/triplestore_test.go b/graph/memstore/triplestore_test.go index 6ba889a..61ae371 100644 --- a/graph/memstore/triplestore_test.go +++ b/graph/memstore/triplestore_test.go @@ -58,7 +58,7 @@ func makeTestStore(data []*quad.Quad) (*TripleStore, []pair) { ind []pair ) for _, t := range data { - for _, qp := range []string{t.Subject, t.Predicate, t.Object, t.Provenance} { + for _, qp := range []string{t.Subject, t.Predicate, t.Object, t.Label} { if _, ok := seen[qp]; !ok && qp != "" { val++ ind = append(ind, pair{qp, val}) diff --git a/graph/mongo/iterator.go b/graph/mongo/iterator.go index 16e00c5..77dcd75 100644 --- a/graph/mongo/iterator.go +++ b/graph/mongo/iterator.go @@ -53,8 +53,8 @@ func NewIterator(qs *TripleStore, collection string, d quad.Direction, val graph m.constraint = bson.M{"Predicate": m.name} case quad.Object: m.constraint = bson.M{"Object": m.name} - case quad.Provenance: - m.constraint = bson.M{"Provenance": m.name} + case quad.Label: + m.constraint = bson.M{"Label": m.name} } m.qs = qs @@ -143,7 +143,7 @@ func (it *Iterator) Check(v graph.Value) bool { offset = (it.qs.hasher.Size() * 2) case quad.Object: offset = (it.qs.hasher.Size() * 2) * 2 - case quad.Provenance: + case quad.Label: offset = (it.qs.hasher.Size() * 2) * 3 } val := v.(string)[offset : it.qs.hasher.Size()*2+offset] diff --git a/graph/mongo/triplestore.go b/graph/mongo/triplestore.go index fd7668c..0f069cf 100644 --- a/graph/mongo/triplestore.go +++ b/graph/mongo/triplestore.go @@ -69,7 +69,7 @@ func createNewMongoGraph(addr string, options graph.Options) error { db.C("triples").EnsureIndex(indexOpts) indexOpts.Key = []string{"Obj"} db.C("triples").EnsureIndex(indexOpts) - indexOpts.Key = []string{"Provenance"} + indexOpts.Key = []string{"Label"} db.C("triples").EnsureIndex(indexOpts) return nil } @@ -96,7 +96,7 @@ func (qs *TripleStore) getIdForTriple(t *quad.Quad) string { id := qs.ConvertStringToByteHash(t.Subject) id += qs.ConvertStringToByteHash(t.Predicate) id += qs.ConvertStringToByteHash(t.Object) - id += qs.ConvertStringToByteHash(t.Provenance) + id += qs.ConvertStringToByteHash(t.Label) return id } @@ -153,11 +153,11 @@ func (qs *TripleStore) updateNodeBy(node_name string, inc int) { func (qs *TripleStore) writeTriple(t *quad.Quad) bool { tripledoc := bson.M{ - "_id": qs.getIdForTriple(t), - "Subject": t.Subject, - "Predicate": t.Predicate, - "Object": t.Object, - "Provenance": t.Provenance, + "_id": qs.getIdForTriple(t), + "Subject": t.Subject, + "Predicate": t.Predicate, + "Object": t.Object, + "Label": t.Label, } err := qs.db.C("triples").Insert(tripledoc) if err != nil { @@ -176,8 +176,8 @@ func (qs *TripleStore) AddTriple(t *quad.Quad) { qs.updateNodeBy(t.Subject, 1) qs.updateNodeBy(t.Predicate, 1) qs.updateNodeBy(t.Object, 1) - if t.Provenance != "" { - qs.updateNodeBy(t.Provenance, 1) + if t.Label != "" { + qs.updateNodeBy(t.Label, 1) } } @@ -190,8 +190,8 @@ func (qs *TripleStore) AddTripleSet(in []*quad.Quad) { ids[t.Subject]++ ids[t.Object]++ ids[t.Predicate]++ - if t.Provenance != "" { - ids[t.Provenance]++ + if t.Label != "" { + ids[t.Label]++ } } } @@ -212,8 +212,8 @@ func (qs *TripleStore) RemoveTriple(t *quad.Quad) { qs.updateNodeBy(t.Subject, -1) qs.updateNodeBy(t.Predicate, -1) qs.updateNodeBy(t.Object, -1) - if t.Provenance != "" { - qs.updateNodeBy(t.Provenance, -1) + if t.Label != "" { + qs.updateNodeBy(t.Label, -1) } } @@ -227,7 +227,7 @@ func (qs *TripleStore) Quad(val graph.Value) *quad.Quad { bsonDoc["Subject"].(string), bsonDoc["Predicate"].(string), bsonDoc["Object"].(string), - bsonDoc["Provenance"].(string), + bsonDoc["Label"].(string), } } @@ -292,7 +292,7 @@ func (qs *TripleStore) TripleDirection(in graph.Value, d quad.Direction) graph.V offset = (qs.hasher.Size() * 2) case quad.Object: offset = (qs.hasher.Size() * 2) * 2 - case quad.Provenance: + case quad.Label: offset = (qs.hasher.Size() * 2) * 3 } val := in.(string)[offset : qs.hasher.Size()*2+offset] @@ -328,8 +328,8 @@ func (qs *TripleStore) BulkLoad(dec quad.Unmarshaler) error { emit(s_key, {"_id": s_key, "Name" : this.Subject, "Size" : 1}) emit(p_key, {"_id": p_key, "Name" : this.Predicate, "Size" : 1}) emit(o_key, {"_id": o_key, "Name" : this.Object, "Size" : 1}) - if (this.Provenance != "") { - emit(c_key, {"_id": c_key, "Name" : this.Provenance, "Size" : 1}) + if (this.Label != "") { + emit(c_key, {"_id": c_key, "Name" : this.Label, "Size" : 1}) } } `, diff --git a/http/http_test.go b/http/http_test.go index 589f05b..e4d8c30 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -32,7 +32,7 @@ var parseTests = []struct { message: "parse correct JSON", input: `[ {"subject": "foo", "predicate": "bar", "object": "baz"}, - {"subject": "foo", "predicate": "bar", "object": "baz", "provenance": "graph"} + {"subject": "foo", "predicate": "bar", "object": "baz", "label": "graph"} ]`, expect: []*quad.Quad{ {"foo", "bar", "baz", ""}, diff --git a/quad/cquads/actions.rl b/quad/cquads/actions.rl index 1affd14..d1e84a3 100644 --- a/quad/cquads/actions.rl +++ b/quad/cquads/actions.rl @@ -70,7 +70,7 @@ if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false } diff --git a/quad/cquads/cquads_test.go b/quad/cquads/cquads_test.go index c6cc344..8c4f3ba 100644 --- a/quad/cquads/cquads_test.go +++ b/quad/cquads/cquads_test.go @@ -41,50 +41,50 @@ var testNTriples = []struct { message: "parse simple triples", input: "this is valid .", expect: &quad.Quad{ - Subject: "this", - Predicate: "is", - Object: "valid", - Provenance: "", + Subject: "this", + Predicate: "is", + Object: "valid", + Label: "", }, }, { message: "parse quoted triples", input: `this is "valid too" .`, expect: &quad.Quad{ - Subject: "this", - Predicate: "is", - Object: "valid too", - Provenance: "", + Subject: "this", + Predicate: "is", + Object: "valid too", + Label: "", }, }, { message: "parse escaped quoted triples", input: `he said "\"That's all folks\"" .`, expect: &quad.Quad{ - Subject: "he", - Predicate: "said", - Object: `"That's all folks"`, - Provenance: "", + Subject: "he", + Predicate: "said", + Object: `"That's all folks"`, + Label: "", }, }, { message: "parse an example real triple", input: `":/guid/9202a8c04000641f80000000010c843c" "name" "George Morris" .`, expect: &quad.Quad{ - Subject: ":/guid/9202a8c04000641f80000000010c843c", - Predicate: "name", - Object: "George Morris", - Provenance: "", + Subject: ":/guid/9202a8c04000641f80000000010c843c", + Predicate: "name", + Object: "George Morris", + Label: "", }, }, { message: "parse a pathologically spaced triple", input: "foo is \"\\tA big tough\\r\\nDeal\\\\\" .", expect: &quad.Quad{ - Subject: "foo", - Predicate: "is", - Object: "\tA big tough\r\nDeal\\", - Provenance: "", + Subject: "foo", + Predicate: "is", + Object: "\tA big tough\r\nDeal\\", + Label: "", }, }, @@ -93,30 +93,30 @@ var testNTriples = []struct { message: "parse a simple quad", input: "this is valid quad .", expect: &quad.Quad{ - Subject: "this", - Predicate: "is", - Object: "valid", - Provenance: "quad", + Subject: "this", + Predicate: "is", + Object: "valid", + Label: "quad", }, }, { message: "parse a quoted quad", input: `this is valid "quad thing" .`, expect: &quad.Quad{ - Subject: "this", - Predicate: "is", - Object: "valid", - Provenance: "quad thing", + Subject: "this", + Predicate: "is", + Object: "valid", + Label: "quad thing", }, }, { message: "parse crazy escaped quads", input: `"\"this" "\"is" "\"valid" "\"quad thing".`, expect: &quad.Quad{ - Subject: `"this`, - Predicate: `"is`, - Object: `"valid`, - Provenance: `"quad thing`, + Subject: `"this`, + Predicate: `"is`, + Object: `"valid`, + Label: `"quad thing`, }, }, @@ -125,50 +125,50 @@ var testNTriples = []struct { message: "handle simple case with comments", input: " . # comment", expect: &quad.Quad{ - Subject: "http://example/s", - Predicate: "http://example/p", - Object: "http://example/o", - Provenance: "", + Subject: "http://example/s", + Predicate: "http://example/p", + Object: "http://example/o", + Label: "", }, }, { message: "handle simple case with comments", input: " _:o . # comment", expect: &quad.Quad{ - Subject: "http://example/s", - Predicate: "http://example/p", - Object: "_:o", - Provenance: "", + Subject: "http://example/s", + Predicate: "http://example/p", + Object: "_:o", + Label: "", }, }, { message: "handle simple case with comments", input: " \"o\" . # comment", expect: &quad.Quad{ - Subject: "http://example/s", - Predicate: "http://example/p", - Object: "o", - Provenance: "", + Subject: "http://example/s", + Predicate: "http://example/p", + Object: "o", + Label: "", }, }, { message: "handle simple case with comments", input: " \"o\"^^ . # comment", expect: &quad.Quad{ - Subject: "http://example/s", - Predicate: "http://example/p", - Object: `"o"^^`, - Provenance: "", + Subject: "http://example/s", + Predicate: "http://example/p", + Object: `"o"^^`, + Label: "", }, }, { message: "handle simple case with comments", input: " \"o\"@en . # comment", expect: &quad.Quad{ - Subject: "http://example/s", - Predicate: "http://example/p", - Object: `"o"@en`, - Provenance: ""}, + Subject: "http://example/s", + Predicate: "http://example/p", + Object: `"o"@en`, + Label: ""}, }, // Tests taken from http://www.w3.org/TR/n-quads/ and http://www.w3.org/TR/n-triples/. @@ -178,10 +178,10 @@ var testNTriples = []struct { message: "parse triple with commment", input: `_:100000 . # example from 30movies`, expect: &quad.Quad{ - Subject: "_:100000", - Predicate: "/film/performance/actor", - Object: "/en/larry_fine_1902", - Provenance: "", + Subject: "_:100000", + Predicate: "/film/performance/actor", + Object: "/en/larry_fine_1902", + Label: "", }, err: nil, }, @@ -190,10 +190,10 @@ var testNTriples = []struct { message: "parse triple with commment", input: `_:10011 "Tomás de Torquemada" . # example from 30movies with unicode`, expect: &quad.Quad{ - Subject: "_:10011", - Predicate: "/film/performance/character", - Object: "Tomás de Torquemada", - Provenance: "", + Subject: "_:10011", + Predicate: "/film/performance/character", + Object: "Tomás de Torquemada", + Label: "", }, err: nil, }, @@ -203,10 +203,10 @@ var testNTriples = []struct { message: "parse triple with commment", input: ` . # comments here`, expect: &quad.Quad{ - Subject: "http://one.example/subject1", - Predicate: "http://one.example/predicate1", - Object: "http://one.example/object1", - Provenance: "", + Subject: "http://one.example/subject1", + Predicate: "http://one.example/predicate1", + Object: "http://one.example/object1", + Label: "", }, err: nil, }, @@ -214,10 +214,10 @@ var testNTriples = []struct { message: "parse triple with blank subject node, literal object and no comment (1)", input: `_:subject1 "object1" .`, expect: &quad.Quad{ - Subject: "_:subject1", - Predicate: "http://an.example/predicate1", - Object: "object1", - Provenance: "", + Subject: "_:subject1", + Predicate: "http://an.example/predicate1", + Object: "object1", + Label: "", }, err: nil, }, @@ -225,10 +225,10 @@ var testNTriples = []struct { message: "parse triple with blank subject node, literal object and no comment (2)", input: `_:subject2 "object2" .`, expect: &quad.Quad{ - Subject: "_:subject2", - Predicate: "http://an.example/predicate2", - Object: "object2", - Provenance: "", + Subject: "_:subject2", + Predicate: "http://an.example/predicate2", + Object: "object2", + Label: "", }, err: nil, }, @@ -238,10 +238,10 @@ var testNTriples = []struct { message: "parse triple with three IRIREFs", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/#spiderman", - Predicate: "http://www.perceive.net/schemas/relationship/enemyOf", - Object: "http://example.org/#green-goblin", - Provenance: "", + Subject: "http://example.org/#spiderman", + Predicate: "http://www.perceive.net/schemas/relationship/enemyOf", + Object: "http://example.org/#green-goblin", + Label: "", }, err: nil, }, @@ -251,10 +251,10 @@ var testNTriples = []struct { message: "parse triple with blank node labelled subject and object and IRIREF predicate (1)", input: `_:alice _:bob .`, expect: &quad.Quad{ - Subject: "_:alice", - Predicate: "http://xmlns.com/foaf/0.1/knows", - Object: "_:bob", - Provenance: "", + Subject: "_:alice", + Predicate: "http://xmlns.com/foaf/0.1/knows", + Object: "_:bob", + Label: "", }, err: nil, }, @@ -262,10 +262,10 @@ var testNTriples = []struct { message: "parse triple with blank node labelled subject and object and IRIREF predicate (2)", input: `_:bob _:alice .`, expect: &quad.Quad{ - Subject: "_:bob", - Predicate: "http://xmlns.com/foaf/0.1/knows", - Object: "_:alice", - Provenance: "", + Subject: "_:bob", + Predicate: "http://xmlns.com/foaf/0.1/knows", + Object: "_:alice", + Label: "", }, err: nil, }, @@ -275,10 +275,10 @@ var testNTriples = []struct { message: "parse quad with commment", input: ` . # comments here`, expect: &quad.Quad{ - Subject: "http://one.example/subject1", - Predicate: "http://one.example/predicate1", - Object: "http://one.example/object1", - Provenance: "http://example.org/graph3", + Subject: "http://one.example/subject1", + Predicate: "http://one.example/predicate1", + Object: "http://one.example/object1", + Label: "http://example.org/graph3", }, err: nil, }, @@ -286,10 +286,10 @@ var testNTriples = []struct { message: "parse quad with blank subject node, literal object, IRIREF predicate and label, and no comment (1)", input: `_:subject1 "object1" .`, expect: &quad.Quad{ - Subject: "_:subject1", - Predicate: "http://an.example/predicate1", - Object: "object1", - Provenance: "http://example.org/graph1", + Subject: "_:subject1", + Predicate: "http://an.example/predicate1", + Object: "object1", + Label: "http://example.org/graph1", }, err: nil, }, @@ -297,10 +297,10 @@ var testNTriples = []struct { message: "parse quad with blank subject node, literal object, IRIREF predicate and label, and no comment (2)", input: `_:subject2 "object2" .`, expect: &quad.Quad{ - Subject: "_:subject2", - Predicate: "http://an.example/predicate2", - Object: "object2", - Provenance: "http://example.org/graph5", + Subject: "_:subject2", + Predicate: "http://an.example/predicate2", + Object: "object2", + Label: "http://example.org/graph5", }, err: nil, }, @@ -310,10 +310,10 @@ var testNTriples = []struct { message: "parse quad with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/#spiderman", - Predicate: "http://www.perceive.net/schemas/relationship/enemyOf", - Object: "http://example.org/#green-goblin", - Provenance: "http://example.org/graphs/spiderman", + Subject: "http://example.org/#spiderman", + Predicate: "http://www.perceive.net/schemas/relationship/enemyOf", + Object: "http://example.org/#green-goblin", + Label: "http://example.org/graphs/spiderman", }, err: nil, }, @@ -323,10 +323,10 @@ var testNTriples = []struct { message: "parse quad with blank node labelled subject and object and IRIREF predicate and label (1)", input: `_:alice _:bob .`, expect: &quad.Quad{ - Subject: "_:alice", - Predicate: "http://xmlns.com/foaf/0.1/knows", - Object: "_:bob", - Provenance: "http://example.org/graphs/john", + Subject: "_:alice", + Predicate: "http://xmlns.com/foaf/0.1/knows", + Object: "_:bob", + Label: "http://example.org/graphs/john", }, err: nil, }, @@ -334,10 +334,10 @@ var testNTriples = []struct { message: "parse quad with blank node labelled subject and object and IRIREF predicate and label (2)", input: `_:bob _:alice .`, expect: &quad.Quad{ - Subject: "_:bob", - Predicate: "http://xmlns.com/foaf/0.1/knows", - Object: "_:alice", - Provenance: "http://example.org/graphs/james", + Subject: "_:bob", + Predicate: "http://xmlns.com/foaf/0.1/knows", + Object: "_:alice", + Label: "http://example.org/graphs/james", }, err: nil, }, @@ -347,10 +347,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", - Object: "http://xmlns.com/foaf/0.1/Person", - Provenance: "", + Subject: "http://example.org/bob#me", + Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + Object: "http://xmlns.com/foaf/0.1/Person", + Label: "", }, err: nil, }, @@ -358,10 +358,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://xmlns.com/foaf/0.1/knows", - Object: "http://example.org/alice#me", - Provenance: "", + Subject: "http://example.org/bob#me", + Predicate: "http://xmlns.com/foaf/0.1/knows", + Object: "http://example.org/alice#me", + Label: "", }, err: nil, }, @@ -369,10 +369,10 @@ var testNTriples = []struct { message: "parse triple with IRIREF schema on literal object", input: ` "1990-07-04"^^ .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://schema.org/birthDate", - Object: `"1990-07-04"^^`, - Provenance: "", + Subject: "http://example.org/bob#me", + Predicate: "http://schema.org/birthDate", + Object: `"1990-07-04"^^`, + Label: "", }, err: nil, }, @@ -380,10 +380,10 @@ var testNTriples = []struct { message: "parse commented IRIREF in triple", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://xmlns.com/foaf/0.1/topic_interest", - Object: "http://www.wikidata.org/entity/Q12418", - Provenance: "", + Subject: "http://example.org/bob#me", + Predicate: "http://xmlns.com/foaf/0.1/topic_interest", + Object: "http://www.wikidata.org/entity/Q12418", + Label: "", }, err: nil, }, @@ -391,10 +391,10 @@ var testNTriples = []struct { message: "parse triple with literal subject", input: ` "Mona Lisa" .`, expect: &quad.Quad{ - Subject: "http://www.wikidata.org/entity/Q12418", - Predicate: "http://purl.org/dc/terms/title", - Object: "Mona Lisa", - Provenance: "", + Subject: "http://www.wikidata.org/entity/Q12418", + Predicate: "http://purl.org/dc/terms/title", + Object: "Mona Lisa", + Label: "", }, err: nil, }, @@ -402,10 +402,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts (1)", input: ` .`, expect: &quad.Quad{ - Subject: "http://www.wikidata.org/entity/Q12418", - Predicate: "http://purl.org/dc/terms/creator", - Object: "http://dbpedia.org/resource/Leonardo_da_Vinci", - Provenance: "", + Subject: "http://www.wikidata.org/entity/Q12418", + Predicate: "http://purl.org/dc/terms/creator", + Object: "http://dbpedia.org/resource/Leonardo_da_Vinci", + Label: "", }, err: nil, }, @@ -413,10 +413,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts (2)", input: ` .`, expect: &quad.Quad{ - Subject: "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619", - Predicate: "http://purl.org/dc/terms/subject", - Object: "http://www.wikidata.org/entity/Q12418", - Provenance: "", + Subject: "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619", + Predicate: "http://purl.org/dc/terms/subject", + Object: "http://www.wikidata.org/entity/Q12418", + Label: "", }, err: nil, }, @@ -426,10 +426,10 @@ var testNTriples = []struct { message: "parse commented IRIREF in quad (1)", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", - Object: "http://xmlns.com/foaf/0.1/Person", - Provenance: "http://example.org/bob", + Subject: "http://example.org/bob#me", + Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + Object: "http://xmlns.com/foaf/0.1/Person", + Label: "http://example.org/bob", }, err: nil, }, @@ -437,10 +437,10 @@ var testNTriples = []struct { message: "parse quad with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://xmlns.com/foaf/0.1/knows", - Object: "http://example.org/alice#me", - Provenance: "http://example.org/bob", + Subject: "http://example.org/bob#me", + Predicate: "http://xmlns.com/foaf/0.1/knows", + Object: "http://example.org/alice#me", + Label: "http://example.org/bob", }, err: nil, }, @@ -448,10 +448,10 @@ var testNTriples = []struct { message: "parse quad with IRIREF schema on literal object", input: ` "1990-07-04"^^ .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://schema.org/birthDate", - Object: `"1990-07-04"^^`, - Provenance: "http://example.org/bob", + Subject: "http://example.org/bob#me", + Predicate: "http://schema.org/birthDate", + Object: `"1990-07-04"^^`, + Label: "http://example.org/bob", }, err: nil, }, @@ -459,10 +459,10 @@ var testNTriples = []struct { message: "parse commented IRIREF in quad (2)", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://xmlns.com/foaf/0.1/topic_interest", - Object: "http://www.wikidata.org/entity/Q12418", - Provenance: "http://example.org/bob", + Subject: "http://example.org/bob#me", + Predicate: "http://xmlns.com/foaf/0.1/topic_interest", + Object: "http://www.wikidata.org/entity/Q12418", + Label: "http://example.org/bob", }, err: nil, }, @@ -470,10 +470,10 @@ var testNTriples = []struct { message: "parse literal object and colon qualified label in quad", input: ` "Mona Lisa" .`, expect: &quad.Quad{ - Subject: "http://www.wikidata.org/entity/Q12418", - Predicate: "http://purl.org/dc/terms/title", - Object: "Mona Lisa", - Provenance: "https://www.wikidata.org/wiki/Special:EntityData/Q12418", + Subject: "http://www.wikidata.org/entity/Q12418", + Predicate: "http://purl.org/dc/terms/title", + Object: "Mona Lisa", + Label: "https://www.wikidata.org/wiki/Special:EntityData/Q12418", }, err: nil, }, @@ -481,10 +481,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts with colon qualified label in quad (1)", input: ` .`, expect: &quad.Quad{ - Subject: "http://www.wikidata.org/entity/Q12418", - Predicate: "http://purl.org/dc/terms/creator", - Object: "http://dbpedia.org/resource/Leonardo_da_Vinci", - Provenance: "https://www.wikidata.org/wiki/Special:EntityData/Q12418", + Subject: "http://www.wikidata.org/entity/Q12418", + Predicate: "http://purl.org/dc/terms/creator", + Object: "http://dbpedia.org/resource/Leonardo_da_Vinci", + Label: "https://www.wikidata.org/wiki/Special:EntityData/Q12418", }, err: nil, }, @@ -492,10 +492,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts with colon qualified label in quad (2)", input: ` .`, expect: &quad.Quad{ - Subject: "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619", - Predicate: "http://purl.org/dc/terms/subject", - Object: "http://www.wikidata.org/entity/Q12418", - Provenance: "https://www.wikidata.org/wiki/Special:EntityData/Q12418", + Subject: "http://data.europeana.eu/item/04802/243FA8618938F4117025F17A8B813C5F9AA4D619", + Predicate: "http://purl.org/dc/terms/subject", + Object: "http://www.wikidata.org/entity/Q12418", + Label: "https://www.wikidata.org/wiki/Special:EntityData/Q12418", }, err: nil, }, @@ -503,10 +503,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts (quad section - 1)", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob", - Predicate: "http://purl.org/dc/terms/publisher", - Object: "http://example.org", - Provenance: "", + Subject: "http://example.org/bob", + Predicate: "http://purl.org/dc/terms/publisher", + Object: "http://example.org", + Label: "", }, err: nil, }, @@ -514,10 +514,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts (quad section - 2)", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob", - Predicate: "http://purl.org/dc/terms/rights", - Object: "http://creativecommons.org/licenses/by/3.0/", - Provenance: "", + Subject: "http://example.org/bob", + Predicate: "http://purl.org/dc/terms/rights", + Object: "http://creativecommons.org/licenses/by/3.0/", + Label: "", }, err: nil, }, @@ -551,10 +551,10 @@ var testNTriples = []struct { message: "parse incomplete quad (1)", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", - Object: "", - Provenance: "", + Subject: "http://example.org/bob#me", + Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + Object: "", + Label: "", }, err: quad.ErrIncomplete, }, @@ -562,10 +562,10 @@ var testNTriples = []struct { message: "parse incomplete quad (2)", input: ` .`, expect: &quad.Quad{ - Subject: "http://example.org/bob#me", - Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", - Object: "", - Provenance: "", + Subject: "http://example.org/bob#me", + Predicate: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", + Object: "", + Label: "", }, err: quad.ErrIncomplete, }, diff --git a/quad/cquads/parse.go b/quad/cquads/parse.go index 74f48be..6500fcf 100644 --- a/quad/cquads/parse.go +++ b/quad/cquads/parse.go @@ -1006,7 +1006,7 @@ tr37: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1023,7 +1023,7 @@ tr47: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1040,7 +1040,7 @@ tr60: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1079,7 +1079,7 @@ tr66: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1096,7 +1096,7 @@ tr61: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1160,7 +1160,7 @@ tr39: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1177,7 +1177,7 @@ tr49: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1265,7 +1265,7 @@ tr253: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1282,7 +1282,7 @@ tr263: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1299,7 +1299,7 @@ tr287: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1326,7 +1326,7 @@ tr293: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1343,7 +1343,7 @@ tr288: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1377,7 +1377,7 @@ tr255: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false @@ -1394,7 +1394,7 @@ tr265: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isQuoted, isEscaped) + q.Label = unEscape(data[label:p], isQuoted, isEscaped) isEscaped = false isQuoted = false diff --git a/quad/nquads/actions.rl b/quad/nquads/actions.rl index 314104b..0ba7096 100644 --- a/quad/nquads/actions.rl +++ b/quad/nquads/actions.rl @@ -63,7 +63,7 @@ if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isEscaped) + q.Label = unEscape(data[label:p], isEscaped) isEscaped = false } diff --git a/quad/nquads/nquads_test.go b/quad/nquads/nquads_test.go index 4ed6793..fc7b70a 100644 --- a/quad/nquads/nquads_test.go +++ b/quad/nquads/nquads_test.go @@ -41,10 +41,10 @@ var testNTriples = []struct { message: "parse triple with commment", input: `_:100000 . # example from 30movies`, expect: &quad.Quad{ - Subject: "_:100000", - Predicate: "", - Object: "", - Provenance: "", + Subject: "_:100000", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -53,10 +53,10 @@ var testNTriples = []struct { message: "parse triple with commment", input: `_:10011 "Tomás de Torquemada" . # example from 30movies with unicode`, expect: &quad.Quad{ - Subject: "_:10011", - Predicate: "", - Object: `"Tomás de Torquemada"`, - Provenance: "", + Subject: "_:10011", + Predicate: "", + Object: `"Tomás de Torquemada"`, + Label: "", }, err: nil, }, @@ -66,10 +66,10 @@ var testNTriples = []struct { message: "parse triple with commment", input: ` . # comments here`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -77,10 +77,10 @@ var testNTriples = []struct { message: "parse triple with blank subject node, literal object and no comment (1)", input: `_:subject1 "object1" .`, expect: &quad.Quad{ - Subject: "_:subject1", - Predicate: "", - Object: `"object1"`, - Provenance: "", + Subject: "_:subject1", + Predicate: "", + Object: `"object1"`, + Label: "", }, err: nil, }, @@ -88,10 +88,10 @@ var testNTriples = []struct { message: "parse triple with blank subject node, literal object and no comment (2)", input: `_:subject2 "object2" .`, expect: &quad.Quad{ - Subject: "_:subject2", - Predicate: "", - Object: `"object2"`, - Provenance: "", + Subject: "_:subject2", + Predicate: "", + Object: `"object2"`, + Label: "", }, err: nil, }, @@ -101,10 +101,10 @@ var testNTriples = []struct { message: "parse triple with three IRIREFs", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -114,10 +114,10 @@ var testNTriples = []struct { message: "parse triple with blank node labelled subject and object and IRIREF predicate (1)", input: `_:alice _:bob .`, expect: &quad.Quad{ - Subject: "_:alice", - Predicate: "", - Object: "_:bob", - Provenance: "", + Subject: "_:alice", + Predicate: "", + Object: "_:bob", + Label: "", }, err: nil, }, @@ -125,10 +125,10 @@ var testNTriples = []struct { message: "parse triple with blank node labelled subject and object and IRIREF predicate (2)", input: `_:bob _:alice .`, expect: &quad.Quad{ - Subject: "_:bob", - Predicate: "", - Object: "_:alice", - Provenance: "", + Subject: "_:bob", + Predicate: "", + Object: "_:alice", + Label: "", }, err: nil, }, @@ -138,10 +138,10 @@ var testNTriples = []struct { message: "parse quad with commment", input: ` . # comments here`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -149,10 +149,10 @@ var testNTriples = []struct { message: "parse quad with blank subject node, literal object, IRIREF predicate and label, and no comment (1)", input: `_:subject1 "object1" .`, expect: &quad.Quad{ - Subject: "_:subject1", - Predicate: "", - Object: `"object1"`, - Provenance: "", + Subject: "_:subject1", + Predicate: "", + Object: `"object1"`, + Label: "", }, err: nil, }, @@ -160,10 +160,10 @@ var testNTriples = []struct { message: "parse quad with blank subject node, literal object, IRIREF predicate and label, and no comment (2)", input: `_:subject2 "object2" .`, expect: &quad.Quad{ - Subject: "_:subject2", - Predicate: "", - Object: `"object2"`, - Provenance: "", + Subject: "_:subject2", + Predicate: "", + Object: `"object2"`, + Label: "", }, err: nil, }, @@ -173,10 +173,10 @@ var testNTriples = []struct { message: "parse quad with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -186,10 +186,10 @@ var testNTriples = []struct { message: "parse quad with blank node labelled subject and object and IRIREF predicate and label (1)", input: `_:alice _:bob .`, expect: &quad.Quad{ - Subject: "_:alice", - Predicate: "", - Object: "_:bob", - Provenance: "", + Subject: "_:alice", + Predicate: "", + Object: "_:bob", + Label: "", }, err: nil, }, @@ -197,10 +197,10 @@ var testNTriples = []struct { message: "parse quad with blank node labelled subject and object and IRIREF predicate and label (2)", input: `_:bob _:alice .`, expect: &quad.Quad{ - Subject: "_:bob", - Predicate: "", - Object: "_:alice", - Provenance: "", + Subject: "_:bob", + Predicate: "", + Object: "_:alice", + Label: "", }, err: nil, }, @@ -210,10 +210,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -221,10 +221,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -232,10 +232,10 @@ var testNTriples = []struct { message: "parse triple with IRIREF schema on literal object", input: ` "1990-07-04"^^ .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: `"1990-07-04"^^`, - Provenance: "", + Subject: "", + Predicate: "", + Object: `"1990-07-04"^^`, + Label: "", }, err: nil, }, @@ -243,10 +243,10 @@ var testNTriples = []struct { message: "parse commented IRIREF in triple", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -254,10 +254,10 @@ var testNTriples = []struct { message: "parse triple with literal subject", input: ` "Mona Lisa" .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: `"Mona Lisa"`, - Provenance: "", + Subject: "", + Predicate: "", + Object: `"Mona Lisa"`, + Label: "", }, err: nil, }, @@ -265,10 +265,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts (1)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -276,10 +276,10 @@ var testNTriples = []struct { message: "parse triple with all IRIREF parts (2)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -289,10 +289,10 @@ var testNTriples = []struct { message: "parse commented IRIREF in quad (1)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -300,10 +300,10 @@ var testNTriples = []struct { message: "parse quad with all IRIREF parts", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -311,10 +311,10 @@ var testNTriples = []struct { message: "parse quad with IRIREF schema on literal object", input: ` "1990-07-04"^^ .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: `"1990-07-04"^^`, - Provenance: "", + Subject: "", + Predicate: "", + Object: `"1990-07-04"^^`, + Label: "", }, err: nil, }, @@ -322,10 +322,10 @@ var testNTriples = []struct { message: "parse commented IRIREF in quad (2)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -333,10 +333,10 @@ var testNTriples = []struct { message: "parse literal object and colon qualified label in quad", input: ` "Mona Lisa" .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: `"Mona Lisa"`, - Provenance: "", + Subject: "", + Predicate: "", + Object: `"Mona Lisa"`, + Label: "", }, err: nil, }, @@ -344,10 +344,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts with colon qualified label in quad (1)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -355,10 +355,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts with colon qualified label in quad (2)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -366,10 +366,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts (quad section - 1)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -377,10 +377,10 @@ var testNTriples = []struct { message: "parse all IRIREF parts (quad section - 2)", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: nil, }, @@ -402,10 +402,10 @@ var testNTriples = []struct { message: "parse incomplete quad", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: fmt.Errorf("%v: unexpected rune '.' at 78", quad.ErrInvalid), }, @@ -413,10 +413,10 @@ var testNTriples = []struct { message: "parse incomplete quad", input: ` .`, expect: &quad.Quad{ - Subject: "", - Predicate: "", - Object: "", - Provenance: "", + Subject: "", + Predicate: "", + Object: "", + Label: "", }, err: fmt.Errorf("%v: unexpected rune '.' at 78", quad.ErrInvalid), }, diff --git a/quad/nquads/parse.go b/quad/nquads/parse.go index 10cad5a..9ec8554 100644 --- a/quad/nquads/parse.go +++ b/quad/nquads/parse.go @@ -619,7 +619,7 @@ tr96: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isEscaped) + q.Label = unEscape(data[label:p], isEscaped) isEscaped = false goto st10 @@ -660,7 +660,7 @@ tr39: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isEscaped) + q.Label = unEscape(data[label:p], isEscaped) isEscaped = false goto st88 @@ -785,7 +785,7 @@ tr38: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isEscaped) + q.Label = unEscape(data[label:p], isEscaped) isEscaped = false goto st13 @@ -1202,7 +1202,7 @@ tr55: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isEscaped) + q.Label = unEscape(data[label:p], isEscaped) isEscaped = false goto st90 @@ -2682,7 +2682,7 @@ tr97: if label < 0 { panic("unexpected parser state: label start not set") } - q.Provenance = unEscape(data[label:p], isEscaped) + q.Label = unEscape(data[label:p], isEscaped) isEscaped = false goto st92 diff --git a/quad/quad.go b/quad/quad.go index c979266..a47f7da 100644 --- a/quad/quad.go +++ b/quad/quad.go @@ -26,8 +26,8 @@ package quad // list of triples. The rest is just indexing for speed. // // Adding fields to the triple is not to be taken lightly. You'll see I mention -// provenance, but don'q as yet use it in any backing store. In general, there -// can be features that can be turned on or off for any store, but I haven'q +// label, but don't as yet use it in any backing store. In general, there +// can be features that can be turned on or off for any store, but I haven't // decided how to allow/disallow them yet. Another such example would be to add // a forward and reverse index field -- forward being "order the list of // objects pointed at by this subject with this predicate" such as first and @@ -48,10 +48,10 @@ var ( // Our triple struct, used throughout. type Quad struct { - Subject string `json:"subject"` - Predicate string `json:"predicate"` - Object string `json:"object"` - Provenance string `json:"provenance,omitempty"` + Subject string `json:"subject"` + Predicate string `json:"predicate"` + Object string `json:"object"` + Label string `json:"label,omitempty"` } // Direction specifies an edge's type. @@ -63,7 +63,7 @@ const ( Subject Predicate Object - Provenance + Label ) func (d Direction) Prefix() byte { @@ -74,7 +74,7 @@ func (d Direction) Prefix() byte { return 's' case Predicate: return 'p' - case Provenance: + case Label: return 'c' case Object: return 'o' @@ -91,8 +91,8 @@ func (d Direction) String() string { return "subject" case Predicate: return "predicate" - case Provenance: - return "provenance" + case Label: + return "label" case Object: return "object" default: @@ -110,8 +110,8 @@ func (q *Quad) Get(d Direction) string { return q.Subject case Predicate: return q.Predicate - case Provenance: - return q.Provenance + case Label: + return q.Label case Object: return q.Object default: @@ -139,11 +139,11 @@ func (q *Quad) IsValid() bool { // Prints a triple in N-Quad format. func (q *Quad) NTriple() string { - if q.Provenance == "" { + if q.Label == "" { //TODO(barakmich): Proper escaping. return fmt.Sprintf("%s %s %s .", q.Subject, q.Predicate, q.Object) } else { - return fmt.Sprintf("%s %s %s %s .", q.Subject, q.Predicate, q.Object, q.Provenance) + return fmt.Sprintf("%s %s %s %s .", q.Subject, q.Predicate, q.Object, q.Label) } } diff --git a/static/js/cayley_write.js b/static/js/cayley_write.js index 7544165..b3457f0 100644 --- a/static/js/cayley_write.js +++ b/static/js/cayley_write.js @@ -48,7 +48,7 @@ $(function() { subject: $("#subject").val(), predicate: $("#predicate").val(), object: $("#object").val(), - provenance: $("#provenance").val() + label: $("#label").val() } if (!checkTriple(triple)) { return @@ -68,7 +68,7 @@ $(function() { subject: $("#rsubject").val(), predicate: $("#rpredicate").val(), object: $("#robject").val(), - provenance: $("#rprovenance").val() + label: $("#rlabel").val() } if (!checkTriple(triple)) { return diff --git a/templates/write.html b/templates/write.html index e70144a..d93917d 100644 --- a/templates/write.html +++ b/templates/write.html @@ -45,7 +45,7 @@ - +
@@ -59,7 +59,7 @@ - +