Mercurial > code > home > repos > homeauto
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 + +