Return-Path: X-Original-To: apmail-jena-commits-archive@www.apache.org Delivered-To: apmail-jena-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CBE35DC62 for ; Sat, 14 Jul 2012 21:24:12 +0000 (UTC) Received: (qmail 25373 invoked by uid 500); 14 Jul 2012 21:24:12 -0000 Delivered-To: apmail-jena-commits-archive@jena.apache.org Received: (qmail 25349 invoked by uid 500); 14 Jul 2012 21:24:12 -0000 Mailing-List: contact commits-help@jena.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jena.apache.org Delivered-To: mailing list commits@jena.apache.org Received: (qmail 25342 invoked by uid 99); 14 Jul 2012 21:24:12 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 14 Jul 2012 21:24:12 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 14 Jul 2012 21:24:10 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 11F6E2388962 for ; Sat, 14 Jul 2012 21:23:51 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1361588 - in /jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader: ./ fm2/ Date: Sat, 14 Jul 2012 21:23:50 -0000 To: commits@jena.apache.org From: andy@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120714212351.11F6E2388962@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: andy Date: Sat Jul 14 21:23:49 2012 New Revision: 1361588 URL: http://svn.apache.org/viewvc?rev=1361588&view=rev Log: (empty) Added: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/PROCESS.java Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/HttpOp2.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Lang2.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Langs.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/MainWebReader.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOT.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOTBase.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/TypedInputStream2.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/WebReader2.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorClassLoader.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorFile2.java jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorZip.java Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/HttpOp2.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/HttpOp2.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/HttpOp2.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/HttpOp2.java Sat Jul 14 21:23:49 2012 @@ -76,7 +76,7 @@ public class HttpOp2 } - MediaType mt = new MediaType(entity.getContentType().getValue()) ; + MediaType mt = MediaType.create(entity.getContentType().getValue()) ; if ( WebReader2.log.isDebugEnabled() ) WebReader2.log.debug(format("[%d] %d %s :: %s",id, statusLine.getStatusCode(), statusLine.getReasonPhrase() , mt)) ; Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Lang2.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Lang2.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Lang2.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Lang2.java Sat Jul 14 21:23:49 2012 @@ -18,37 +18,43 @@ package projects.riot_reader; -import java.util.UUID ; +import org.openjena.atlas.web.ContentType ; public class Lang2 { + public static final Lang2 RDFXML = Langs.langRDFXML ; + public static final Lang2 NTRIPLES = Langs.langNTriples ; + public static final Lang2 N3 = Langs.langN3 ; + public static final Lang2 TURTLE = Langs.langTurtle ; + public static final Lang2 RDFJSON = Langs.langRDFJSON ; + + public static final Lang2 NQUADS = Langs.langNQuads ; + public static final Lang2 TRIG = Langs.langTriG ; + private final String label ; + private final ContentType contentType ; /** Create a language with a well-known name, * All languages with the same name will be treated as the same language. */ - static public Lang2 create(String label) - { - return new Lang2(label) ; - } - - /** Create an unnamed language. Using language with well-known unique names is better. */ - static public Lang2 create() + static public Lang2 create(String label, String mediaType) { - return new Lang2(UUID.randomUUID().toString()) ; + return new Lang2(label, mediaType) ; } - protected Lang2(String label) + protected Lang2(String label, String mediaType) { if ( label == null ) throw new IllegalArgumentException("Null not allowed for language name") ; else label = label.intern(); this.label = label ; + this.contentType = mediaType==null ? null : ContentType.parse(mediaType) ; } - - protected Lang2(Lang2 other) { this.label = other.label ; } + + public boolean isTriples() { return Langs.isTriples(this) ; } + public boolean isQuads() { return Langs.isQuads(this) ; } @Override public int hashCode() { return label.hashCode() ; } @@ -65,8 +71,9 @@ public class Lang2 return this.label == otherLang.label ; // String interning. } - public String getName() { return label ; } + public String getName() { return label ; } + public ContentType getContentType() { return contentType ; } @Override - public String toString() { return label ; } + public String toString() { return "Lang:"+label ; } } Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Langs.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Langs.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Langs.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/Langs.java Sat Jul 14 21:23:49 2012 @@ -24,8 +24,9 @@ import java.util.Map ; import org.openjena.atlas.lib.DS ; import org.openjena.atlas.lib.MultiMap ; import org.openjena.atlas.lib.Sink ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; import org.openjena.riot.Lang ; +import org.openjena.riot.RiotException ; import org.openjena.riot.RiotReader ; import org.openjena.riot.WebContent ; import org.openjena.riot.lang.LangRIOT ; @@ -33,22 +34,24 @@ import org.openjena.riot.lang.LangRIOT ; import com.hp.hpl.jena.graph.Triple ; import com.hp.hpl.jena.sparql.core.Quad ; import com.hp.hpl.jena.sparql.util.Context ; +import com.hp.hpl.jena.util.FileUtils ; public class Langs { // Constants and wiring. - // Languages as constants. Lang is an "open enum" (you can add your own), - // registered with their MIME type or official name, - static Lang2 langRDFXML = Lang2.create(WebContent.contentTypeRDFXML) ; - static Lang2 langTurtle = Lang2.create(WebContent.contentTypeTurtle) ; - static Lang2 langNTriples = Lang2.create(WebContent.contentTypeNTriplesAlt) ; // Exception: not text/plain. - static Lang2 langN3 = Lang2.create(WebContent.contentTypeN3) ; - static Lang2 langRDFJSON = Lang2.create(WebContent.contentTypeRDFJSON) ; + // Languages as constants. + // Lang is an "open enum" (you can add your own), + // Registered with their MIME type or official name, + static Lang2 langRDFXML = Lang2.create("RDF/XML", WebContent.contentTypeRDFXML) ; + static Lang2 langTurtle = Lang2.create("Turtle", WebContent.contentTypeTurtle) ; + static Lang2 langNTriples = Lang2.create("N-Triples", WebContent.contentTypeNTriplesAlt) ; // Exception: not text/plain. + static Lang2 langN3 = Lang2.create("N3", WebContent.contentTypeN3) ; + static Lang2 langRDFJSON = Lang2.create("RDF/JSON", WebContent.contentTypeRDFJSON) ; // JSON-LD - static Lang2 langNQuads = Lang2.create(WebContent.contentTypeNQuads) ; - static Lang2 langTriG = Lang2.create(WebContent.contentTypeTriG) ; + static Lang2 langNQuads = Lang2.create("NQuads", WebContent.contentTypeNQuads) ; + static Lang2 langTriG = Lang2.create("TriG", WebContent.contentTypeTriG) ; private static Map> langToTriples = DS.map() ; private static Map> langToQuads = DS.map() ; @@ -94,7 +97,8 @@ public class Langs Lang lang = convert(language) ; LangRIOT parser = RiotReader.createParserQuads(in, lang, baseURI, sink) ; parser.parse() ; - }} ; + } + } ; } } ; @@ -221,23 +225,40 @@ public class Langs // ** Lang upgrade. + public static boolean isTriples(Lang2 lang) { return langToTriples.containsKey(lang) ; } + public static boolean isQuads(Lang2 lang) { return langToQuads.containsKey(lang) ; } + + + /** Guess the language, based on filename, or URL, extenstion. + * Returns null if there isn't a guess available + */ public static ContentType guessContentType(String filenameOrIRI) { - Lang lang = Lang.guess(filenameOrIRI) ; - String contentType = WebContent.mapLangToContentType(lang) ; - String charset = WebContent.getCharsetForContentType(contentType) ; - return ContentType.create(contentType, charset) ; + Lang2 lang = guess(filenameOrIRI) ; + if ( lang == null ) return null ; + return lang.getContentType() ; } - - //** Merge with Lang.guess - public static Lang2 guess(String resourceIRI, Lang2 dftLang) + + public static Lang2 guess(String resourceIRI) { - return convert(Lang.guess(resourceIRI, convert(dftLang))) ; + if ( resourceIRI == null ) + return null ; + String ext = FileUtils.getFilenameExt(resourceIRI).toLowerCase() ; + if ( ext != null && ext.equals("gz") ) + { + resourceIRI = resourceIRI.substring(0, resourceIRI.length()-".gz".length()) ; + ext = FileUtils.getFilenameExt(resourceIRI).toLowerCase() ; + } + + return extToLang.get(ext) ; } - public static Lang2 guess(String resourceIRI) + //** Merge with Lang.guess + public static Lang2 guess(String resourceIRI, Lang2 dftLang) { - return convert(Lang.guess(resourceIRI)) ; + Lang2 lang = guess(resourceIRI) ; + if ( lang == null ) return dftLang ; + return lang ; } /** Attempt to guess the content type string from a language name */ @@ -245,50 +266,26 @@ public class Langs { return jenaNameToContentType(jenaShortName, null) ; } - + /** Attempt to guess the content type string from a language name */ public static String jenaNameToContentType(String jenaShortName, String dft) { - Lang2 lang = Lang2.create(jenaShortName) ; - String str = jenaName.get(lang).getName() ; - if ( str == null ) + Lang2 lang = jenaName.get(jenaShortName) ; + if ( lang == null ) return dft ; - return str ; + return lang.getContentType().getContentType() ; } - // Temporary. - private static Lang2 convert(Lang lang) + private static Lang convert(Lang2 language) { - if (lang == null) return null ; - switch(lang) - { - case N3 : return langN3 ; - case NTRIPLES : return langNTriples ; - case RDFJSON : return langRDFJSON ; - case RDFXML : return langRDFXML ; - case TURTLE : return langTurtle ; - case NQUADS : return langNQuads ; - case TRIG : return langTriG ; - } - return null ; + if ( language.equals(langRDFXML)) return Lang.RDFXML ; + if ( language.equals(langTurtle)) return Lang.TURTLE ; + if ( language.equals(langNTriples)) return Lang.NTRIPLES ; + if ( language.equals(langNQuads)) return Lang.NQUADS ; + if ( language.equals(langTriG)) return Lang.TRIG ; + if ( language.equals(langN3)) return Lang.N3 ; + if ( language.equals(langRDFJSON)) return Lang.RDFJSON ; + throw new RiotException("Can't convert: "+language) ; } - // Temporary. - private static Lang convert(Lang2 lang) - { - if ( lang == null) return null ; - if ( lang.equals(langRDFXML) ) return Lang.RDFXML ; - if ( lang.equals(langTurtle) ) return Lang.TURTLE ; - if ( lang.equals(langNTriples) ) return Lang.NTRIPLES ; - if ( lang.equals(langN3) ) return Lang.N3 ; - if ( lang.equals(langRDFJSON) ) return Lang.RDFJSON ; - - if ( lang.equals(langNQuads) ) return Lang.NQUADS ; - if ( lang.equals(langTriG) ) return Lang.TRIG ; - return null ; - } - - - - } Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/MainWebReader.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/MainWebReader.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/MainWebReader.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/MainWebReader.java Sat Jul 14 21:23:49 2012 @@ -28,6 +28,8 @@ public class MainWebReader { public static void main(String ... argv) { + + WebReader2.wireIntoJena() ; Log.enable(WebReader2.class) ; Added: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/PROCESS.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/PROCESS.java?rev=1361588&view=auto ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/PROCESS.java (added) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/PROCESS.java Sat Jul 14 21:23:49 2012 @@ -0,0 +1,72 @@ +/** + * 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 projects.riot_reader; + +/** Not a class. */ + +public class PROCESS +{ + // Lang/Lang2 + // Use of Lang as an enum in switch statements. + // + + // Add RDF-XML/ABBREV to reader path + + /* + * Design notes + * There are functions (static methods) for reading various kinds of "thing", + * streams of triples or quads. + * + * Later: result sets, (other?) + * + * The lifecycle of a "read" action is: + * open -> TypeInputStream + * process + * ts.close + * + * Open issues: + * How to make this extensible - people want add readers (e.g. GRDDL, RDFa, + * microdata, microsformats). But we don't want to require + * Jena needing to supply each and every kind of parser as a core + * feature. + * + * To Do + * Sort out ContentType vs MediaType + * Sort out constants and naming + * Should this be "Lang" driven - make Lang extensible (use Symbol). + * Pull in stuff (tables) from Langs. + + public class WebReader2 + /* TODO + * 1/ ContentType vs MediaType // ContentType - little used but better? + * 3/ static for global (singleton) and locally tailored. + */ + + /* + public class JenaIOEnvironment + { + // TODO Singletons + + public class StreamManager + { + // Need to combine with IO to do the .gz and "-" things. + */ + +} + Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOT.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOT.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOT.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOT.java Sat Jul 14 21:23:49 2012 @@ -21,7 +21,7 @@ package projects.riot_reader; import java.io.InputStream ; import org.openjena.atlas.lib.Sink ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; import com.hp.hpl.jena.sparql.util.Context ; Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOTBase.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOTBase.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOTBase.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/ReaderRIOTBase.java Sat Jul 14 21:23:49 2012 @@ -21,7 +21,7 @@ package projects.riot_reader; import java.io.InputStream ; import org.openjena.atlas.lib.Sink ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; import com.hp.hpl.jena.sparql.util.Context ; Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/TypedInputStream2.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/TypedInputStream2.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/TypedInputStream2.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/TypedInputStream2.java Sat Jul 14 21:23:49 2012 @@ -21,7 +21,7 @@ package projects.riot_reader; import java.io.InputStream; import org.openjena.atlas.io.IO ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; public class TypedInputStream2 { Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/WebReader2.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/WebReader2.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/WebReader2.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/WebReader2.java Sat Jul 14 21:23:49 2012 @@ -19,6 +19,7 @@ package projects.riot_reader; import org.openjena.atlas.lib.Sink ; +import org.openjena.atlas.web.ContentType ; import org.openjena.riot.* ; import org.openjena.riot.lang.SinkQuadsToDataset ; import org.openjena.riot.lang.SinkTriplesToGraph ; @@ -51,30 +52,6 @@ import com.hp.hpl.jena.sparql.util.Utils * Extensible - a new syntax can be added to the framework. *

