You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@any23.apache.org by mo...@apache.org on 2012/05/21 17:22:15 UTC
svn commit: r1341067 - in /incubator/any23/trunk/core/src:
main/java/org/apache/any23/io/nquads/NQuadsParser.java
test/java/org/apache/any23/io/nquads/NQuadsParserTest.java
test/resources/application/nquads/test1.nq
Author: mostarda
Date: Mon May 21 15:22:15 2012
New Revision: 1341067
URL: http://svn.apache.org/viewvc?rev=1341067&view=rev
Log:
Major improvement in NQuadsParser, added support for optional context. Done NQuadsParserTest refactorings. This commit is related to issue #ANY23-90.
Modified:
incubator/any23/trunk/core/src/main/java/org/apache/any23/io/nquads/NQuadsParser.java
incubator/any23/trunk/core/src/test/java/org/apache/any23/io/nquads/NQuadsParserTest.java
incubator/any23/trunk/core/src/test/resources/application/nquads/test1.nq
Modified: incubator/any23/trunk/core/src/main/java/org/apache/any23/io/nquads/NQuadsParser.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/core/src/main/java/org/apache/any23/io/nquads/NQuadsParser.java?rev=1341067&r1=1341066&r2=1341067&view=diff
==============================================================================
--- incubator/any23/trunk/core/src/main/java/org/apache/any23/io/nquads/NQuadsParser.java (original)
+++ incubator/any23/trunk/core/src/main/java/org/apache/any23/io/nquads/NQuadsParser.java Mon May 21 15:22:15 2012
@@ -253,7 +253,7 @@ public class NQuadsParser extends RDFPar
final Resource sub;
final URI pred;
final Value obj;
- final URI graph;
+ final URI context;
try {
sub = parseSubject(br);
consumeSpaces(br);
@@ -261,11 +261,9 @@ public class NQuadsParser extends RDFPar
consumeSpaces(br);
obj = parseObject(br);
consumeSpaces(br);
- graph = parseGraph(br);
- consumeSpaces(br);
- parseDot(br);
+ context = parseContextAndOrDot(br);
} catch (EOS eos) {
- reportFatalError("Unexpected end of line.", row, col);
+ reportFatalError("Unexpected end of stream.", row, col);
throw new IllegalStateException();
} catch (Exception e) {
if(super.stopAtFirstError()) {
@@ -280,7 +278,10 @@ public class NQuadsParser extends RDFPar
}
}
- notifyStatement(sub, pred, obj, graph);
+ assert sub != null : "Subject cannot be null.";
+ assert pred != null : "Predicate cannot be null.";
+ assert obj != null : "Object cannot be null.";
+ notifyStatement(sub, pred, obj, context);
if(!consumeSpacesAndNotEOS(br)) {
return false;
@@ -350,13 +351,13 @@ public class NQuadsParser extends RDFPar
* @param sub
* @param pred
* @param obj
- * @param graph
+ * @param context
* @throws RDFParseException
* @throws RDFHandlerException
*/
- private void notifyStatement(Resource sub, URI pred, Value obj, URI graph)
+ private void notifyStatement(Resource sub, URI pred, Value obj, URI context)
throws RDFParseException, RDFHandlerException {
- Statement statement = createStatement(sub, pred, obj, graph);
+ Statement statement = super.createStatement(sub, pred, obj, context);
if (rdfHandler != null) {
try {
rdfHandler.handleStatement(statement);
@@ -424,9 +425,9 @@ public class NQuadsParser extends RDFPar
String uriStr = NTriplesUtil.unescapeString( sb.toString() );
URI uri;
if(uriStr.charAt(0) == '#') {
- uri = resolveURI(uriStr);
+ uri = super.resolveURI(uriStr);
} else {
- uri = createURI(uriStr);
+ uri = super.createURI(uriStr);
}
return uri;
} catch (RDFParseException rdfpe) {
@@ -704,15 +705,26 @@ public class NQuadsParser extends RDFPar
}
/**
- * Parses the graph URI.
+ * Parses the context if any.
*
* @param br
- * @return the corresponding URI object.
+ * @return the context URI or null if not found.
* @throws IOException
* @throws RDFParseException
*/
- private URI parseGraph(BufferedReader br) throws IOException, RDFParseException {
- return parseURI(br);
+ private URI parseContextAndOrDot(BufferedReader br) throws IOException, RDFParseException {
+ mark(br);
+ final char c = readChar(br);
+ reset(br);
+ if(c == '<') {
+ final URI context = parseURI(br);
+ consumeSpaces(br);
+ parseDot(br);
+ return context;
+ } else {
+ parseDot(br);
+ return null;
+ }
}
/**
Modified: incubator/any23/trunk/core/src/test/java/org/apache/any23/io/nquads/NQuadsParserTest.java
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/core/src/test/java/org/apache/any23/io/nquads/NQuadsParserTest.java?rev=1341067&r1=1341066&r2=1341067&view=diff
==============================================================================
--- incubator/any23/trunk/core/src/test/java/org/apache/any23/io/nquads/NQuadsParserTest.java (original)
+++ incubator/any23/trunk/core/src/test/java/org/apache/any23/io/nquads/NQuadsParserTest.java Mon May 21 15:22:15 2012
@@ -399,10 +399,10 @@ public class NQuadsParserTest {
* @throws RDFHandlerException
*/
@Test
- public void testParserWithAllCases()
+ public void testFullParseScenario()
throws IOException, RDFParseException, RDFHandlerException {
TestParseLocationListener parseLocationListerner = new TestParseLocationListener();
- SpecificTestRDFHandler rdfHandler = new SpecificTestRDFHandler();
+ FullParseScenarioRDFHandler rdfHandler = new FullParseScenarioRDFHandler();
parser.setParseLocationListener(parseLocationListerner);
parser.setRDFHandler(rdfHandler);
@@ -416,8 +416,8 @@ public class NQuadsParserTest {
"http://test.base.uri"
);
- rdfHandler.assertHandler(5);
- parseLocationListerner.assertListener(7, 108);
+ rdfHandler.assertHandler(6);
+ parseLocationListerner.assertListener(8, 71);
}
/**
@@ -428,7 +428,7 @@ public class NQuadsParserTest {
* @throws RDFHandlerException
*/
@Test
- public void testParserWithRealData()
+ public void testParseRealData()
throws IOException, RDFParseException, RDFHandlerException {
TestParseLocationListener parseLocationListener = new TestParseLocationListener();
TestRDFHandler rdfHandler = new TestRDFHandler();
@@ -520,6 +520,28 @@ public class NQuadsParserTest {
}
}
+ @Test
+ public void testParseWithNoContext() throws RDFHandlerException, IOException, RDFParseException {
+ final ByteArrayInputStream bais = new ByteArrayInputStream(
+ ("<http://www.v/dat/4b2-21>" +
+ "<http://www.w3.org/20/ica#dtend>" +
+ "\"2010\"^^<http://www.w3.org/2001/XMLSchema#integer> ."
+ ).getBytes()
+ );
+ final TestRDFHandler rdfHandler = new TestRDFHandler();
+ parser.setRDFHandler(rdfHandler);
+ parser.parse(bais, "http://test.base.uri");
+ final Statement statement = rdfHandler.getStatements().get(0);
+ Assert.assertEquals("http://www.v/dat/4b2-21", statement.getSubject().stringValue());
+ Assert.assertEquals("http://www.w3.org/20/ica#dtend", statement.getPredicate().stringValue());
+ Assert.assertTrue(statement.getObject() instanceof Literal);
+ Literal object = (Literal) statement.getObject();
+ Assert.assertEquals("2010", object.stringValue());
+ Assert.assertNull(object.getLanguage());
+ Assert.assertEquals("http://www.w3.org/2001/XMLSchema#integer", object.getDatatype().toString());
+ Assert.assertNull(statement.getContext());
+ }
+
private void verifyStatementWithInvalidLiteralContent(RDFParser.DatatypeHandling datatypeHandling)
throws RDFHandlerException, IOException, RDFParseException {
final ByteArrayInputStream bais = new ByteArrayInputStream(
@@ -606,23 +628,28 @@ public class NQuadsParserTest {
}
}
- private class SpecificTestRDFHandler extends TestRDFHandler {
+ private class FullParseScenarioRDFHandler extends TestRDFHandler {
public void handleStatement(Statement statement) throws RDFHandlerException {
- int statements = getStatements().size();
- if(statements == 0){
+ int statementIndex = getStatements().size();
+ if(statementIndex == 0){
Assert.assertEquals(new URIImpl("http://example.org/alice/foaf.rdf#me"), statement.getSubject() );
-
} else {
Assert.assertTrue(statement.getSubject() instanceof BNode);
}
- if( statements == 5 ) {
+
+ if( statementIndex == 4) {
Assert.assertEquals(new URIImpl("http://test.base.uri#like"), statement.getPredicate() );
}
- Assert.assertEquals(
- new URIImpl( String.format("http://example.org/alice/foaf%s.rdf", statements + 1) ),
- statement.getContext()
- );
+
+ if(statementIndex == 5) {
+ Assert.assertNull(statement.getContext());
+ } else {
+ Assert.assertEquals(
+ new URIImpl(String.format("http://example.org/alice/foaf%s.rdf", statementIndex + 1)),
+ statement.getContext()
+ );
+ }
super.handleStatement(statement);
}
Modified: incubator/any23/trunk/core/src/test/resources/application/nquads/test1.nq
URL: http://svn.apache.org/viewvc/incubator/any23/trunk/core/src/test/resources/application/nquads/test1.nq?rev=1341067&r1=1341066&r2=1341067&view=diff
==============================================================================
--- incubator/any23/trunk/core/src/test/resources/application/nquads/test1.nq (original)
+++ incubator/any23/trunk/core/src/test/resources/application/nquads/test1.nq Mon May 21 15:22:15 2012
@@ -4,4 +4,5 @@ _:bnode2 <http://xmlns.com/foaf/0.1/Frie
_:bnode3 <http://xmlns.com/foaf/0.1/Friend> "This literal is \"really\" useful"@it <http://example.org/alice/foaf4.rdf> .
-_:bnode1 <#like> "12345"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.org/alice/foaf5.rdf> .
\ No newline at end of file
+_:bnode1 <#like> "12345"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.org/alice/foaf5.rdf> .
+_:bnode4 <#type> "triple"^^<http://www.w3.org/2001/XMLSchema#String> .
\ No newline at end of file