You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2018/02/27 23:10:35 UTC

[15/24] jena git commit: JENA-1494: ARP property setting from RIOT.

JENA-1494: ARP property setting from RIOT.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9237d24a
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9237d24a
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9237d24a

Branch: refs/heads/master
Commit: 9237d24a99617c219ce9d4a4ab085621be3784d4
Parents: 6550960
Author: Andy Seaborne <an...@apache.org>
Authored: Sat Feb 24 08:25:02 2018 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Sat Feb 24 08:25:02 2018 +0000

----------------------------------------------------------------------
 .../org/apache/jena/riot/RDFWriterBuilder.java  | 33 ++++++++++-
 .../main/java/org/apache/jena/riot/SysRIOT.java | 15 +++--
 .../apache/jena/riot/lang/ReaderRIOTRDFXML.java | 60 ++++++++++++++++++--
 .../apache/jena/rdfxml/xmlinput/JenaReader.java |  3 +-
 4 files changed, 98 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/9237d24a/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterBuilder.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterBuilder.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterBuilder.java
index 336e629..ab7aea4 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterBuilder.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFWriterBuilder.java
@@ -21,6 +21,8 @@ package org.apache.jena.riot;
 import java.io.OutputStream;
 
 import org.apache.jena.graph.Graph ;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.rdf.model.Model;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.sparql.util.Context;
 
