From bd9f12a7a3751466937b698fc2938802ea9299bd Mon Sep 17 00:00:00 2001
From: Manish R Jain <manishrjain@gmail.com>
Date: Wed, 13 Apr 2016 16:23:39 +1000
Subject: [PATCH] Also parse _uid_ from object id.

---
 rdf/parse_test.go | 22 ++++++++++++++++++++++
 rdf/state.go      |  8 +++++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/rdf/parse_test.go b/rdf/parse_test.go
index fcba4a7b..77e18c5b 100644
--- a/rdf/parse_test.go
+++ b/rdf/parse_test.go
@@ -53,6 +53,24 @@ var testNQuads = []struct {
 			ObjectValue: nil,
 		},
 	},
+	{
+		input: `<some_subject_id> <predicate> _uid_:0x01 .`,
+		nq: NQuad{
+			Subject:     "some_subject_id",
+			Predicate:   "predicate",
+			ObjectId:    "_uid_:0x01",
+			ObjectValue: nil,
+		},
+	},
+	{
+		input: `_uid_:0x01 <predicate> _uid_:0x02 .`,
+		nq: NQuad{
+			Subject:     "_uid_:0x01",
+			Predicate:   "predicate",
+			ObjectId:    "_uid_:0x02",
+			ObjectValue: nil,
+		},
+	},
 	{
 		input: `_:alice <follows> _:bob0 .`,
 		nq: NQuad{
@@ -119,6 +137,10 @@ var testNQuads = []struct {
 		input:  "_uid_: 0x01 <knows> <something> .",
 		hasErr: true,
 	},
+	{
+		input:  "<alice> <knows> _uid_: 0x01 .",
+		hasErr: true,
+	},
 	{
 		input:  `_:alice "knows" stuff .`,
 		hasErr: true,
diff --git a/rdf/state.go b/rdf/state.go
index 78b3a7e0..737d9018 100644
--- a/rdf/state.go
+++ b/rdf/state.go
@@ -267,7 +267,13 @@ func lexObject(l *lex.Lexer) lex.StateFn {
 	}
 	if r == '_' {
 		l.Depth += 1
-		return lexBlankNode(l, itemObject, lexText)
+		r = l.Next()
+		if r == 'u' {
+			return lexUidNode(l, itemObject, lexText)
+
+		} else if r == ':' {
+			return lexBlankNode(l, itemObject, lexText)
+		}
 	}
 	if r == '"' {
 		l.Ignore()
-- 
GitLab