Skip to content

Commit 8c2795c

Browse files
committed
First checkin
1 parent 1265a83 commit 8c2795c

File tree

10 files changed

+418
-0
lines changed

10 files changed

+418
-0
lines changed

.gitignore

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Compiled Object files, Static and Dynamic libs (Shared Objects)
2+
*.o
3+
*.a
4+
*.so
5+
.vscode
6+
*.dot
7+
8+
# fresh
9+
tmp
10+
*.retry
11+
/dist
12+
.#*
13+
*~
14+
layers/layers
15+
*.sh
16+
__debug_bin
17+
web/public/
18+
layers/layers.darwin-amd64
19+
layers/layers.linux-amd64
20+
layers/layers.windows-amd64
21+
**/__pycache__/
22+
23+
# ui
24+
/ui/node_modules
25+
/ui/.parcel-cache/
26+
/ui/dist/
27+
.env
28+
.DS_Store
29+
coverage/
30+
.vscode/

go.mod

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module github.com/cloudprivacylabs/json2rdf
2+
3+
go 1.19
4+
5+
require (
6+
github.com/cloudprivacylabs/lpg v1.0.14
7+
github.com/cloudprivacylabs/lsa v1.0.0-beta22
8+
github.com/piprate/json-gold v0.5.0
9+
)
10+
11+
require (
12+
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210803070921-b358b509191a // indirect
13+
github.com/cloudprivacylabs/opencypher v1.0.0-beta-14 // indirect
14+
github.com/emirpasic/gods v1.18.1 // indirect
15+
github.com/nleeper/goment v1.4.4 // indirect
16+
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
17+
github.com/tkuchiki/go-timezone v0.2.0 // indirect
18+
golang.org/x/text v0.3.7 // indirect
19+
)

go.sum

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210803070921-b358b509191a h1:6tPeghyQyDji+Q+jYDjpHNlLz/aexx/Cvk1ao92Nfbg=
2+
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210803070921-b358b509191a/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
3+
github.com/cloudprivacylabs/lpg v1.0.14 h1:IRH3sS4NYiZ6ZpFOZRtnjka9lpSMEgkVsVCJqo+JJzw=
4+
github.com/cloudprivacylabs/lpg v1.0.14/go.mod h1:3bLpI1OIk3h/ZVfGhq3sdULexmVbd7qANVhVSYbvCe8=
5+
github.com/cloudprivacylabs/lsa v1.0.0-beta22 h1:VGmV2O4WPZKxtp/uS2538rJb/vrwlju8kaLBXLLpTmE=
6+
github.com/cloudprivacylabs/lsa v1.0.0-beta22/go.mod h1:BroDZX7Wti7JvC865fnlVAa5ppbVxRPQvMT/EyDj/ek=
7+
github.com/cloudprivacylabs/opencypher v1.0.0-beta-14 h1:pL7EiYbYXVIgEWKFO8ZpUTf52x1I1dH9MFxKHOJrqTg=
8+
github.com/cloudprivacylabs/opencypher v1.0.0-beta-14/go.mod h1:jyw1h7FhxGETpVedm/EEvi5nBwl8FrEaSLpCZkn8H+4=
9+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
11+
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
12+
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
13+
github.com/nleeper/goment v1.4.4 h1:GlMTpxvhueljArSunzYjN9Ri4SOmpn0Vh2hg2z/IIl8=
14+
github.com/nleeper/goment v1.4.4/go.mod h1:zDl5bAyDhqxwQKAvkSXMRLOdCowrdZz53ofRJc4VhTo=
15+
github.com/piprate/json-gold v0.5.0 h1:RmGh1PYboCFcchVFuh2pbSWAZy4XJaqTMU4KQYsApbM=
16+
github.com/piprate/json-gold v0.5.0/go.mod h1:WZ501QQMbZZ+3pXFPhQKzNwS1+jls0oqov3uQ2WasLs=
17+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
18+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
19+
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU=
20+
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
21+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
22+
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
23+
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
24+
github.com/tkuchiki/go-timezone v0.2.0 h1:yyZVHtQRVZ+wvlte5HXvSpBkR0dPYnPEIgq9qqAqltk=
25+
github.com/tkuchiki/go-timezone v0.2.0/go.mod h1:b1Ean9v2UXtxSq4TZF0i/TU9NuoWa9hOzOKoGCV2zqY=
26+
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
27+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
28+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
29+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
30+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

