Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
});
stream.end();
});
};
}

graphdb.jsonld.put = function(obj, options, callback) {
if (typeof obj === 'string') {
Expand Down Expand Up @@ -141,8 +141,11 @@ function levelgraphJSONLD(db, jsonldOpts) {
switch (type) {
case TYPES.STRING:
case TYPES.PLAIN:
coerced['@value'] = value;
break;
case RDFLANGSTRING:
coerced['@value'] = value;
coerced['@language'] = N3Util.getLiteralLanguage(object);
break;
case TYPES.INTEGER:
coerced['@value'] = parseInt(value, 10);
Expand All @@ -163,7 +166,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
coerced = { '@value': value, '@type': type };
}
return coerced;
};
}

function fetchExpandedTriples(iri, memo, callback) {
if (typeof memo === 'function') {
Expand Down Expand Up @@ -195,12 +198,12 @@ function levelgraphJSONLD(db, jsonldOpts) {
object['@id'] = triple.object;
} else if (N3Util.isLiteral(triple.object)) {
object = getCoercedObject(triple.object);
var language = N3Util.getLiteralLanguage(triple.object);
if (language) {
object['@language'] = language;
}
}
acc[triple.subject][triple.predicate] = object;
if(acc[triple.subject][triple.predicate]){
acc[triple.subject][triple.predicate].push(object);
} else {
acc[triple.subject][triple.predicate] = [object];
}
cb(null, acc);
} else {
fetchExpandedTriples(triple.object, function(err, expanded) {
Expand All @@ -217,7 +220,7 @@ function levelgraphJSONLD(db, jsonldOpts) {
}
}, callback);
});
};
}

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

Expand Down
26 changes: 26 additions & 0 deletions test/get_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,32 @@ describe('jsonld.get', function() {
});
});

it('with an object with multiple objects for same predicate' ,function(done){
var bbb = helper.getFixture('bigbuckbunny.json');

var act1 = {
subject: bbb['@id'],
predicate: 'http://schema.org/actor',
object: 'http://example.net/act1'
};

var act2 = {
subject: bbb['@id'],
predicate: 'http://schema.org/actor',
object: 'http://example.net/act2'
};

db.jsonld.put(bbb, function() {
db.put([act1, act2], function() {
db.jsonld.get(bbb['@id'], bbb['@context'], function(err, doc) {
expect(doc['actor']).to.be.an('array');
expect(doc['actor']).to.have.length(2);
done();
});
});
});
});

describe('with an object with an array for its ["@type"]', function() {
var ratatat;

Expand Down
29 changes: 28 additions & 1 deletion test/languagetags_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ describe('jsonld.get language tags', function() {
});

it('recognizes', function(done) {
triple = {
delete bbb.name;
var triple = {
subject: bbb['@id'],
predicate: 'http://schema.org/name',
object: '"Big Buck Bunny"@en'
Expand All @@ -86,4 +87,30 @@ describe('jsonld.get language tags', function() {
});
});
});

it('supports multiple language objects', function(done) {
var en = {
subject: bbb['@id'],
predicate: 'http://schema.org/description',
object: '"Big Buck Bunny"@en'
};

var it = {
subject: bbb['@id'],
predicate: 'http://schema.org/description',
object: '"Grande Coniglio Coniglietto"@it'
};
bbb['@context'].description = { '@container': '@language' };

db.jsonld.put(bbb, function() {
db.put([en, it], function() {
db.jsonld.get(bbb['@id'], bbb['@context'], function(err, doc) {
expect(doc.description.en).to.equal('Big Buck Bunny');
expect(doc.description.it).to.equal('Grande Coniglio Coniglietto');
done();
});
});
});
});

});