Having contentTypeToLang() return null is the designed behaviour because
its useful in a number of cases.

Where ARQ and Fuseki use it internally they typically try and convert a
Content-Type into a Lang, see if that returns null and if it does attempt
alternative means of detecting the language e.g. inspecting the file
extension.

Try searching for usages of RDFLanguages.contentTypeToLang() and looking
at the nearby code for examples of this

Rob

On 06/12/2013 14:32, "Martynas Jusevičius" <[email protected]> wrote:

>I tried supplying bogus Lang name to Model.read()/Model.write() and
>I'm getting NoReaderForLangException/NoWriterForLangException.
>
>Failing to map content type to Lang is not exactly the same situation
>however :) I cannot wrap the whole block in try/catch, still need to
>check if RDFLanguages.contentTypeToLang() returns null before calling
>read()/write().
>
>On Fri, Dec 6, 2013 at 1:39 PM, Andy Seaborne <[email protected]> wrote:
>> On 06/12/13 12:08, Martynas Jusevičius wrote:
>>>
>>> Thanks Andy. Yes looks like I have some upgrading to do...
>>>
>>> Can you provide more info about that FileManager adapter and how it
>>> works with OntDocumentManager?
>>
>>
>> AdapterFileManager extends FielManager.
>>
>> (But the old FileManager still works albeit old world I/O)
>>
>>
>>> Regarding static methods, I don't have a use case at hand, I was just
>>> wondering if that's a good design decision. I'm always trying to leave
>>> methods public and non-static, in case anyone needs to override them.
>>
>>
>> Pros and cons.  RDFDataMgr makes simple/common I/O simple.  You can set
>>the
>> complicated stuff if you want to.
>>
>>
>>> RDFLanguages seems useful, I was missing this functionality in the
>>> previous Jena version I used.
>>> Is there some Jena exception that would be appropriate to throw when
>>> RDFLanguages.contentTypeToLang() returns null? I.e. when the program
>>> does not support reading/writing a certain media type?
>>
>>
>> Have you tried? :-)
>>
>>         Andy
>>
>>
>>>
>>> Martynas
>>>
>>>
>>> On Fri, Dec 6, 2013 at 10:09 AM, Andy Seaborne <[email protected]> wrote:
>>>>
>>>> On 06/12/13 00:21, Martynas Jusevičius wrote:
>>>>>
>>>>>
>>>>> I was using SPIN API 1.3.0, I think it depends on ARQ 2.9.2. Now I
>>>>> switched to SPIN API 1.3.1 that depends on Jena 2.11.0.
>>>>
>>>>
>>>>
>>>> TopQuadrant only jump in large version steps so you may well find that
>>>> many
>>>> small steps have become one large step for you.  Not a lot we can do
>>>> about
>>>> that.
>>>>
>>>>
>>>>> I found the Lang class - there seems to be some overlap in
>>>>> functionality as well?
>>>>
>>>>
>>>>
>>>> Lang is the constant symbols.  No statics.
>>>>
>>>> RDFLanguages is the system registry.  You can add languages.
>>>>
>>>>
>>>>> I also started looking at RDFDataMgr, to see wether it could replace
>>>>> my DataManager (FileManager subclass) to do content negotiation and
>>>>> stuff. FileManager did a poor job at conneg, that's true, but I think
>>>>> RDFDataMgr is not a great solution either:
>>>>> - RDFDataMgr is not a subclass of FileManager, so it cannot be used
>>>>> with OntDocumentManager?
>>>>
>>>>
>>>>
>>>> There is a FileManager adapter that is installed.
>>>>
>>>>
>>>>> - why static methods? Cannot override :(
>>>>
>>>>
>>>>
>>>> What do you want to override?
>>>>
>>>>
>>>>> - is it possible to specify qualified media types for content
>>>>> negotiation? I mean different "q" values for different media types in
>>>>> the "Accept" header. I have an example that does that (which I'm now
>>>>> upgrading to Jena's new classes):
>>>>
>>>>
>>>>
>>>> The conneg accept headers are:
>>>>
>>>>
>>>> 
>>>>text/turtle,application/n-triples;q=0.9,application/rdf+xml;q=0.8,appli
>>>>cation/xml;q=0.7,*/*;q=0.5
>>>>
>>>>
>>>> 
>>>>application/trig,application/n-quads;q=0.9,text/x-nquads;q=0.8,applicat
>>>>ion/x-trig;q=0.7,*/*;q=0.5
>>>>
>>>>
>>>> 
>>>>text/turtle,application/n-triples;q=0.9,application/rdf+xml;q=0.8,appli
>>>>cation/xml;q=0.7,application/trig,application/n-quads;q=0.9,text/x-nqua
>>>>ds;q=0.8,application/x-trig;q=0.7,*/*;q=0.5
>>>>
>>>> or add your own org.apache.jena.riot.stream.Locator.
>>>>
>>>>>
>>>>>
>>>>> 
>>>>>https://github.com/Graphity/graphity-browser/blob/master/src/main/java
>>>>>/org/graphity/client/locator/LocatorLinkedData.java
>>>>
>>>>
>>>>
>>>> Locators still exist, albeit rewritten.
>>>>
>>>> Fixed
>>>>
>>>>
>>>>> - was a separate class necessary at all, if conneg can be handled by
>>>>>a
>>>>> Locator, as the example above shows?
>>>>
>>>>
>>>>
>>>> RDFDataMgr is not just about conneg.
>>>>
>>>> All the non-XML based readers and writer have been rewritten.
>>>>
>>>> Systematic handing of triples and quads.
>>>>
>>>> model.read(url) does full conneg.
>>>>
>>>> RDFDataMgr is the "one stop shop" for I/O.
>>>>
>>>>
>>>>> The JavaDoc states that "RDFDataMgr superceeds the FileManager" - but
>>>>> it doesn't look like it can be simply used as a replacement?
>>>>
>>>>
>>>>
>>>> No.
>>>>
>>>>>
>>>>>
>>>>> 
>>>>>http://jena.apache.org/documentation/io/rdf-input.html#example-2-using
>>>>>-the-rdfdatamgr
>>>>
>>>>
>>>>
>>>> and a few lines lower down:
>>>>
>>>> 
>>>>http://jena.apache.org/documentation/io/rdf-input.html#streammanager-an
>>>>d-locationmapper
>>>>
>>>>>
>>>>> Martynas
>>>>
>>>>
>>>>
>>>> You could submit a patch.
>>>>
>>>>          Andy
>>>>
>>>>
>>>>>
>>>>> On Fri, Dec 6, 2013 at 1:01 AM, Andy Seaborne <[email protected]>
>>>>>wrote:
>>>>>>
>>>>>>
>>>>>> Which version were you using?
>>>>>>
>>>>>> org.apache.jena.riot.WebContent
>>>>>> WebContent.contentTypeToLang
>>>>>>
>>>>>> but better:
>>>>>>
>>>>>> RDFLanguages.contentTypeToLang(String)
>>>>>>
>>>>>> and use constants not Strings.
>>>>>>
>>>>>>           Andy
>>>>>>
>>>>>>
>>>>>> On 05/12/13 22:57, Martynas Jusevičius wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Or rather, what functionality can replace langFromContentType()
>>>>>>>that I
>>>>>>> was using to convert media type to Jena syntax name:
>>>>>>>
>>>>>>>        String syntax = langFromContentType(in.getMimeType());
>>>>>>>        model.read(in.getInput(), filenameOrURI, syntax);
>>>>>>>
>>>>>>>
>>>>>>>        public static String langFromContentType(String mimeType)
>>>>>>>        {
>>>>>>>            if ( mimeType == null )
>>>>>>>                return null ;
>>>>>>>            return LANGS.get(mimeType.toLowerCase()) ;
>>>>>>>        }
>>>>>>>
>>>>>>>       public static final Map<String, String> LANGS = new
>>>>>>>HashMap<>()
>>>>>>> ;
>>>>>>>        static
>>>>>>>        {
>>>>>>>            LANGS.put(WebContent.contentTypeRDFXML,
>>>>>>> WebContent.langRDFXML);
>>>>>>> LANGS.put(WebContent.contentTypeTurtle, WebContent.langTurtle);
>>>>>>>          // snip
>>>>>>>        }
>>>>>>>
>>>>>>>
>>>>>>> Martynas
>>>>>>>
>>>>>>> On Thu, Dec 5, 2013 at 11:45 PM, Martynas Jusevičius
>>>>>>> <[email protected]> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hey,
>>>>>>>>
>>>>>>>> I'm using constants from org.openjena.riot.WebContent, such as
>>>>>>>> WebContent.contentTypeRDFXML, WebContent.langRDFXML etc.
>>>>>>>>
>>>>>>>> After upgrading to Jena 2.11.0 (as part of SPIN API 1.3.1), the
>>>>>>>> WebContent class is not there anymore. What can I use instead?
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>> Martynas
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>




Reply via email to