graph.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"nodes":[{"n":2,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"1","https://lschema.org/attributeName":"@id","https://lschema.org/nodeId":"http://example.org/root.@id","https://lschema.org/value":"http://linkedin.com/jane-doe"}},{"n":3,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"2","https://lschema.org/attributeName":"email","https://lschema.org/nodeId":"http://example.org/root.email","https://lschema.org/schemaNodeId":"http://schema.org/Person/email","https://lschema.org/validation/json/format":"email","https://lschema.org/value":"[email protected]","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/email"}},{"n":6,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"5","https://lschema.org/attributeName":"birthPlace","https://lschema.org/nodeId":"http://example.org/root.birthPlace","https://lschema.org/schemaNodeId":"http://schema.org/Person/birthPlace","https://lschema.org/value":"Philadelphia, PA","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/birthPlace"}},{"n":11,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"0","https://lschema.org/attributeName":"@type","https://lschema.org/nodeId":"http://example.org/root.address.@type","https://lschema.org/value":"PostalAddress"}},{"n":18,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"1","https://lschema.org/nodeId":"http://example.org/root.colleague.1","https://lschema.org/schemaNodeId":"http://schema.org/Person/colleague/*","https://lschema.org/value":"http://www.example.com/JameColleague.html","https://lschema.org/valueType":"string"}},{"n":22,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"2","https://lschema.org/nodeId":"http://example.org/root.sameAs.2","https://lschema.org/schemaNodeId":"http://schema.org/Person/sameAs/*","https://lschema.org/validation/json/format":"uri","https://lschema.org/value":"http://twitter.com/","https://lschema.org/valueType":"string"}},{"n":0,"labels":["https://lschema.org/DocumentNode","http://schema.org/Person","https://lschema.org/Object"],"properties":{"https://lschema.org/attributeIndex":"0","https://lschema.org/entitySchema":"http://schema.org/Person","https://lschema.org/nodeId":"http://example.org/root","https://lschema.org/provenance/source":"person-sample.json","https://lschema.org/schemaNodeId":"http://schema.org/Person","rdfNode":"http://schema.org/Person"},"edges":[{"to":1,"label":"https://lschema.org/has"},{"to":2,"label":"https://lschema.org/has"},{"to":3,"label":"https://lschema.org/has"},{"to":4,"label":"https://lschema.org/has"},{"to":5,"label":"https://lschema.org/has"},{"to":6,"label":"https://lschema.org/has"},{"to":7,"label":"https://lschema.org/has"},{"to":8,"label":"https://lschema.org/has"},{"to":9,"label":"https://lschema.org/has"},{"to":10,"label":"https://lschema.org/has"},{"to":16,"label":"https://lschema.org/has"},{"to":19,"label":"https://lschema.org/has"}]},{"n":1,"labels":["https://lschema.org/Value","https://lschema.org/DocumentNode"],"properties":{"https://lschema.org/attributeIndex":"0","https://lschema.org/attributeName":"@type","https://lschema.org/nodeId":"http://example.org/root.@type","https://lschema.org/value":"Person"}},{"n":24,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"4","https://lschema.org/nodeId":"http://example.org/root.sameAs.4","https://lschema.org/schemaNodeId":"http://schema.org/Person/sameAs/*","https://lschema.org/validation/json/format":"uri","https://lschema.org/value":"https://plus.google.com/","https://lschema.org/valueType":"string"}},{"n":12,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"1","https://lschema.org/attributeName":"addressLocality","https://lschema.org/nodeId":"http://example.org/root.address.addressLocality","https://lschema.org/schemaNodeId":"http://schema.org/PostalAddress/addressLocality","https://lschema.org/value":"Colorado Springs","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/addressLocality"}},{"n":20,"labels":["https://lschema.org/Value","https://lschema.org/DocumentNode"],"properties":{"https://lschema.org/attributeIndex":"0","https://lschema.org/nodeId":"http://example.org/root.sameAs.0","https://lschema.org/schemaNodeId":"http://schema.org/Person/sameAs/*","https://lschema.org/validation/json/format":"uri","https://lschema.org/value":"https://www.facebook.com/","https://lschema.org/valueType":"string"}},{"n":5,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"4","https://lschema.org/attributeName":"alumniOf","https://lschema.org/nodeId":"http://example.org/root.alumniOf","https://lschema.org/schemaNodeId":"http://schema.org/Person/alumniOf","https://lschema.org/value":"Dartmouth","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/alumniOf"}},{"n":9,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"8","https://lschema.org/attributeName":"gender","https://lschema.org/nodeId":"http://example.org/root.gender","https://lschema.org/schemaNodeId":"http://schema.org/Person/gender","https://lschema.org/value":"female","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/gender"}},{"n":19,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Array"],"properties":{"https://lschema.org/attributeIndex":"11","https://lschema.org/attributeName":"sameAs","https://lschema.org/nodeId":"http://example.org/root.sameAs","https://lschema.org/schemaNodeId":"http://schema.org/Person/sameAs","rdfPredicate":"http://schema.org/sameAs"},"edges":[{"to":20,"label":"https://lschema.org/has"},{"to":21,"label":"https://lschema.org/has"},{"to":22,"label":"https://lschema.org/has"},{"to":23,"label":"https://lschema.org/has"},{"to":24,"label":"https://lschema.org/has"}]},{"n":21,"labels":["https://lschema.org/Value","https://lschema.org/DocumentNode"],"properties":{"https://lschema.org/attributeIndex":"1","https://lschema.org/nodeId":"http://example.org/root.sameAs.1","https://lschema.org/schemaNodeId":"http://schema.org/Person/sameAs/*","https://lschema.org/validation/json/format":"uri","https://lschema.org/value":"https://www.linkedin.com/","https://lschema.org/valueType":"string"}},{"n":15,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"4","https://lschema.org/attributeName":"streetAddress","https://lschema.org/nodeId":"http://example.org/root.address.streetAddress","https://lschema.org/schemaNodeId":"http://schema.org/PostalAddress/streetAddress","https://lschema.org/value":"100 Main Street","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/streetAddress"}},{"n":16,"labels":["https://lschema.org/Array","https://lschema.org/DocumentNode"],"properties":{"https://lschema.org/attributeIndex":"10","https://lschema.org/attributeName":"colleague","https://lschema.org/nodeId":"http://example.org/root.colleague","https://lschema.org/schemaNodeId":"http://schema.org/Person/colleague","rdfPredicate":"http://schema.org/colleague"},"edges":[{"to":17,"label":"https://lschema.org/has"},{"to":18,"label":"https://lschema.org/has"}]},{"n":8,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"7","https://lschema.org/attributeName":"height","https://lschema.org/nodeId":"http://example.org/root.height","https://lschema.org/schemaNodeId":"http://schema.org/Person/height","https://lschema.org/value":"72 inches","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/height"}},{"n":10,"labels":["https://lschema.org/Object","https://lschema.org/DocumentNode","http://schema.org/PostalAddress"],"properties":{"https://lschema.org/Reference/ref":"http://schema.org/PostalAddress","https://lschema.org/attributeIndex":"9","https://lschema.org/attributeName":"address","https://lschema.org/entitySchema":"http://schema.org/PostalAddress","https://lschema.org/nodeId":"http://example.org/root.address","https://lschema.org/provenance/source":"person-sample.json","https://lschema.org/schemaNodeId":"http://schema.org/Person/address","rdfNode":"http://schema.org/PostalAddress","rdfPredicate":"http://schema.org/address"},"edges":[{"to":11,"label":"https://lschema.org/has"},{"to":12,"label":"https://lschema.org/has"},{"to":13,"label":"https://lschema.org/has"},{"to":14,"label":"https://lschema.org/has"},{"to":15,"label":"https://lschema.org/has"}]},{"n":13,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"2","https://lschema.org/attributeName":"addressRegion","https://lschema.org/nodeId":"http://example.org/root.address.addressRegion","https://lschema.org/schemaNodeId":"http://schema.org/PostalAddress/addressRegion","https://lschema.org/value":"CO","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/addressRegion"}},{"n":14,"labels":["https://lschema.org/Value","https://lschema.org/DocumentNode"],"properties":{"https://lschema.org/attributeIndex":"3","https://lschema.org/attributeName":"postalCode","https://lschema.org/nodeId":"http://example.org/root.address.postalCode","https://lschema.org/schemaNodeId":"http://schema.org/PostalAddress/postalCode","https://lschema.org/value":"80840","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/postalCode"}},{"n":17,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"0","https://lschema.org/nodeId":"http://example.org/root.colleague.0","https://lschema.org/schemaNodeId":"http://schema.org/Person/colleague/*","https://lschema.org/value":"http://www.example.com/JohnColleague.html","https://lschema.org/valueType":"string"}},{"n":23,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"3","https://lschema.org/nodeId":"http://example.org/root.sameAs.3","https://lschema.org/schemaNodeId":"http://schema.org/Person/sameAs/*","https://lschema.org/validation/json/format":"uri","https://lschema.org/value":"http://instagram.com/","https://lschema.org/valueType":"string"}},{"n":4,"labels":["https://lschema.org/DocumentNode","https://lschema.org/Value"],"properties":{"https://lschema.org/attributeIndex":"3","https://lschema.org/attributeName":"name","https://lschema.org/nodeId":"http://example.org/root.name","https://lschema.org/schemaNodeId":"http://schema.org/Person/name","https://lschema.org/value":"Jane Doe","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/name"}},{"n":7,"labels":["https://lschema.org/Value","https://lschema.org/DocumentNode"],"properties":{"https://lschema.org/attributeIndex":"6","https://lschema.org/attributeName":"birthDate","https://lschema.org/nodeId":"http://example.org/root.birthDate","https://lschema.org/schemaNodeId":"http://schema.org/Person/birthDate","https://lschema.org/validation/json/format":"date","https://lschema.org/value":"1979-10-12","https://lschema.org/valueType":"string","rdfPredicate":"http://schema.org/birthDate","rdfType":"http://schema.org/Date"}}]}

graph2rdf.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/cloudprivacylabs/lpg"
7+
"github.com/cloudprivacylabs/lsa/pkg/ls"
8+
"github.com/piprate/json-gold/ld"
9+
)
10+
11+
const RDFTypeTerm = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
12+
13+
// Node has a type if the node has a nonrecognized label
14+
func getNodeType(node *lpg.Node) string {
15+
t := ""
16+
for x := range node.GetLabels().M {
17+
if x == ls.DocumentNodeTerm {
18+
continue
19+
}
20+
if ls.IsAttributeType(x) {
21+
continue
22+
}
23+
if t != "" {
24+
return ""
25+
}
26+
t = x
27+
}
28+
return t
29+
}
30+
31+
func getNodeID(node *lpg.Node) string {
32+
for edges := node.GetEdges(lpg.OutgoingEdge); edges.Next(); {
33+
next := edges.Edge().GetTo()
34+
if id := ls.AsPropertyValue(next.GetProperty("rdfId")).AsString(); id == "true" {
35+
v, _ := ls.GetRawNodeValue(next)
36+
return v
37+
}
38+
}
39+
return ""
40+
}
41+
42+
func getFromNode(node *lpg.Node) *lpg.Node {
43+
nodes := lpg.SourceNodes(node.GetEdges(lpg.IncomingEdge))
44+
if len(nodes) == 1 {
45+
return nodes[0]
46+
}
47+
return nil
48+
}
49+
50+
func Graph2RDF(input *lpg.Graph) ([]*ld.Quad, error) {
51+
quads := make([]*ld.Quad, 0)
52+
nodeMap := make(map[*lpg.Node]ld.Node)
53+
blank := 0
54+
nextBlank := func() string {
55+
ret := fmt.Sprintf("_:b%d", blank)
56+
blank++
57+
return ret
58+
}
59+
for nodes := input.GetNodes(); nodes.Next(); {
60+
node := nodes.Node()
61+
if rdfNode := ls.AsPropertyValue(node.GetProperty("rdfNode")).AsString(); rdfNode != "" {
62+
id := getNodeID(node)
63+
var idNode ld.Node
64+
if id == "" {
65+
idNode = ld.NewBlankNode(nextBlank())
66+
} else {
67+
idNode = ld.NewIRI(id)
68+
}
69+
t := getNodeType(node)
70+
if t != "" {
71+
quads = append(quads, ld.NewQuad(idNode, ld.NewIRI(RDFTypeTerm), ld.NewIRI(rdfNode), ""))
72+
}
73+
nodeMap[node] = idNode
74+
}
75+
}
76+
for nodes := input.GetNodes(); nodes.Next(); {
77+
node := nodes.Node()
78+
if pred := ls.AsPropertyValue(node.GetProperty("rdfPredicate")).AsString(); pred != "" {
79+
if existing, ok := nodeMap[node]; ok {
80+
src := getFromNode(node)
81+
if src != nil {
82+
source := nodeMap[src]
83+
if source == nil {
84+
return nil, fmt.Errorf("Cannot find source node: %v", node)
85+
}
86+
quads = append(quads, ld.NewQuad(source, ld.NewIRI(pred), existing, ""))
87+
continue
88+
}
89+
}
90+
val, ok := ls.GetRawNodeValue(node)
91+
if ok {
92+
valueType := ls.AsPropertyValue(node.GetProperty("rdfType")).AsString()
93+
lang := ls.AsPropertyValue(node.GetProperty("rdfLanguage")).AsString()
94+
from := getFromNode(node)
95+
if from == nil {
96+
return nil, fmt.Errorf("Cannot find source node: %v", node)
97+
}
98+
id, ok := nodeMap[from]
99+
if !ok {
100+
return nil, fmt.Errorf("Source node does not have id: %v", from)
101+
}
102+
quads = append(quads, ld.NewQuad(id, ld.NewIRI(pred), ld.NewLiteral(val, valueType, lang), ""))
103+
}
104+
}
105+
}
106+
return quads, nil
107+
}

