[ https://issues.apache.org/jira/browse/JENA-462?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stephen Allen updated JENA-462: ------------------------------- Description: URIs ending in a percent-encoded character cannot be written as a property in RDF/XML. Note that there is no problem using this URI in the subject or object positions, or using a different serialization like Turtle. It is also OK as long as the URI doesn't *end* in the percent encoded character. I'm not sure why BaseXMLWriter.java line 384 requires the ability to split predicate URIs into a namespace and local part. Is this a requirement of RDF/XML? Steps to Reproduce: 1) Start Fuseki 2) Perform following SPARQL Update: insert data { <http://example.org/Test> <http://example.org/Foo%27> "Foo" . } 3) Issue the following query (with XML selected as output): construct { ?s ?p "Foo" . } where { ?s ?p "Foo" . } Expected Results: Proper RDF/XML. Actual Results: com.hp.hpl.jena.shared.InvalidPropertyURIException: http://example.org/Foo%27 at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.splitTag(BaseXMLWriter.java:384) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.tag(BaseXMLWriter.java:396) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.startElementTag(BaseXMLWriter.java:355) at com.hp.hpl.jena.xmloutput.impl.Basic.writePredicate(Basic.java:101) at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:85) at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:74) at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:48) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:492) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:464) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:450) at org.apache.jena.fuseki.servlets.ResponseModel.doResponseModel(ResponseModel.java:121) at org.apache.jena.fuseki.servlets.SPARQL_Query.sendResults(SPARQL_Query.java:349) at org.apache.jena.fuseki.servlets.SPARQL_Query.execute(SPARQL_Query.java:255) at org.apache.jena.fuseki.servlets.SPARQL_Query.executeWithParameter(SPARQL_Query.java:215) at org.apache.jena.fuseki.servlets.SPARQL_Query.perform(SPARQL_Query.java:106) at org.apache.jena.fuseki.servlets.SPARQL_ServletBase.doCommonWorker(SPARQL_ServletBase.java:117) at org.apache.jena.fuseki.servlets.SPARQL_ServletBase.doCommon(SPARQL_ServletBase.java:67) at org.apache.jena.fuseki.servlets.SPARQL_Query.doGet(SPARQL_Query.java:86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:82) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:243) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:365) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) at org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run(BlockingChannelConnector.java:298) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread.java:662) was: URIs ending in a percent-encoded character cannot be written as a property in RDF/XML. Note that there is no problem using this URI in the subject or object positions, or using a different serialization like Turtle. I'm not sure why BaseXMLWriter.java line 384 requires the ability to split predicate URIs into a namespace and local part. Is this a requirement of RDF/XML? Steps to Reproduce: 1) Start Fuseki 2) Perform following SPARQL Update: insert data { <http://example.org/Test> <http://example.org/Foo%27> "Foo" . } 3) Issue the following query (with XML selected as output): construct { ?s ?p "Foo" . } where { ?s ?p "Foo" . } Expected Results: Proper RDF/XML. Actual Results: com.hp.hpl.jena.shared.InvalidPropertyURIException: http://example.org/Foo%27 at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.splitTag(BaseXMLWriter.java:384) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.tag(BaseXMLWriter.java:396) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.startElementTag(BaseXMLWriter.java:355) at com.hp.hpl.jena.xmloutput.impl.Basic.writePredicate(Basic.java:101) at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:85) at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:74) at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:48) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:492) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:464) at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:450) at org.apache.jena.fuseki.servlets.ResponseModel.doResponseModel(ResponseModel.java:121) at org.apache.jena.fuseki.servlets.SPARQL_Query.sendResults(SPARQL_Query.java:349) at org.apache.jena.fuseki.servlets.SPARQL_Query.execute(SPARQL_Query.java:255) at org.apache.jena.fuseki.servlets.SPARQL_Query.executeWithParameter(SPARQL_Query.java:215) at org.apache.jena.fuseki.servlets.SPARQL_Query.perform(SPARQL_Query.java:106) at org.apache.jena.fuseki.servlets.SPARQL_ServletBase.doCommonWorker(SPARQL_ServletBase.java:117) at org.apache.jena.fuseki.servlets.SPARQL_ServletBase.doCommon(SPARQL_ServletBase.java:67) at org.apache.jena.fuseki.servlets.SPARQL_Query.doGet(SPARQL_Query.java:86) at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:82) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:243) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:365) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) at org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run(BlockingChannelConnector.java:298) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread.java:662) > URIs ending in a percent-encoded character cannot be written as a property in > RDF/XML > ------------------------------------------------------------------------------------- > > Key: JENA-462 > URL: https://issues.apache.org/jira/browse/JENA-462 > Project: Apache Jena > Issue Type: Bug > Reporter: Stephen Allen > > URIs ending in a percent-encoded character cannot be written as a property in > RDF/XML. Note that there is no problem using this URI in the subject or > object positions, or using a different serialization like Turtle. It is also > OK as long as the URI doesn't *end* in the percent encoded character. > I'm not sure why BaseXMLWriter.java line 384 requires the ability to split > predicate URIs into a namespace and local part. Is this a requirement of > RDF/XML? > Steps to Reproduce: > 1) Start Fuseki > 2) Perform following SPARQL Update: > insert data { <http://example.org/Test> <http://example.org/Foo%27> > "Foo" . } > 3) Issue the following query (with XML selected as output): > construct { ?s ?p "Foo" . } where { ?s ?p "Foo" . } > Expected Results: > Proper RDF/XML. > Actual Results: > com.hp.hpl.jena.shared.InvalidPropertyURIException: http://example.org/Foo%27 > at > com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.splitTag(BaseXMLWriter.java:384) > at > com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.tag(BaseXMLWriter.java:396) > at > com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.startElementTag(BaseXMLWriter.java:355) > at com.hp.hpl.jena.xmloutput.impl.Basic.writePredicate(Basic.java:101) > at > com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:85) > at > com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFStatements(Basic.java:74) > at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:48) > at > com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:492) > at > com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:464) > at > com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:450) > at > org.apache.jena.fuseki.servlets.ResponseModel.doResponseModel(ResponseModel.java:121) > at > org.apache.jena.fuseki.servlets.SPARQL_Query.sendResults(SPARQL_Query.java:349) > at > org.apache.jena.fuseki.servlets.SPARQL_Query.execute(SPARQL_Query.java:255) > at > org.apache.jena.fuseki.servlets.SPARQL_Query.executeWithParameter(SPARQL_Query.java:215) > at > org.apache.jena.fuseki.servlets.SPARQL_Query.perform(SPARQL_Query.java:106) > at > org.apache.jena.fuseki.servlets.SPARQL_ServletBase.doCommonWorker(SPARQL_ServletBase.java:117) > at > org.apache.jena.fuseki.servlets.SPARQL_ServletBase.doCommon(SPARQL_ServletBase.java:67) > at > org.apache.jena.fuseki.servlets.SPARQL_Query.doGet(SPARQL_Query.java:86) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:735) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1336) > at > org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:82) > at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:243) > at > org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) > at org.eclipse.jetty.server.Server.handle(Server.java:365) > at > org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) > at > org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) > at > org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) > at > org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) > at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) > at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) > at > org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) > at > org.eclipse.jetty.server.nio.BlockingChannelConnector$BlockingChannelEndPoint.run(BlockingChannelConnector.java:298) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) > at java.lang.Thread.run(Thread.java:662) -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira