Skip to content
This repository has been archived by the owner on Feb 5, 2020. It is now read-only.

Commit

Permalink
Complete LANGMATCHES implementation.
Browse files Browse the repository at this point in the history
  • Loading branch information
RubenVerborgh committed Dec 21, 2016
1 parent d0f90ff commit 09c829d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
9 changes: 7 additions & 2 deletions lib/util/SparqlExpressionEvaluator.js
Expand Up @@ -135,8 +135,13 @@ operators = {
'lang': function (a) {
return '"' + N3Util.getLiteralLanguage(a).toLowerCase() + '"';
},
'langmatches': function (a, b) {
return a.toLowerCase() === b.toLowerCase();
'langmatches': function (langTag, langRange) {
// Implements https://tools.ietf.org/html/rfc4647#section-3.3.1
langTag = langTag.toLowerCase();
langRange = langRange.toLowerCase();
return langTag === langRange ||
(langRange = literalValue(langRange)) === '*' ||
langTag.substr(1, langRange.length + 1) === langRange + '-';
},
'contains': function (string, substring) {
substring = literalValue(substring);
Expand Down
15 changes: 12 additions & 3 deletions test/util/SparqlExpressionEvaluator-test.js
Expand Up @@ -343,11 +343,20 @@ describe('SparqlExpressionEvaluator', function () {
var evaluator = SparqlExpressionEvaluator({
type: 'operation',
operator: 'langmatches',
args: ['?l', '"EN"'],
args: ['"de-DE-1996"', '?l'],
});

it('should return true if the language matches', function () {
evaluator({ '?l': '"en"' }).should.equal(TRUE);
it('should return true if the language is equal', function () {
evaluator({ '?l': '"de-de-1996"' }).should.equal(TRUE);
});

it('should return true if the language has the same prefix', function () {
evaluator({ '?l': '"de"' }).should.equal(TRUE);
evaluator({ '?l': '"de-DE"' }).should.equal(TRUE);
});

it('should return true on *', function () {
evaluator({ '?l': '"de-de-1996"' }).should.equal(TRUE);
});

it("should return false if the language doesn't match", function () {
Expand Down

0 comments on commit 09c829d

Please sign in to comment.