Skip to content

Commit c2b37fa

Browse files
committed
Merge pull request #22 from mcollina/bugfix/multipleobjects
fixed support of multiple objects for same predicate
2 parents 71c6baf + e2ac0ff commit c2b37fa

3 files changed

Lines changed: 65 additions & 9 deletions

File tree

index.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
6666
});
6767
stream.end();
6868
});
69-
};
69+
}
7070

7171
graphdb.jsonld.put = function(obj, options, callback) {
7272
if (typeof obj === 'string') {
@@ -141,8 +141,11 @@ function levelgraphJSONLD(db, jsonldOpts) {
141141
switch (type) {
142142
case TYPES.STRING:
143143
case TYPES.PLAIN:
144+
coerced['@value'] = value;
145+
break;
144146
case RDFLANGSTRING:
145147
coerced['@value'] = value;
148+
coerced['@language'] = N3Util.getLiteralLanguage(object);
146149
break;
147150
case TYPES.INTEGER:
148151
coerced['@value'] = parseInt(value, 10);
@@ -163,7 +166,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
163166
coerced = { '@value': value, '@type': type };
164167
}
165168
return coerced;
166-
};
169+
}
167170

168171
function fetchExpandedTriples(iri, memo, callback) {
169172
if (typeof memo === 'function') {
@@ -195,12 +198,12 @@ function levelgraphJSONLD(db, jsonldOpts) {
195198
object['@id'] = triple.object;
196199
} else if (N3Util.isLiteral(triple.object)) {
197200
object = getCoercedObject(triple.object);
198-
var language = N3Util.getLiteralLanguage(triple.object);
199-
if (language) {
200-
object['@language'] = language;
201-
}
202201
}
203-
acc[triple.subject][triple.predicate] = object;
202+
if(acc[triple.subject][triple.predicate]){
203+
acc[triple.subject][triple.predicate].push(object);
204+
} else {
205+
acc[triple.subject][triple.predicate] = [object];
206+
}
204207
cb(null, acc);
205208
} else {
206209
fetchExpandedTriples(triple.object, function(err, expanded) {
@@ -217,7 +220,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
217220
}
218221
}, callback);
219222
});
220-
};
223+
}
221224

222225
graphdb.jsonld.get = function(iri, context, options, callback) {
223226

test/get_spec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,32 @@ describe('jsonld.get', function() {
6464
});
6565
});
6666

67+
it('with an object with multiple objects for same predicate' ,function(done){
68+
var bbb = helper.getFixture('bigbuckbunny.json');
69+
70+
var act1 = {
71+
subject: bbb['@id'],
72+
predicate: 'http://schema.org/actor',
73+
object: 'http://example.net/act1'
74+
};
75+
76+
var act2 = {
77+
subject: bbb['@id'],
78+
predicate: 'http://schema.org/actor',
79+
object: 'http://example.net/act2'
80+
};
81+
82+
db.jsonld.put(bbb, function() {
83+
db.put([act1, act2], function() {
84+
db.jsonld.get(bbb['@id'], bbb['@context'], function(err, doc) {
85+
expect(doc['actor']).to.be.an('array');
86+
expect(doc['actor']).to.have.length(2);
87+
done();
88+
});
89+
});
90+
});
91+
});
92+
6793
describe('with an object with an array for its ["@type"]', function() {
6894
var ratatat;
6995

test/languagetags_spec.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ describe('jsonld.get language tags', function() {
7070
});
7171

7272
it('recognizes', function(done) {
73-
triple = {
73+
delete bbb.name;
74+
var triple = {
7475
subject: bbb['@id'],
7576
predicate: 'http://schema.org/name',
7677
object: '"Big Buck Bunny"@en'
@@ -86,4 +87,30 @@ describe('jsonld.get language tags', function() {
8687
});
8788
});
8889
});
90+
91+
it('supports multiple language objects', function(done) {
92+
var en = {
93+
subject: bbb['@id'],
94+
predicate: 'http://schema.org/description',
95+
object: '"Big Buck Bunny"@en'
96+
};
97+
98+
var it = {
99+
subject: bbb['@id'],
100+
predicate: 'http://schema.org/description',
101+
object: '"Grande Coniglio Coniglietto"@it'
102+
};
103+
bbb['@context'].description = { '@container': '@language' };
104+
105+
db.jsonld.put(bbb, function() {
106+
db.put([en, it], function() {
107+
db.jsonld.get(bbb['@id'], bbb['@context'], function(err, doc) {
108+
expect(doc.description.en).to.equal('Big Buck Bunny');
109+
expect(doc.description.it).to.equal('Grande Coniglio Coniglietto');
110+
done();
111+
});
112+
});
113+
});
114+
});
115+
89116
});

0 commit comments

Comments
 (0)