diff service/rfid_pn532/rdf_nodes.nim @ 1310:68e172d9791e

add missing files for the record Ignore-this: 8541c95ef1644cf85b311259602d2892 darcs-hash:1e575d63deb747c9c320daa32f27f0ce93621afb
author drewp <drewp@bigasterisk.com>
date Sun, 21 Apr 2019 03:28:21 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/rfid_pn532/rdf_nodes.nim	Sun Apr 21 03:28:21 2019 -0700
@@ -0,0 +1,86 @@
+import options
+import hashes
+import strformat
+import json
+
+# consider https://nim-lang.org/docs/uri.html
+
+type
+  RdfNode* = ref object of RootObj
+  Uri* = ref object of RdfNode
+    s2: string
+  Literal* = ref object of RdfNode
+    value: string
+    dataType: Option[Uri]
+
+proc initUri*(s: string): Uri =
+  new result
+  result.s2 = s
+
+proc cmpUri*(x, y: Uri): int =
+  system.cmp(x.s2, y.s2)
+  
+proc `$`*(self: Uri): string =
+  return self.s2
+
+method toNt*(self: RdfNode): string {.base,gcsafe.} =
+  "<<rdfnode>>"
+
+method toNt*(self: Uri): string =
+  "<" & self.s2 & ">"
+
+proc hash*(x: RdfNode): Hash =
+  hash(0)
+  
+func hash*(x: Uri): Hash {.inline.} =
+  hash(x.s2)
+  
+#proc `==`*(x: Uri, y: Literal): bool = false
+#proc `==`*(x: Literal, y: Uri): bool = false
+#proc `==`*(x: RdfNode, y: RdfNode): bool =
+#  echo "rdfnode comp"
+#  true
+
+  
+proc initLiteral*(s: string): Literal =
+  new result
+  result.value = s
+  result.dataType = none(Uri)
+
+proc initLiteral*(s: cstring): Literal =
+  new result
+  result.value = $s
+  result.dataType = none(Uri)
+
+proc initLiteral*(s: string, dataType: Uri): Literal =
+  new result
+  result.value = s
+  result.dataType = some(dataType)
+
+# proc initLiteral*(x: int): Literal =
+# proc initLiteral*(x: float): Literal =
+# ...
+
+proc hash*(x: Literal): Hash =
+  hash(x.value) # maybe datatype
+
+method toNt*(self: Literal): string =
+  var dtPart: string = ""
+  if isSome(self.dataType):
+    let dt: Uri = self.dataType.get()
+    dtPart = "^^" & dt.toNt()
+
+  return "\"" & self.value & "\"" & dtPart
+
+
+method toJsonLdObject*(self: RdfNode): JsonNode {.base,gcsafe.} =
+  %* {"some": "rdfnode"}
+
+method toJsonLdObject*(self: Uri): JsonNode =
+  %* {"@id": self.s2}
+
+method toJsonLdObject*(self: Literal): JsonNode =
+  %* {"@value": $self.value}
+  # and datatype and lang
+
+