main.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"os"
6+
7+
"github.com/cloudprivacylabs/lsa/pkg/ls"
8+
"github.com/piprate/json-gold/ld"
9+
)
10+
11+
func main() {
12+
dec := json.NewDecoder(os.Stdin)
13+
g := ls.NewDocumentGraph()
14+
m := ls.JSONMarshaler{}
15+
if err := m.Decode(g, dec); err != nil {
16+
panic(err)
17+
}
18+
quads, err := Graph2RDF(g)
19+
if err != nil {
20+
panic(err)
21+
}
22+
serializer := ld.NQuadRDFSerializer{}
23+
dataset := ld.NewRDFDataset()
24+
dataset.Graphs["@default"] = quads
25+
26+
serializer.SerializeTo(os.Stdout, dataset)
27+
}

person-sample.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"@type": "Person",
3+
"@id": "http://linkedin.com/jane-doe",
4+
"address": {
5+
"@type": "PostalAddress",
6+
"addressLocality": "Colorado Springs",
7+
"addressRegion": "CO",
8+
"postalCode": "80840",
9+
"streetAddress": "100 Main Street"
10+
},
11+
"colleague": [
12+
"http://www.example.com/JohnColleague.html",
13+
"http://www.example.com/JameColleague.html"
14+
],
15+
"email": "[email protected]",
16+
"name": "Jane Doe",
17+
"alumniOf": "Dartmouth",
18+
"birthPlace": "Philadelphia, PA",
19+
"birthDate": "1979-10-12",
20+
"height": "72 inches",
21+
"gender": "female",
22+
"sameAs" : [ "https://www.facebook.com/",
23+
"https://www.linkedin.com/",
24+
"http://twitter.com/",
25+
"http://instagram.com/",
26+
"https://plus.google.com/"]
27+
}

0 commit comments

Comments
 (0)