You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by di...@gmail.com,
di...@gmail.com on 2018/08/02 21:17:39 UTC
Custom Literal casting when converting from Json-LD to Jena Model
I'm converting a JSON-LD input to RDF using Jena:
Model m = ModelFactory.createDefaultModel;
String str_reader = new StringReader(json.noSpaces)
RDFDataMgr.read(m, str_reader, "", RDFFormat.JSONLD.getLang)
I want to be able to have a custom serializer for String Literals. My end goal is to convert a plain String literal to a xsd:date or xsd:dateTime Literal whenever a desired format is found.
I know this is handled by jsonld-java which in turn relies on jackson. Is there anyone who can give me a hint on how to add this type of custom serialization?
Re: Custom Literal casting when converting from Json-LD to Jena Model
Posted by di...@gmail.com,
di...@gmail.com.
On 2018/08/03 12:44:25, Andy Seaborne <an...@apache.org> wrote:
> Extend StreamRDFWrapper and call super.triple() otherwise the data will
> not flow down the pipeline. There are prefixes as well and quads if the
> input is trig etc.
>
> @Override
> public void triple(Triple triple) {
> ... process triple ... create newTriple ...
> super.triple(newTriple);
> }
>
> Andy
>
>
> On 03/08/18 12:53, ajs6f wrote:
> >> Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
> >
> > That's a reasonable option, or try StreamRDFWrapper [1] and override where appropriate. Keep in mind that triple-level processing can occur well after parsing, if that's what makes sense for your application; although you won't have the advantages of streaming, you will have random-access to the rest of your data.
> >
> > ajs6f
> >
> > [1] https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/riot/system/StreamRDFWrapper.html
> >
> >> On Aug 3, 2018, at 7:33 AM, didac.montero.mendez@gmail.com wrote:
> >>
> >>
> >>
> >> On 2018/08/03 10:10:34, Andy Seaborne <an...@apache.org> wrote:
> >>>
> >>>
> >>> On 02/08/18 22:17, didac.montero.mendez@gmail.com wrote:
> >>>> I'm converting a JSON-LD input to RDF using Jena:
> >>>>
> >>>> Model m = ModelFactory.createDefaultModel;
> >>>> String str_reader = new StringReader(json.noSpaces)
> >>>> RDFDataMgr.read(m, str_reader, "", RDFFormat.JSONLD.getLang)
> >>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >>> Lang.JSONLD
> >>>
> >>>> I want to be able to have a custom serializer for String Literals. My end goal is to convert a plain String literal to a xsd:date or xsd:dateTime Literal whenever a desired format is found.
> >>>
> >>> Look at StreamRDF and RDFDataMgr.parse
> >>> (or build your parser for more control with RDFParser.create())
> >>>
> >>> All parsers send their output to a output to a StreamRDF.
> >>>
> >>> RDFDataMgr.read uses a StreamRDF that puts triples/quads into a graph.
> >>>
> >>>
> >>> StreamRDFs combine so you can build a pipeline
> >>>
> >>> Parser -> convert strings -> store in graph.
> >>>
> >>> Streams as well so works for large data if the syntax streams (JSON-LD
> >>> does not).
> >>>
> >>>> I know this is handled by jsonld-java which in turn relies on jackson. Is there anyone who can give me a hint on how to add this type of custom serialization?
> >>>
> >>> Jackson is the JSON parser.
> >>>
> >>> jsonld-java is the JSON-LD algorithms.
> >>>
> >>> What you seem to want is triple processing and be syntax agnostic.
> >>>
> >>> Andy
> >>>
> >> Thanks for your reply. That's informative. I see that I can use RDFParser.create() to customize the StreamRDF (using RDFParser.create().parse(stream)).
> >>
> >> Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
> >
> That's exactly what I did. Thanks for the clear answers. It has been very helpful.
Re: Custom Literal casting when converting from Json-LD to Jena Model
Posted by Andy Seaborne <an...@apache.org>.
Extend StreamRDFWrapper and call super.triple() otherwise the data will
not flow down the pipeline. There are prefixes as well and quads if the
input is trig etc.
@Override
public void triple(Triple triple) {
... process triple ... create newTriple ...
super.triple(newTriple);
}
Andy
On 03/08/18 12:53, ajs6f wrote:
>> Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
>
> That's a reasonable option, or try StreamRDFWrapper [1] and override where appropriate. Keep in mind that triple-level processing can occur well after parsing, if that's what makes sense for your application; although you won't have the advantages of streaming, you will have random-access to the rest of your data.
>
> ajs6f
>
> [1] https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/riot/system/StreamRDFWrapper.html
>
>> On Aug 3, 2018, at 7:33 AM, didac.montero.mendez@gmail.com wrote:
>>
>>
>>
>> On 2018/08/03 10:10:34, Andy Seaborne <an...@apache.org> wrote:
>>>
>>>
>>> On 02/08/18 22:17, didac.montero.mendez@gmail.com wrote:
>>>> I'm converting a JSON-LD input to RDF using Jena:
>>>>
>>>> Model m = ModelFactory.createDefaultModel;
>>>> String str_reader = new StringReader(json.noSpaces)
>>>> RDFDataMgr.read(m, str_reader, "", RDFFormat.JSONLD.getLang)
>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>> Lang.JSONLD
>>>
>>>> I want to be able to have a custom serializer for String Literals. My end goal is to convert a plain String literal to a xsd:date or xsd:dateTime Literal whenever a desired format is found.
>>>
>>> Look at StreamRDF and RDFDataMgr.parse
>>> (or build your parser for more control with RDFParser.create())
>>>
>>> All parsers send their output to a output to a StreamRDF.
>>>
>>> RDFDataMgr.read uses a StreamRDF that puts triples/quads into a graph.
>>>
>>>
>>> StreamRDFs combine so you can build a pipeline
>>>
>>> Parser -> convert strings -> store in graph.
>>>
>>> Streams as well so works for large data if the syntax streams (JSON-LD
>>> does not).
>>>
>>>> I know this is handled by jsonld-java which in turn relies on jackson. Is there anyone who can give me a hint on how to add this type of custom serialization?
>>>
>>> Jackson is the JSON parser.
>>>
>>> jsonld-java is the JSON-LD algorithms.
>>>
>>> What you seem to want is triple processing and be syntax agnostic.
>>>
>>> Andy
>>>
>> Thanks for your reply. That's informative. I see that I can use RDFParser.create() to customize the StreamRDF (using RDFParser.create().parse(stream)).
>>
>> Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
>
Re: Custom Literal casting when converting from Json-LD to Jena Model
Posted by ajs6f <aj...@apache.org>.
> Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
That's a reasonable option, or try StreamRDFWrapper [1] and override where appropriate. Keep in mind that triple-level processing can occur well after parsing, if that's what makes sense for your application; although you won't have the advantages of streaming, you will have random-access to the rest of your data.
ajs6f
[1] https://jena.apache.org/documentation/javadoc/arq/org/apache/jena/riot/system/StreamRDFWrapper.html
> On Aug 3, 2018, at 7:33 AM, didac.montero.mendez@gmail.com wrote:
>
>
>
> On 2018/08/03 10:10:34, Andy Seaborne <an...@apache.org> wrote:
>>
>>
>> On 02/08/18 22:17, didac.montero.mendez@gmail.com wrote:
>>> I'm converting a JSON-LD input to RDF using Jena:
>>>
>>> Model m = ModelFactory.createDefaultModel;
>>> String str_reader = new StringReader(json.noSpaces)
>>> RDFDataMgr.read(m, str_reader, "", RDFFormat.JSONLD.getLang)
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> Lang.JSONLD
>>
>>> I want to be able to have a custom serializer for String Literals. My end goal is to convert a plain String literal to a xsd:date or xsd:dateTime Literal whenever a desired format is found.
>>
>> Look at StreamRDF and RDFDataMgr.parse
>> (or build your parser for more control with RDFParser.create())
>>
>> All parsers send their output to a output to a StreamRDF.
>>
>> RDFDataMgr.read uses a StreamRDF that puts triples/quads into a graph.
>>
>>
>> StreamRDFs combine so you can build a pipeline
>>
>> Parser -> convert strings -> store in graph.
>>
>> Streams as well so works for large data if the syntax streams (JSON-LD
>> does not).
>>
>>> I know this is handled by jsonld-java which in turn relies on jackson. Is there anyone who can give me a hint on how to add this type of custom serialization?
>>
>> Jackson is the JSON parser.
>>
>> jsonld-java is the JSON-LD algorithms.
>>
>> What you seem to want is triple processing and be syntax agnostic.
>>
>> Andy
>>
> Thanks for your reply. That's informative. I see that I can use RDFParser.create() to customize the StreamRDF (using RDFParser.create().parse(stream)).
>
> Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
Re: Custom Literal casting when converting from Json-LD to Jena Model
Posted by di...@gmail.com,
di...@gmail.com.
On 2018/08/03 10:10:34, Andy Seaborne <an...@apache.org> wrote:
>
>
> On 02/08/18 22:17, didac.montero.mendez@gmail.com wrote:
> > I'm converting a JSON-LD input to RDF using Jena:
> >
> > Model m = ModelFactory.createDefaultModel;
> > String str_reader = new StringReader(json.noSpaces)
> > RDFDataMgr.read(m, str_reader, "", RDFFormat.JSONLD.getLang)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Lang.JSONLD
>
> > I want to be able to have a custom serializer for String Literals. My end goal is to convert a plain String literal to a xsd:date or xsd:dateTime Literal whenever a desired format is found.
>
> Look at StreamRDF and RDFDataMgr.parse
> (or build your parser for more control with RDFParser.create())
>
> All parsers send their output to a output to a StreamRDF.
>
> RDFDataMgr.read uses a StreamRDF that puts triples/quads into a graph.
>
>
> StreamRDFs combine so you can build a pipeline
>
> Parser -> convert strings -> store in graph.
>
> Streams as well so works for large data if the syntax streams (JSON-LD
> does not).
>
> > I know this is handled by jsonld-java which in turn relies on jackson. Is there anyone who can give me a hint on how to add this type of custom serialization?
>
> Jackson is the JSON parser.
>
> jsonld-java is the JSON-LD algorithms.
>
> What you seem to want is triple processing and be syntax agnostic.
>
> Andy
>
Thanks for your reply. That's informative. I see that I can use RDFParser.create() to customize the StreamRDF (using RDFParser.create().parse(stream)).
Since I want triple processing...is extending the StreamRDFBase and overriding the method `public void triple(Triple triple)` an option? Is it the best option?
Re: Custom Literal casting when converting from Json-LD to Jena Model
Posted by Andy Seaborne <an...@apache.org>.
On 02/08/18 22:17, didac.montero.mendez@gmail.com wrote:
> I'm converting a JSON-LD input to RDF using Jena:
>
> Model m = ModelFactory.createDefaultModel;
> String str_reader = new StringReader(json.noSpaces)
> RDFDataMgr.read(m, str_reader, "", RDFFormat.JSONLD.getLang)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Lang.JSONLD
> I want to be able to have a custom serializer for String Literals. My end goal is to convert a plain String literal to a xsd:date or xsd:dateTime Literal whenever a desired format is found.
Look at StreamRDF and RDFDataMgr.parse
(or build your parser for more control with RDFParser.create())
All parsers send their output to a output to a StreamRDF.
RDFDataMgr.read uses a StreamRDF that puts triples/quads into a graph.
StreamRDFs combine so you can build a pipeline
Parser -> convert strings -> store in graph.
Streams as well so works for large data if the syntax streams (JSON-LD
does not).
> I know this is handled by jsonld-java which in turn relies on jackson. Is there anyone who can give me a hint on how to add this type of custom serialization?
Jackson is the JSON parser.
jsonld-java is the JSON-LD algorithms.
What you seem to want is triple processing and be syntax agnostic.
Andy