@@ -40,7 +42,7 @@ public class RDFWriterBuilder {
 
     /** Set the source of writing to the graph argument.
      * <p>
-     * Any prrvious source setting is cleared.
+     * Any previous source setting is cleared.
      * @param graph A {@link Graph}.
      * @return this
      */
@@ -50,9 +52,22 @@ public class RDFWriterBuilder {
         return this;
     }
 
+    /** Set the source of writing to the graph argument.
+     * <p>
+     * Any previous source setting is cleared.
+     * <p>
+     * Equivalent to {@code source(model.getGraph()(s)}
+     * 
+     * @param model A {@link Model}.
+     * @return this
+     */
+    public RDFWriterBuilder source(Model model) {
+        return source(model.getGraph());
+    }
+
     /** Set the source of writing to the {@code DatasetGraph} argument.
      * <p>
-     * Any prrvious source setting is cleared.
+     * Any previous source setting is cleared.
      * @param dataset A {@link DatasetGraph}.
      * @return this
      */
@@ -62,6 +77,20 @@ public class RDFWriterBuilder {
         return this;
     }
 
+    /** Set the source of writing to the {@code DatasetGraph} argument.
+     * <p>
+     * Any previous source setting is cleared.
+     * <p>
+     * Equivalent to {@code source(dataset.asDatasetGraph())}
+     * 
+     * @param dataset A {@link DatasetGraph}.
+     * @return this
+     */
+    public RDFWriterBuilder source(Dataset dataset) {
+        return source(dataset.asDatasetGraph());
+    }
+
+
 //    // Not implemented
 //    public RDFWriterBuilder labels(NodeToLabel nodeToLabel) { return this; }
 //    

http://git-wip-us.apache.org/repos/asf/jena/blob/9237d24a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
index c46228e..49611d6 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
@@ -20,6 +20,7 @@ package org.apache.jena.riot;
 
 import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.riot.system.IRIResolver ;
+import org.apache.jena.sparql.util.Context;
 import org.apache.jena.sparql.util.Symbol ;
 import org.apache.jena.util.FileUtils ;
 import org.slf4j.Logger ;
@@ -50,14 +51,20 @@ public class SysRIOT
     /**
      * Context key for old style RDFWriter properties. The value of this in a
      * {@link Context} must be a {@code Map<String, Object>}. The entries of the
-     * map are used to set writer properties before the Jena legalacy
+     * map are used to set writer properties before the Jena legacy
      * {@link RDFWriter} is called. Only has any effect on RDF/XML and
      * RDF/XML-ABBREV.
      */
-
-    /** Context key for old style RDFWriter properties */ 
     public static final Symbol sysRdfWriterProperties      = Symbol.create(riotBase+"rdfWriter_properties") ;
-    
+
+    /**
+     * Context key for old style RDFReader properties. The value of this in a
+     * {@link Context} must be a {@code Map<String, Object>}. The entries of the
+     * map are used to set reader properties before the Jena legalacy
+     * {@link RDFWriter} is called. Only has any effect on RDF/XML,
+     */
+    public static final Symbol sysRdfReaderProperties      = Symbol.create(riotBase+"rdfReader_properties") ;
+
     /** @deprecated Use {@link #sysRdfWriterProperties} */
     @Deprecated
     public static final Symbol rdfWriterProperties      = sysRdfWriterProperties ;

http://git-wip-us.apache.org/repos/asf/jena/blob/9237d24a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRIOTRDFXML.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRIOTRDFXML.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRIOTRDFXML.java
index 4f151ed..3c18978 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRIOTRDFXML.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/ReaderRIOTRDFXML.java
@@ -21,9 +21,11 @@ package org.apache.jena.riot.lang;
 import java.io.IOException ;
 import java.io.InputStream ;
 import java.io.Reader ;
+import java.util.Map;
 
 import org.apache.jena.JenaRuntime;
 import org.apache.jena.atlas.lib.Pair ;
+import org.apache.jena.atlas.logging.Log;
 import org.apache.jena.atlas.web.ContentType;
 import org.apache.jena.datatypes.RDFDatatype ;
 import org.apache.jena.datatypes.TypeMapper ;
@@ -34,6 +36,7 @@ import org.apache.jena.rdf.model.RDFErrorHandler ;
 import org.apache.jena.rdfxml.xmlinput.* ;
 import org.apache.jena.rdfxml.xmlinput.impl.ARPSaxErrorHandler ;
 import org.apache.jena.riot.*;
+import org.apache.jena.riot.adapters.AdapterRDFWriter;
 import org.apache.jena.riot.checker.CheckerLiterals ;
 import org.apache.jena.riot.system.*;
 import org.apache.jena.sparql.util.Context;
@@ -44,7 +47,7 @@ import org.xml.sax.SAXParseException ;
  *
  * @see <a href="http://www.w3.org/TR/rdf-syntax-grammar/">http://www.w3.org/TR/rdf-syntax-grammar/</a>
  */
-public class ReaderRIOTRDFXML  implements ReaderRIOT
+public class ReaderRIOTRDFXML implements ReaderRIOT
 {
     public static class Factory implements ReaderRIOTFactory {
         @Override
@@ -63,7 +66,9 @@ public class ReaderRIOTRDFXML  implements ReaderRIOT
     private String xmlBase ;
     private String filename ;
     private StreamRDF sink ;
-    private ErrorHandler errorHandler; 
+    private ErrorHandler errorHandler;
+
+    private Context context; 
     
     public ReaderRIOTRDFXML(ErrorHandler errorHandler) {
         this.errorHandler = errorHandler; 
@@ -75,6 +80,7 @@ public class ReaderRIOTRDFXML  implements ReaderRIOT
         this.xmlBase = baseURI_RDFXML(baseURI) ;
         this.filename = baseURI ;
         this.sink = output ;
+        this.context = context;
         parse();
     }
 
@@ -84,6 +90,7 @@ public class ReaderRIOTRDFXML  implements ReaderRIOT
         this.xmlBase = baseURI_RDFXML(baseURI) ;
         this.filename = baseURI ;
         this.sink = output ;
+        this.context = context;
         parse();
     }
     
@@ -107,6 +114,37 @@ public class ReaderRIOTRDFXML  implements ReaderRIOT
     // It's a pragmatic compromise.
     private static boolean errorForSpaceInURI = true;
     
+    // Extracted from org.apache.jena.rdfxml.xmlinput.JenaReader
+    private void oneProperty(ARPOptions options, String pName, Object value) {
+        if (! pName.startsWith("ERR_") && ! pName.startsWith("IGN_") && ! pName.startsWith("WARN_"))
+            return ;
+        int cond = ParseException.errorCode(pName);
+        if (cond == -1)
+            throw new RiotException("No such ARP property: '"+pName+"'");
+        int val;
+        if (value instanceof String) {
+            if (!((String) value).startsWith("EM_"))
+                throw new RiotException("Value for ARP property does not start EM_: '"+pName+"' = '"+value+"'" );
+            val = ParseException.errorCode((String) value);
+            if (val == -1 )
+                throw new RiotException("Illegal value for ARP property: '"+pName+"' = '"+value+"'" );
+        } else if (value instanceof Integer) {
+            val = ((Integer) value).intValue();
+            switch (val) {
+                case ARPErrorNumbers.EM_IGNORE:
+                case ARPErrorNumbers.EM_WARNING:
+                case ARPErrorNumbers.EM_ERROR:
+                case ARPErrorNumbers.EM_FATAL:
+                    break;
+                default:
+                    throw new RiotException("Illegal value for ARP property: '"+pName+"' = '"+value+"'" );
+            }
+        } else {
+            throw new RiotException("Property \"" + pName + "\" cannot have value: " + value.toString());
+        }
+        options.setErrorMode(cond, val);
+    }
+    
     public void parse() {
         // Hacked out of ARP because of all the "private" methods
         // JenaReader has reset the options since new ARP() was called.
@@ -116,17 +154,29 @@ public class ReaderRIOTRDFXML  implements ReaderRIOT
         arp.getHandlers().setErrorHandler(rslt) ;
         arp.getHandlers().setNamespaceHandler(rslt) ;
 
+        // ARPOptions.
+        ARPOptions arpOptions = arp.getOptions() ;
         if ( RiotUniformCompatibility ) {
-            ARPOptions options = arp.getOptions() ;
             // Convert some warnings to errors for compatible behaviour for all parsers.
             for ( int code : additionalErrors )
-                options.setErrorMode(code, ARPErrorNumbers.EM_ERROR) ;
-            arp.setOptionsWith(options) ;
+                arpOptions.setErrorMode(code, ARPErrorNumbers.EM_ERROR) ;
         }
         
         if ( JenaRuntime.isRDF11 )
             arp.getOptions().setIRIFactory(IRIResolver.iriFactory());
 
+        if ( context != null ) {
+            try { 
+                @SuppressWarnings("unchecked")
+                Map<String, Object> p = (Map<String, Object>)(context.get(SysRIOT.sysRdfReaderProperties)) ;
+                if ( p != null )
+                    p.forEach((k,v) -> oneProperty(arpOptions, k, v)) ;
+            } catch (Throwable ex) {
+                Log.warn(AdapterRDFWriter.class, "Problem setting properties", ex);
+            }
+        }
+        arp.setOptionsWith(arpOptions) ;
+        
         try {
             if ( reader != null )
                 arp.load(reader, xmlBase) ;

http://git-wip-us.apache.org/repos/asf/jena/blob/9237d24a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/JenaReader.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/JenaReader.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/JenaReader.java
index 3f1c6f0..1c5c1b8 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/JenaReader.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmlinput/JenaReader.java
@@ -498,8 +498,7 @@ public class JenaReader implements RDFReader, ARPErrorNumbers {
             return old;
 
         }
-        if (str.startsWith("ERR_") || str.startsWith("IGN_")
-                || str.startsWith("WARN_")) {
+        if (str.startsWith("ERR_") || str.startsWith("IGN_") || str.startsWith("WARN_")) {
             int cond = ParseException.errorCode(str);
             if (cond == -1) {
                 // error, see end of function.