MARMOTTA-625: merged pr, closes #16
Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/528b3412 Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/528b3412 Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/528b3412 Branch: refs/heads/MARMOTTA-584 Commit: 528b341299e7f4db79e820839f979c070cd40dc1 Parents: a165b8e Author: Sergio Fernández <[email protected]> Authored: Mon Feb 15 15:05:53 2016 +0100 Committer: Sergio Fernández <[email protected]> Committed: Mon Feb 15 15:05:53 2016 +0100 ---------------------------------------------------------------------- .../kiwi/reasoner/parser/KWRLProgramParser.jj | 26 ++++++++----- .../test/parser/KWRLRuleParserTest.java | 41 ++++++++++++++++++-- .../persistence/KWRLProgramPersistenceTest.java | 2 - 3 files changed, 54 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/marmotta/blob/528b3412/libraries/kiwi/kiwi-reasoner/src/main/javacc/org/apache/marmotta/kiwi/reasoner/parser/KWRLProgramParser.jj ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-reasoner/src/main/javacc/org/apache/marmotta/kiwi/reasoner/parser/KWRLProgramParser.jj b/libraries/kiwi/kiwi-reasoner/src/main/javacc/org/apache/marmotta/kiwi/reasoner/parser/KWRLProgramParser.jj index 67e502f..6044558 100644 --- a/libraries/kiwi/kiwi-reasoner/src/main/javacc/org/apache/marmotta/kiwi/reasoner/parser/KWRLProgramParser.jj +++ b/libraries/kiwi/kiwi-reasoner/src/main/javacc/org/apache/marmotta/kiwi/reasoner/parser/KWRLProgramParser.jj @@ -148,6 +148,12 @@ TOKEN : /* OPERATORS */ < TYPE: "^^" > } + +TOKEN : /* JIRA MARMOTTA-625 */ +{ + < LANG: "@"["a"-"z"]["a"-"z"] > +} + TOKEN : { < LEFTP: "(" > | @@ -351,19 +357,21 @@ VariableField Variable() : {Token t;} } } -//TODO language tags -LiteralField Literal() : {Token literal = null; Token type = null;} + +// Modified for MARMOTTA-625 +LiteralField Literal() : {Token literal = null; Token type = null; Token language = null;} { ( - literal = <STRLIT> (<TYPE> type = <URI>)? | "\"\"" -){ //have to remove the leading " character first + literal = <STRLIT> (language = <LANG>)? (<TYPE> type = <URI>)? | "\"\"" +){ // have to remove the surrounding quotes ane leading @ characters + if (language != null) { + return new LiteralField(resolveLiteral(literal.image.substring(1, literal.image.length()-1), + new Locale(language.image.substring(1)), null)); + } if (type != null) { - return new LiteralField(resolveLiteral(literal.image.substring(1, literal.image.length()-1), Locale.getDefault(), type.image)); + return new LiteralField(resolveLiteral(literal.image.substring(1, literal.image.length()-1), null , type.image)); } - return new LiteralField(resolveLiteral(literal.image.substring(1, literal.image.length()-1), Locale.getDefault(), null)); + return new LiteralField(resolveLiteral(literal.image.substring(1, literal.image.length()-1), null, null)); } - } - - http://git-wip-us.apache.org/repos/asf/marmotta/blob/528b3412/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/parser/KWRLRuleParserTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/parser/KWRLRuleParserTest.java b/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/parser/KWRLRuleParserTest.java index 187021e..2f1651c 100644 --- a/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/parser/KWRLRuleParserTest.java +++ b/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/parser/KWRLRuleParserTest.java @@ -18,9 +18,9 @@ package org.apache.marmotta.kiwi.reasoner.test.parser; import com.google.common.collect.ImmutableMap; +import org.apache.marmotta.kiwi.reasoner.model.program.LiteralField; import org.apache.marmotta.kiwi.reasoner.model.program.Rule; import org.apache.marmotta.kiwi.reasoner.parser.KWRLProgramParser; -import org.apache.marmotta.kiwi.test.RepositoryTest; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -35,8 +35,8 @@ import org.slf4j.LoggerFactory; /** * Test parsing of individual rules - * <p/> - * Author: Sebastian Schaffert ([email protected]) + * + * @author Sebastian Schaffert ([email protected]) */ public class KWRLRuleParserTest { @@ -48,7 +48,6 @@ public class KWRLRuleParserTest { repository.initialize(); } - @After public void shutdown() throws Exception { repository.shutDown(); @@ -92,4 +91,38 @@ public class KWRLRuleParserTest { Assert.assertTrue(r.getHead().getObject().isVariableField()); } + @Test + public void testRule3() throws Exception { + String rule = "($1 $2 $3) -> ($1 $2 \"Hello\"@en)"; + Rule r = KWRLProgramParser.parseRule(rule, ImmutableMap.of("rdfs", "http://www.w3.org/2000/01/rdf-schema#"), repository.getValueFactory()); + + Assert.assertNotNull(r); + Assert.assertEquals(1, r.getBody().size()); + Assert.assertTrue(r.getBody().get(0).getSubject().isVariableField()); + Assert.assertTrue(r.getBody().get(0).getObject().isVariableField()); + Assert.assertTrue(r.getBody().get(0).getProperty().isVariableField()); + Assert.assertTrue(r.getHead().getSubject().isVariableField()); + Assert.assertTrue(r.getHead().getProperty().isVariableField()); + Assert.assertTrue(r.getHead().getObject().isLiteralField()); + Assert.assertEquals("Hello", ((LiteralField) r.getHead().getObject()).getLiteral().getLabel()); + Assert.assertEquals("en", ((LiteralField) r.getHead().getObject()).getLiteral().getLanguage()); + } + + @Test + public void testRule4() throws Exception { + String rule = "($1 $2 $3) -> ($1 $2 \"Bonjour\"@fr)"; + Rule r = KWRLProgramParser.parseRule(rule, ImmutableMap.of("rdfs", "http://www.w3.org/2000/01/rdf-schema#"), repository.getValueFactory()); + + Assert.assertNotNull(r); + Assert.assertEquals(1, r.getBody().size()); + Assert.assertTrue(r.getBody().get(0).getSubject().isVariableField()); + Assert.assertTrue(r.getBody().get(0).getObject().isVariableField()); + Assert.assertTrue(r.getBody().get(0).getProperty().isVariableField()); + Assert.assertTrue(r.getHead().getSubject().isVariableField()); + Assert.assertTrue(r.getHead().getProperty().isVariableField()); + Assert.assertTrue(r.getHead().getObject().isLiteralField()); + Assert.assertEquals("Bonjour", ((LiteralField)r.getHead().getObject()).getLiteral().getLabel()); + Assert.assertEquals("fr", ((LiteralField) r.getHead().getObject()).getLiteral().getLanguage()); + } + } http://git-wip-us.apache.org/repos/asf/marmotta/blob/528b3412/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/persistence/KWRLProgramPersistenceTest.java ---------------------------------------------------------------------- diff --git a/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/persistence/KWRLProgramPersistenceTest.java b/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/persistence/KWRLProgramPersistenceTest.java index a24fa5e..773bed7 100644 --- a/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/persistence/KWRLProgramPersistenceTest.java +++ b/libraries/kiwi/kiwi-reasoner/src/test/java/org/apache/marmotta/kiwi/reasoner/test/persistence/KWRLProgramPersistenceTest.java @@ -63,13 +63,11 @@ public class KWRLProgramPersistenceTest { private Repository repository; private final KiWiConfiguration config; - public KWRLProgramPersistenceTest(KiWiConfiguration config) { this.config = config; } - @Before public void initDatabase() throws Exception { repository = new SailRepository(new MemoryStore());
