Thanks.

Laurent

On Thu, Sep 22, 2011 at 1:29 PM, Andy Seaborne <[email protected]> wrote:
> On 22/09/11 10:09, Laurent Pellegrino wrote:
>>
>> Hi all,
>>
>> It seems it is impossible to use the BIO serializer/deserializer with
>> data which are not retrieved from a dataset.
>>
>> Hereafter is a simple usecase:
>>
>>        ByteArrayOutputStream baos = new ByteArrayOutputStream();
>>
>>         Binding b = BindingFactory.create();
>>         b.add(Var.alloc("test"), Node.createLiteral("21",
>> XSDDatatype.XSDint));
>>
>>         BindingOutputStream bos = new BindingOutputStream(baos);
>>         bos.write(b);
>>         bos.close();
>>
>>         BindingInputStream bis =
>>                 new BindingInputStream(new ByteArrayInputStream(
>>                         baos.toByteArray()));
>>
>>         System.out.println(bis.next());
>>
>> When I try to serialize a binding which contains a Node annotated as
>> XSDDatatype.XSD*basicType* (e.g. XSDDatatype.XSDint,
>> XSDDatatype.XSDlong), I get:
>>
>> Exception in thread "main" org.openjena.riot.RiotException: [line: 2,
>> col: 7 ] Undefined prefix: xsd
>>        at
>> org.openjena.riot.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:110)
>>        at
>> org.openjena.riot.system.ParserProfileBase.expandPrefixedName(ParserProfileBase.java:209)
>>        at
>> org.openjena.riot.system.ParserProfileBase.create(ParserProfileBase.java:173)
>>        at
>> com.hp.hpl.jena.sparql.engine.binding.BindingInputStream$IteratorTuples.moveToNext(BindingInputStream.java:194)
>>        at
>> com.hp.hpl.jena.sparql.engine.binding.BindingInputStream$IteratorTuples.moveToNext(BindingInputStream.java:139)
>>        at
>> org.openjena.atlas.iterator.IteratorSlotted.hasNext(IteratorSlotted.java:55)
>>        at
>> org.openjena.atlas.iterator.IteratorSlotted.next(IteratorSlotted.java:64)
>>        at
>> com.hp.hpl.jena.sparql.engine.binding.BindingInputStream.next(BindingInputStream.java:129)
>>
>> However, when XSDDatatype.XSDinteger is used it works. Indeed, if I
>> have understood, data which are inserted into a dataset with tags
>> XSDDatatype.XSDint or XSDDatatype.XSDlong are automatically translated
>> to XSDDatatype.XSDinteger which uses an arbitrary precision. Is it not
>> possible to adapt the RIOT parser to accept default XSD types?
>>
>> Kind Regards,
>>
>> Laurent
>
> Laurent,
>
> Thanks for the test case.  The code mistakenly relied on the old FmtUtils to
> do formatting and that does default prefix mappings to make things human
> readable.  But we want machine readable.
>
> Defaulting would solve this particular problem but require bindings streams
> assume prefixes which isn't the intention.
>
> Fix applied in svn - uses the new NodeFormatter code (which was written but
> not integrated. That was the real mistake.)
>
>        Andy
>

Reply via email to