*/ -/* - * Design notes - * There are functions (static methods) for reading various kinds of "thing", - * streams of triples or quads. - * - * Later: result sets, (other?) - * - * The lifecycle of a "read" action is: - * open -> TypeInputStream - * process - * ts.close - * - * Open issues: - * How to make this extensible - people want add readers (e.g. GRDDL, RDFa, - * microdata, microsformats). But we don't want to require - * Jena needing to supply each and every kind of parser as a core - * feature. - * - * To Do - * Sort out ContentType vs MediaType - * Sort out constants and naming - * Should this be "Lang" driven - make Lang extensible (use Symbol). - * Pull in stuff (tables) from Langs. - */ public class WebReader2 { Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorClassLoader.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorClassLoader.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorClassLoader.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorClassLoader.java Sat Jul 14 21:23:49 2012 @@ -20,7 +20,7 @@ package projects.riot_reader.fm2; import java.io.InputStream ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; import projects.riot_reader.Langs ; Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorFile2.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorFile2.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorFile2.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorFile2.java Sat Jul 14 21:23:49 2012 @@ -25,7 +25,7 @@ import java.io.InputStream ; import java.security.AccessControlException ; import org.openjena.atlas.lib.IRILib ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; import projects.riot_reader.Langs ; Modified: jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorZip.java URL: http://svn.apache.org/viewvc/jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorZip.java?rev=1361588&r1=1361587&r2=1361588&view=diff ============================================================================== --- jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorZip.java (original) +++ jena/Scratch/AFS/Dev/trunk/src/main/java/projects/riot_reader/fm2/LocatorZip.java Sat Jul 14 21:23:49 2012 @@ -23,7 +23,7 @@ import java.io.InputStream ; import java.util.zip.ZipEntry ; import java.util.zip.ZipFile ; -import org.openjena.riot.ContentType ; +import org.openjena.atlas.web.ContentType ; import org.slf4j.Logger ; import org.slf4j.LoggerFactory ; import projects.riot_reader.Langs ;