[
https://issues.apache.org/jira/browse/JENA-1567?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16526188#comment-16526188
]
Claude Warren commented on JENA-1567:
-------------------------------------
The issue is in the XML parser.
{{<trix xmlns="http://www.w3.org/2004/03/trix/trix-1/">}}
defines the default namespace.
{{ <typedLiteral datatype='...'>}}
uses the default namespace for the datatype attribute.
Our code gets the namespace for the prefix ""
our code:
{{ String attrPX = parser.getAttributePrefix(0) ;}}
{{ String attrNS = parser.getAttributeNamespace(0) ;}}
{{ if ( attrNS == null )}}
{{ attrNS = parser.getName().getNamespaceURI() ;}}
{{ String attrLN = parser.getAttributeLocalName(0) ;}}
{{ if ( ! Objects.equals(nsURI, attrNS) || ! Objects.equals(attrLN,
localname) ) {}}
{{ staxError(parser.getLocation(), "Unexpected attribute :
"+attrPX+":"+attrLN+" at "+tagName(parser)) ;}}
{{ }}}
parser.getAttributeNamespace(0) returns the empty string ("")
so the later if test:
{{Objects.equals(nsURI, attrNS)}}
fails and the staxError is called.
As I recall, XML parsers have an intersting problem with default namespaces are
used in the attributes in that some can not distinguish between the default
namespace and no namespace.
The solution is to modify
if ( attrNS == null )
to read
if ( attrNS == null || attrNS.equals(""))
I will attempt this fix as soon as I can. I have to update my git copy of the
code and make sure I can submit a proper patch.
> Trix deserialization does not respect default namepace
> ------------------------------------------------------
>
> Key: JENA-1567
> URL: https://issues.apache.org/jira/browse/JENA-1567
> Project: Apache Jena
> Issue Type: Bug
> Components: RIOT
> Affects Versions: Jena 3.6.0, Jena 3.7.0, Jena 3.8.0
> Reporter: Claude Warren
> Priority: Major
> Attachments: Y.java
>
>
> TriX output serialized by jena will produce xml that uses the default
> namespace.
> <trix xmlns="http://www.w3.org/2004/03/trix/trix-1/">
> <graph>
> <triple>
>
> <uri>urn:publicid:example.com:Device;67a2a324-cb08-30b2-b02d-096eceee933b;172.21.23.16</uri>
> <uri>[http://purl.org/dc/elements/1.1/title]</uri>
> <typedLiteral
> datatype="http://www.w3.org/2001/XMLSchema#string">172.21.23.16</typedLiteral>
> </triple>
> </graph>
> </trix>
>
> When the ReaderTrix class attempts to deserialize the xml the "datatype"
> attribute namespace is not properly detected.
>
> This appears to be in the
> {{private String attribute(XMLStreamReader parser, String nsURI, String
> localname)}}
>
> The problem appears to be that parser.getAttributePrefix() returns an empty
> string and parser.getAttributeNamespace() returns an emptry string (Not NULL)
> so we don't call parser.getName().getNamespaceURI() to set the attrNS value
> so the equality check fails and we throw an exception.
> I think that checking for "" should be added to the null check though " "
> should also probably call the parser.getName().getNamespaceURI() method.
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)