@@ -3,7 +3,9 @@ var jsonld = require("jsonld")
33 , uuid = require ( "uuid" )
44 , IRI = / ( f t p | h t t p | h t t p s ) : \/ \/ ( \w + : { 0 , 1 } \w * @ ) ? ( \S + ) ( : [ 0 - 9 ] + ) ? ( \/ | \/ ( [ \w # ! : . ? + = & % @ ! \- \/ ] ) ) ? / i
55 , RDFTYPE = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
6- , async = require ( "async" ) ;
6+ , async = require ( "async" )
7+ , blanksRegexp = / ^ _ : b \d + $ /
8+ , genActionStream ;
79
810function levelgraphJSONLD ( db , jsonldOpts ) {
911
@@ -36,7 +38,9 @@ function levelgraphJSONLD(db, jsonldOpts) {
3638 obj [ "@id" ] = options . base + uuid . v1 ( ) ;
3739 }
3840
39- jsonld . expand ( obj , options , function ( err , expanded ) {
41+ var blanks = { } ;
42+
43+ jsonld . toRDF ( obj , options , function ( err , triples ) {
4044
4145 var stream = graphdb . putStream ( ) ;
4246
@@ -45,48 +49,56 @@ function levelgraphJSONLD(db, jsonldOpts) {
4549 callback ( null , obj ) ;
4650 } ) ;
4751
48- var writeTriples = function ( triples ) {
49- var subject = triples [ "@id" ] ;
50- delete triples [ "@id" ] ;
51-
52- if ( ! subject ) {
53- subject = "_:" + uuid . v1 ( ) ;
54- }
55-
56- Object . keys ( triples ) . forEach ( function ( predicate ) {
57- if ( predicate === "@type" ) {
58- if ( ! triples [ predicate ] . forEach ) {
59- triples [ predicate ] = [ triples [ predicate ] ] ;
52+ triples [ "@default" ] . map ( function ( triple ) {
53+ return [ "subject" , "predicate" , "object" ] . reduce ( function ( acc , key ) {
54+ var value = triple [ key ] . value ;
55+ if ( value . match ( blanksRegexp ) ) {
56+ if ( ! blanks [ value ] ) {
57+ blanks [ value ] = "_:" + uuid . v1 ( ) ;
6058 }
61-
62- triples [ RDFTYPE ] = triples [ predicate ] ;
63- delete triples [ predicate ] ;
64- predicate = RDFTYPE ;
59+ value = blanks [ value ] ;
6560 }
61+ acc [ key ] = value ;
62+ return acc ;
63+ } , { } ) ;
64+ } ) . forEach ( function ( triple ) {
65+ stream . write ( triple ) ;
66+ } ) ;
6667
67- triples [ predicate ] . forEach ( function ( object ) {
68- var triple = {
69- subject : subject
70- , predicate : predicate
71- , object : ( typeof object === 'string' ) ? object : object [ "@id" ] || object [ "@value" ]
72- } ;
73-
74- if ( ! triple . object ) {
75- // the object should be a blank node that points
76- // to a another triple
77- writeTriples ( object ) ;
78- triple . object = object [ "@id" ] ;
79- }
68+ stream . end ( ) ;
69+ } ) ;
70+ } ;
8071
81- stream . write ( triple ) ;
82- } ) ;
83- } ) ;
8472
85- triples [ "@id" ] = subject ;
86- } ;
73+ graphdb . jsonld . del = function ( iri , options , callback ) {
74+ if ( typeof options === "function" ) {
75+ callback = options ;
76+ options = { } ;
77+ }
78+
79+ if ( typeof iri !== 'string' ) {
80+ iri = iri [ "@id" ] ;
81+ }
8782
88- expanded . forEach ( writeTriples ) ;
83+ var stream = graphdb . delStream ( ) ;
84+ stream . on ( "close" , callback ) ;
85+ stream . on ( "error" , callback ) ;
8986
87+ ( function delAllTriples ( iri , done ) {
88+ graphdb . get ( { subject : iri } , function ( err , triples ) {
89+ async . each ( triples , function ( triple , cb ) {
90+ stream . write ( triple ) ;
91+ if ( triple . object . indexOf ( "_:" ) === 0 ) {
92+ delAllTriples ( triple . object , cb ) ;
93+ } else {
94+ cb ( ) ;
95+ }
96+ } , done ) ;
97+ } ) ;
98+ } ) ( iri , function ( err ) {
99+ if ( err ) {
100+ return callback ( err ) ;
101+ }
90102 stream . end ( ) ;
91103 } ) ;
92104 } ;
@@ -156,3 +168,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
156168}
157169
158170module . exports = levelgraphJSONLD ;
171+
172+ genActionStream = function ( graphdb , type ) {
173+ return
174+ } ;
0 commit comments