You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by jp...@apache.org on 2014/08/15 07:37:29 UTC
svn commit: r1618100 - in /jena/Experimental/jena-csv: ./
src/main/java/org/apache/jena/propertytable/graph/
src/main/java/org/apache/jena/propertytable/impl/
src/main/java/org/apache/jena/propertytable/lang/
src/main/java/org/apache/jena/propertytable...
Author: jpz6311whu
Date: Fri Aug 15 05:37:29 2014
New Revision: 1618100
URL: http://svn.apache.org/r1618100
Log:
JENA-625, prepare for jena-csv 1.0 release:
1. modify dependency from SNAPSHOT to release
2. refactor the package layout
3. move LangCSV from jena-arq module to jena-csv
4. modify jena-csv version to 1.0
Added:
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java
- copied, changed from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphCSV.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java
- copied, changed from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphPropertyTable.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java
- copied, changed from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTable.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java
- copied, changed from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTableRow.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java
- copied, changed from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/RowMatch.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java
- copied, changed from r1613800, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/StageGeneratorPropertyTable.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java (with props)
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/IRILib.java (with props)
jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/graph/
jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/graph/GraphCSVTest.java
- copied, changed from r1617106, jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/impl/GraphCSVTest.java
jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/
jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/TestLangCSV.java (with props)
Removed:
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphCSV.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphPropertyTable.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTable.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTableRow.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/RowMatch.java
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/StageGeneratorPropertyTable.java
jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/impl/GraphCSVTest.java
Modified:
jena/Experimental/jena-csv/pom.xml
jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java
jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java
Modified: jena/Experimental/jena-csv/pom.xml
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/pom.xml?rev=1618100&r1=1618099&r2=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/pom.xml (original)
+++ jena/Experimental/jena-csv/pom.xml Fri Aug 15 05:37:29 2014
@@ -22,21 +22,30 @@
<artifactId>jena-csv</artifactId>
<packaging>jar</packaging>
<name>Apache Jena - Data Tables for SPARQL</name>
- <version>0.1-SNAPSHOT</version>
+ <version>1.0</version>
<parent>
<groupId>org.apache.jena</groupId>
<artifactId>jena-parent</artifactId>
- <version>10-SNAPSHOT</version>
+ <version>10</version>
<relativePath>../jena-parent</relativePath>
</parent>
-
+
+ <!-- Need if the parent is a snapshot -->
+ <repositories>
+ <repository>
+ <id>apache.snapshots</id>
+ <name>Apache Snapshot Repository</name>
+ <url>http://repository.apache.org/snapshots</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+ </repositories>
+
+ <description>jena-csv is for getting CSVs into a form that is amenable to Jena SPARQL processing, and doing so in a way that is not specific to CSV files. It includes getting the right architecture in place for regular table shaped data, using the core abstraction of PropertyTable.</description>
+
<properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
- <jdk.version>1.6</jdk.version>
- <targetJdk>${jdk.version}</targetJdk> <!-- MPMD-86 workaround -->
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ssZ</maven.build.timestamp.format>
<build.time.xsd>${maven.build.timestamp}</build.time.xsd>
</properties>
@@ -47,7 +56,7 @@
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>apache-jena-libs</artifactId>
- <version>2.12.1-SNAPSHOT</version>
+ <version>2.12.0</version>
<type>pom</type>
</dependency>
@@ -62,7 +71,7 @@
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-arq</artifactId>
- <version>2.12.1-SNAPSHOT</version>
+ <version>2.12.0</version>
<type>jar</type>
<classifier>tests</classifier>
<scope>test</scope>
Copied: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java (from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphCSV.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java?p2=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java&p1=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphCSV.java&r1=1611872&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphCSV.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphCSV.java Fri Aug 15 05:37:29 2014
@@ -16,9 +16,10 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
import org.apache.jena.propertytable.PropertyTable;
+import org.apache.jena.propertytable.impl.PropertyTableBuilder;
public class GraphCSV extends GraphPropertyTable {
Copied: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java (from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphPropertyTable.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java?p2=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java&p1=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphPropertyTable.java&r1=1611872&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/GraphPropertyTable.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/GraphPropertyTable.java Fri Aug 15 05:37:29 2014
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
import java.util.ArrayList;
import java.util.Locale;
Copied: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java (from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTable.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java?p2=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java&p1=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTable.java&r1=1611872&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTable.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTable.java Fri Aug 15 05:37:29 2014
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
import java.util.ArrayList;
import java.util.Collection;
Copied: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java (from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTableRow.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java?p2=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java&p1=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTableRow.java&r1=1611872&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/QueryIterPropertyTableRow.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/QueryIterPropertyTableRow.java Fri Aug 15 05:37:29 2014
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
import java.util.ArrayList;
import java.util.List;
Copied: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java (from r1611872, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/RowMatch.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java?p2=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java&p1=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/RowMatch.java&r1=1611872&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/RowMatch.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/RowMatch.java Fri Aug 15 05:37:29 2014
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.sparql.core.BasicPattern;
Copied: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java (from r1613800, jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/StageGeneratorPropertyTable.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java?p2=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java&p1=jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/StageGeneratorPropertyTable.java&r1=1613800&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/StageGeneratorPropertyTable.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/graph/StageGeneratorPropertyTable.java Fri Aug 15 05:37:29 2014
@@ -16,7 +16,8 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
+
import com.hp.hpl.jena.graph.Graph;
import com.hp.hpl.jena.sparql.core.BasicPattern;
Modified: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java?rev=1618100&r1=1618099&r2=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java (original)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/impl/PropertyTableBuilder.java Fri Aug 15 05:37:29 2014
@@ -27,7 +27,7 @@ import org.apache.jena.atlas.csv.CSVToke
import org.apache.jena.atlas.io.IO;
import org.apache.jena.propertytable.PropertyTable;
import org.apache.jena.propertytable.Row;
-import org.apache.jena.riot.lang.LangCSV;
+import org.apache.jena.propertytable.lang.LangCSV;
import org.apache.jena.riot.system.IRIResolver;
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
Added: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java?rev=1618100&view=auto
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java (added)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java Fri Aug 15 05:37:29 2014
@@ -0,0 +1,225 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.propertytable.lang;
+
+import static org.apache.jena.riot.RDFLanguages.CSV;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.jena.atlas.csv.CSVParser;
+import org.apache.jena.atlas.web.ContentType;
+import org.apache.jena.propertytable.util.IRILib;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFLanguages;
+import org.apache.jena.riot.RDFParserRegistry;
+import org.apache.jena.riot.ReaderRIOT;
+import org.apache.jena.riot.ReaderRIOTFactory;
+import org.apache.jena.riot.lang.LangRIOT;
+import org.apache.jena.riot.system.ErrorHandler;
+import org.apache.jena.riot.system.ErrorHandlerFactory;
+import org.apache.jena.riot.system.IRIResolver;
+import org.apache.jena.riot.system.ParserProfile;
+import org.apache.jena.riot.system.RiotLib;
+import org.apache.jena.riot.system.StreamRDF;
+
+import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.NodeFactory;
+import com.hp.hpl.jena.sparql.util.Context;
+
+public class LangCSV implements LangRIOT {
+
+ public static final String CSV_PREFIX = "http://w3c/future-csv-vocab/";
+ public static final String CSV_ROW = CSV_PREFIX + "row";
+
+ private InputStream input = null;
+ private Reader reader = null;
+ private String base;
+ private String filename;
+ private StreamRDF sink;
+ private ParserProfile profile; // Warning - we don't use all of this.
+
+ public static void register(){
+ RDFParserRegistry.removeRegistration(Lang.CSV);
+ RDFParserRegistry.registerLangTriples(Lang.CSV, new ReaderRIOTFactoryCSV());
+ }
+
+ @Override
+ public Lang getLang() {
+ return RDFLanguages.CSV;
+ }
+
+ @Override
+ public ParserProfile getProfile() {
+ return profile;
+ }
+
+ @Override
+ public void setProfile(ParserProfile profile) {
+ this.profile = profile;
+ }
+
+ public LangCSV(Reader reader, String base, String filename,
+ ErrorHandler errorHandler, StreamRDF sink) {
+ this.reader = reader;
+ this.base = base;
+ this.filename = filename;
+ this.sink = sink;
+ this.profile = RiotLib.profile(getLang(), base, errorHandler);
+ }
+
+ public LangCSV(InputStream in, String base, String filename,
+ ErrorHandler errorHandler, StreamRDF sink) {
+ this.input = in;
+ this.base = base;
+ this.filename = filename;
+ this.sink = sink;
+ this.profile = RiotLib.profile(getLang(), base, errorHandler);
+ }
+
+ @Override
+ public void parse() {
+ sink.start();
+ CSVParser parser = (input != null) ? CSVParser.create(input)
+ : CSVParser.create(reader);
+ List<String> row = null;
+ ArrayList<Node> predicates = new ArrayList<Node>();
+ int rowNum = 0;
+ while ((row = parser.parse1()) != null) {
+
+ if (rowNum == 0) {
+ for (String column : row) {
+ String uri = IRIResolver.resolveString(filename) + "#"
+ + toSafeLocalname(column);
+ Node predicate = this.profile.createURI(uri, rowNum, 0);
+ predicates.add(predicate);
+ }
+ } else {
+ //Node subject = this.profile.createBlankNode(null, -1, -1);
+ Node subject = caculateSubject(rowNum, filename);
+ Node predicateRow = this.profile.createURI(CSV_ROW, -1, -1);
+ Node objectRow = this.profile
+ .createTypedLiteral((rowNum + ""),
+ XSDDatatype.XSDinteger, rowNum, 0);
+ sink.triple(this.profile.createTriple(subject, predicateRow,
+ objectRow, rowNum, 0));
+ for (int col = 0; col < row.size() && col<predicates.size(); col++) {
+ Node predicate = predicates.get(col);
+ String columnValue = row.get(col).trim();
+ if("".equals(columnValue)){
+ continue;
+ }
+ Node o;
+ try {
+ // Try for a double.
+ double d = Double.parseDouble(columnValue);
+ o = NodeFactory.createLiteral(columnValue,
+ XSDDatatype.XSDdouble);
+ } catch (Exception e) {
+ o = NodeFactory.createLiteral(columnValue);
+ }
+ sink.triple(this.profile.createTriple(subject, predicate,
+ o, rowNum, col));
+ }
+
+ }
+ rowNum++;
+ }
+ sink.finish();
+
+ }
+
+ public static String toSafeLocalname(String raw) {
+ String ret = raw.trim();
+ return encodeURIComponent(ret);
+
+ }
+
+ public static String encodeURIComponent(String s) {
+ return IRILib.encodeUriComponent(s);
+ }
+
+ public static Node caculateSubject(int rowNum, String filename){
+ Node subject = NodeFactory.createAnon();
+// String uri = IRIResolver.resolveString(filename) + "#Row_" + rowNum;
+// Node subject = NodeFactory.createURI(uri);
+ return subject;
+ }
+
+
+
+
+ private static class ReaderRIOTFactoryCSV implements ReaderRIOTFactory
+ {
+ @Override
+ public ReaderRIOT create(Lang lang) {
+ return new ReaderRIOTLangCSV(lang) ;
+ }
+ }
+
+ private static class ReaderRIOTLangCSV implements ReaderRIOT
+ {
+ private final Lang lang ;
+ private ErrorHandler errorHandler ;
+ private ParserProfile parserProfile = null ;
+
+ ReaderRIOTLangCSV(Lang lang) {
+ this.lang = lang ;
+ errorHandler = ErrorHandlerFactory.getDefaultErrorHandler() ;
+ }
+
+ @Override
+ public void read(InputStream in, String baseURI, ContentType ct, StreamRDF output, Context context) {
+ if ( lang == CSV){
+ LangRIOT parser = new LangCSV (in, baseURI, baseURI, ErrorHandlerFactory.getDefaultErrorHandler(), output);
+ if ( parserProfile != null )
+ parser.setProfile(parserProfile);
+ if ( errorHandler != null )
+ parser.getProfile().setHandler(errorHandler) ;
+ parser.parse() ;
+ } else {
+ throw new IllegalArgumentException("The Lang must be 'CSV'!");
+ }
+
+ }
+
+ @Override
+ public void read(Reader in, String baseURI, ContentType ct, StreamRDF output, Context context) {
+ if ( lang == CSV){
+ LangRIOT parser = new LangCSV (in, baseURI, baseURI, ErrorHandlerFactory.getDefaultErrorHandler(), output);
+ if ( parserProfile != null )
+ parser.setProfile(parserProfile);
+ if ( errorHandler != null )
+ parser.getProfile().setHandler(errorHandler) ;
+ parser.parse() ;
+ } else {
+ throw new IllegalArgumentException("The Lang must be 'CSV'!");
+ }
+ }
+
+ @Override public ErrorHandler getErrorHandler() { return errorHandler ; }
+ @Override public void setErrorHandler(ErrorHandler errorHandler) { this.errorHandler = errorHandler ; }
+
+ @Override public ParserProfile getParserProfile() { return parserProfile ; }
+ @Override public void setParserProfile(ParserProfile parserProfile) { this.parserProfile = parserProfile ; }
+ }
+}
Propchange: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/lang/LangCSV.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/IRILib.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/IRILib.java?rev=1618100&view=auto
==============================================================================
--- jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/IRILib.java (added)
+++ jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/IRILib.java Fri Aug 15 05:37:29 2014
@@ -0,0 +1,262 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.propertytable.util;
+
+import java.io.File ;
+import java.io.IOException ;
+
+import org.apache.jena.atlas.AtlasException ;
+import org.apache.jena.atlas.lib.Chars ;
+import org.apache.jena.atlas.lib.StrUtils ;
+import org.apache.jena.riot.SysRIOT ;
+
+/**
+ * Operations related to IRIs
+ * Add '£', based on org.apache.jena.riot.system.IRILib
+ */
+public class IRILib
+{
+ // http://www.w3.org/TR/xpath-functions/#func-encode-for-uri
+ // Encodes delimiters.
+
+ /* RFC 3986
+ *
+ * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+ * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+ / "*" / "+" / "," / ";" / "="
+ */
+
+ private static char uri_reserved[] =
+ {
+ '!', '*', '"', '\'', '(', ')', ';', ':', '@', '&',
+ '=', '+', '$', ',', '/', '?', '%', '#', '[', ']'} ;
+
+ // No allowed in URIs
+ private static char uri_non_chars[] = { '<', '>', '{', '}', '|', '\\', '`', '^', ' ', '\n', '\r', '\t', '£' } ;
+
+ // RFC 2396
+ //private static char uri_unwise[] = { '{' , '}', '|', '\\', '^', '[', ']', '`' } ;
+
+
+ private static char[] charsComponent =
+ // reserved, + non-chars + nasties.
+ { '!', '*', '"', '\'', '(', ')', ';', ':', '@', '&',
+ '=', '+', '$', ',', '/', '?', '%', '#', '[', ']',
+ '{', '}', '|', '\\', '`', '^',
+ ' ', '<', '>', '\n', '\r', '\t', '£' } ;
+
+ private static char[] charsFilename =
+ // reserved, + non-chars + nasties.
+ // Leave : (Windows drive charcater) and / (separator) alone
+ // include SPC and ~
+ { '!', '*', '"', '\'', '(', ')', ';', /*':',*/ '@', '&',
+ '=', '+', '$', ',', /*'/',*/ '?', '%', '#', '[', ']',
+ '{', '}', '|', '\\', '`', '^',
+ ' ', '<', '>', '\n', '\r', '\t',
+ '~'} ;
+
+ private static char[] charsPath =
+ {
+ // Reserved except leave the separators alone.
+ // Leave the path separator alone.
+ // Leave the drive separator alone.
+ '!', '*', '"', '\'', '(', ')', ';', /*':',*/ '@', '&',
+ '=', '+', '$', ',', /*'/',*/ '?', '%', '#', '[', ']',
+ '{', '}', '|', '\\', '`', '^',
+ // Other junk
+ ' ', '<', '>', '\n', '\r', '\t' } ;
+
+ // The initializers must have run.
+ static final String cwd ;
+ static final String cwdURL ;
+
+ // Current directory, with trailing "/"
+ // This matters for resolution.
+ static {
+ String x = new File(".").getAbsolutePath() ;
+ x = x.substring(0, x.length()-1) ;
+ cwd = x ;
+ cwdURL = plainFilenameToURL(cwd) ;
+ }
+
+ // See also IRIResolver
+ /** Return a string that is an IRI for the filename.*/
+ public static String fileToIRI(File f)
+ {
+ return filenameToIRI(f.getAbsolutePath()) ;
+ }
+
+ /** Create a string that is a IRI for the filename.
+ * The file name may already have file:.
+ * The file name may be relative.
+ * Encode using the rules for a path (e.g. ':' and'/' do not get encoded)
+ */
+ public static String filenameToIRI(String fn)
+ {
+ if ( fn == null ) return cwdURL ;
+
+ if ( fn.length() == 0 ) return cwdURL ;
+
+ if ( fn.startsWith("file:") )
+ return normalizeFilenameURI(fn) ;
+ return plainFilenameToURL(fn) ;
+ }
+
+ /** Convert an IRI to a filename */
+ public static String IRIToFilename(String iri)
+ {
+ if ( ! iri.startsWith("file:") )
+ throw new AtlasException("Not a file: URI: "+iri) ;
+
+ String fn ;
+ if ( iri.startsWith("file:///") )
+ fn = iri.substring("file://".length()) ;
+ else
+ fn = iri.substring("file:".length()) ;
+ return decode(fn) ;
+ }
+
+ /** Convert a plain file name (no file:) to a file: URL */
+ private static String plainFilenameToURL(String fn)
+ {
+ // No "file:"
+ // Make Absolute filename.
+ boolean trailingSlash = fn.endsWith("/") ;
+ File file = new File(fn) ;
+
+ try { fn = file.getCanonicalPath() ; }
+ catch (IOException e) { fn = file.getAbsolutePath() ; }
+
+ if ( trailingSlash && ! fn.endsWith("/") )
+ fn = fn + "/" ;
+
+ if ( SysRIOT.isWindows )
+ {
+ // C:\ => file:///C:/...
+ if ( fn.length() >= 2 && fn.charAt(1) == ':' )
+ // Windows drive letter - already absolute path.
+ // Make "URI" absolute path
+ fn = "/"+fn ;
+ // Convert \ to /
+ // Maybe should do this on all platforms? i.e consistency.
+ fn = fn.replace('\\', '/' ) ;
+ }
+
+ fn = encodeFileURL(fn) ;
+ return "file://"+fn ;
+ }
+
+
+ /** Sanitize a "file:" URL. Must start "file:" */
+ private static String normalizeFilenameURI(String fn)
+ {
+ if ( ! fn.startsWith("file:/") )
+ {
+ // Relative path.
+ String fn2 = fn.substring("file:".length()) ;
+ return plainFilenameToURL(fn2) ;
+ }
+
+ // Starts file:///
+ if ( fn.startsWith("file:///") )
+ // Assume it's good as return as-is.
+ return fn ;
+
+ if ( fn.startsWith("file://") )
+ {
+ String fn2 = fn.substring("file:/".length()) ; // Leave one "/"
+ return plainFilenameToURL(fn2) ;
+ }
+
+ // Must be file:/
+ String fn2 = fn.substring("file:".length()) ;
+ return plainFilenameToURL(fn2) ;
+ }
+
+ /** Encode using the rules for a component (e.g. ':' and '/' get encoded)
+ * Does not encode non-ASCII characters
+ */
+ public static String encodeUriComponent(String string)
+ {
+ String encStr = StrUtils.encodeHex(string,'%', charsComponent) ;
+ return encStr ;
+ }
+
+ /** Encode using the rules for a file: URL.
+ * Does not encode non-ASCII characters
+ */
+ public static String encodeFileURL(String string)
+ {
+ String encStr = StrUtils.encodeHex(string,'%', charsFilename) ;
+ return encStr ;
+ }
+
+ /** Encode using the rules for a path (e.g. ':' and '/' do not get encoded) */
+ public static String encodeUriPath(String uri)
+ {
+ // Not perfect.
+ // Encode path.
+ // %-encode chars.
+ uri = StrUtils.encodeHex(uri, '%', charsPath) ;
+ return uri ;
+ }
+
+ public static String decode(String string)
+ {
+ return StrUtils.decodeHex(string, '%') ;
+ }
+
+ public static String encodeNonASCII(String string)
+ {
+ if ( ! containsNonASCII(string) )
+ return string ;
+
+ byte[] bytes = StrUtils.asUTF8bytes(string) ;
+ StringBuilder sw = new StringBuilder() ;
+ for ( byte b : bytes )
+ {
+ // Signed bytes ...
+ if ( b > 0 )
+ {
+ sw.append( (char) b );
+ continue;
+ }
+
+ int hi = ( b & 0xF0 ) >> 4;
+ int lo = b & 0xF;
+ sw.append( '%' );
+ sw.append( Chars.hexDigitsUC[hi] );
+ sw.append( Chars.hexDigitsUC[lo] );
+ }
+ return sw.toString() ;
+ }
+
+ public static boolean containsNonASCII(String string)
+ {
+ boolean clean = true ;
+ for ( int i = 0 ; i < string.length() ; i++ )
+ {
+ char ch = string.charAt(i) ;
+ if ( ch >= 127 )
+ return true;
+ }
+ return false ;
+ }
+}
Propchange: jena/Experimental/jena-csv/src/main/java/org/apache/jena/propertytable/util/IRILib.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java?rev=1618100&r1=1618099&r2=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java (original)
+++ jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/TS_PropertyTable.java Fri Aug 15 05:37:29 2014
@@ -18,11 +18,12 @@
package org.apache.jena.propertytable;
-import org.apache.jena.propertytable.impl.GraphCSVTest;
+import org.apache.jena.propertytable.graph.GraphCSVTest;
import org.apache.jena.propertytable.impl.PropertyTableArrayImplTest;
import org.apache.jena.propertytable.impl.PropertyTableBuilderForArrayImplTest;
import org.apache.jena.propertytable.impl.PropertyTableBuilderForHashMapImplTest;
import org.apache.jena.propertytable.impl.PropertyTableHashMapImplTest;
+import org.apache.jena.propertytable.lang.TestLangCSV;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@@ -34,6 +35,7 @@ import org.junit.runners.Suite;
GraphCSVTest.class,
PropertyTableBuilderForArrayImplTest.class,
PropertyTableBuilderForHashMapImplTest.class,
+ TestLangCSV.class
})
public class TS_PropertyTable {
Copied: jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/graph/GraphCSVTest.java (from r1617106, jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/impl/GraphCSVTest.java)
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/graph/GraphCSVTest.java?p2=jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/graph/GraphCSVTest.java&p1=jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/impl/GraphCSVTest.java&r1=1617106&r2=1618100&rev=1618100&view=diff
==============================================================================
--- jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/impl/GraphCSVTest.java (original)
+++ jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/graph/GraphCSVTest.java Fri Aug 15 05:37:29 2014
@@ -16,9 +16,12 @@
* limitations under the License.
*/
-package org.apache.jena.propertytable.impl;
+package org.apache.jena.propertytable.graph;
+import org.apache.jena.propertytable.graph.GraphCSV;
+import org.apache.jena.propertytable.lang.LangCSV;
import org.junit.Assert;
+import org.junit.BeforeClass;
import org.junit.Test;
import com.hp.hpl.jena.query.ARQ;
@@ -32,10 +35,14 @@ import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.sparql.engine.main.StageBuilder;
import com.hp.hpl.jena.sparql.engine.main.StageGenerator;
-import com.hp.hpl.jena.util.PrintUtil;
public class GraphCSVTest extends Assert {
+ @BeforeClass
+ public static void init(){
+ LangCSV.register();
+ }
+
@Test
public void testGraphCSV() throws Exception {
//String file = "src/test/resources/HEFCE_organogram_senior_data_31032011.csv";test.csv
Added: jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/TestLangCSV.java
URL: http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/TestLangCSV.java?rev=1618100&view=auto
==============================================================================
--- jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/TestLangCSV.java (added)
+++ jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/TestLangCSV.java Fri Aug 15 05:37:29 2014
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.propertytable.lang;
+
+import java.io.StringReader;
+
+import org.apache.jena.atlas.junit.BaseTest;
+import org.apache.jena.atlas.lib.StrUtils;
+import org.apache.jena.riot.Lang;
+import org.apache.jena.riot.RDFDataMgr;
+import org.apache.jena.riot.RDFLanguages;
+import org.apache.jena.riot.system.IRIResolver;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+
+public class TestLangCSV extends BaseTest {
+ private static final String FILE_NAME = "src/test/resources/test.csv";
+ private static final String FILE_URI = IRIResolver.resolveString(FILE_NAME);
+
+ @BeforeClass
+ public static void init(){
+ LangCSV.register();
+ }
+
+ @Test
+ public void testPredicateWithSpace() {
+ String[] s1 = { "Predicate With Space", "PredicateWithSpace" };
+ String[] s2 = {
+ //"<"+ LangCSV.caculateSubject(1, FILE_NAME) + "> <" + FILE_URI + "#Predicate+With+Space> 'PredicateWithSpace' ; ",
+ " [] <" + FILE_URI + "#Predicate%20With%20Space> 'PredicateWithSpace' ; ",
+ " <http://w3c/future-csv-vocab/row> 1 ." };
+ assertIsomorphicWith(s1, s2);
+ }
+
+ @Test
+ public void testNonURICharacters() {
+ String[] s1 = { "`~!@#$%^&*()-_=+[{]}|\\;:'\"<.>/?", "NonURICharacters" };
+ String[] s2 = {
+ //"<"+ LangCSV.caculateSubject(1, FILE_NAME) + "> <" + FILE_URI + "#%60%7E%21%40%23%24%25%5E%26*%28%29-_%3D%2B%5B%7B%5D%7D%7C%5C%3B%3A%27%22%3C.%3E%2F%3F> 'NonURICharacters' ; ",
+ " [] <" + FILE_URI + "#%60~%21%40%23%24%25%5E%26%2A%28%29-_%3D%2B%5B%7B%5D%7D%7C%5C%3B%3A%27%22%3C.%3E%2F%3F> 'NonURICharacters' ; ",
+ " <http://w3c/future-csv-vocab/row> 1 ." };
+ assertIsomorphicWith(s1, s2);
+ }
+
+ @Test
+ public void testDigitalLocalName() {
+ String[] s1 = { "1234", "DigitalLocalName" };
+ String[] s2 = {
+ //"<"+ LangCSV.caculateSubject(1, FILE_NAME) + "> <" + FILE_URI + "#1234> 'DigitalLocalName' ; ",
+ " [] <" + FILE_URI + "#1234> 'DigitalLocalName' ; ",
+ " <http://w3c/future-csv-vocab/row> 1 ." };
+ assertIsomorphicWith(s1, s2);
+ }
+
+ @Test
+ public void testMoney() {
+ String[] s1 = { "£", "£" };
+ String[] s2 = {
+ //"<"+ LangCSV.caculateSubject(1, FILE_NAME) + "> <" + FILE_URI + "#1234> 'DigitalLocalName' ; ",
+ " [] <" + FILE_URI + "#%A3> '£' ; ",
+ " <http://w3c/future-csv-vocab/row> 1 ." };
+ assertIsomorphicWith(s1, s2);
+ }
+
+ @Test
+ public void RDFDataMgrReadTest() {
+ Model m1 = RDFDataMgr.loadModel(FILE_NAME, RDFLanguages.CSV);
+ Model m2 = ModelFactory.createDefaultModel();
+ m2.read(FILE_NAME, "CSV");
+ assertEquals(12, m1.size());
+ assertTrue(m1.isIsomorphicWith(m2));
+ }
+
+ private Model parseToModel(String[] strings, Lang lang) {
+ String string = StrUtils.strjoin("\n", strings);
+ StringReader r = new StringReader(string);
+ Model model = ModelFactory.createDefaultModel();
+ RDFDataMgr.read(model, r, FILE_NAME, lang);
+ return model;
+ }
+
+ private void assertIsomorphicWith(String[] s1, String[] s2){
+ Model m1 = parseToModel(s1, RDFLanguages.CSV);
+ Model m2 = parseToModel(s2, RDFLanguages.TURTLE);
+ assertTrue(m1.isIsomorphicWith(m2));
+ }
+
+}
Propchange: jena/Experimental/jena-csv/src/test/java/org/apache/jena/propertytable/lang/TestLangCSV.java
------------------------------------------------------------------------------
svn:mime-type = text/plain