【问题标题】:When use Jena to read RDF(N-Triple),it throws out "com.hp.hpl.jena.shared.InvalidPropertyURIException "使用 Jena 读取 RDF(N-Triple) 时,会抛出“com.hp.hpl.jena.shared.InvalidPropertyURIException”
【发布时间】:2012-07-09 22:54:27
【问题描述】:

我从 dbpedia 下载了一个 N-Triple 文件,但是当我想将它读入 Jena 模型时,会抛出一些异常。以下是该文件的一部分:

<http://dbpedia.org/resource/Jacky_Cheung> 

<http://dbpedia.org/resource/Template:%E8%97%9D%E4%BA%BA> "\u9AD4\u91CD"@zh .
<http://dbpedia.org/resource/Jacky_Cheung> <http://dbpedia.org/resource/Template:%E8%97%9D%E4%BA%BA> "\u8EAB\u9AD8"@zh .
<http://dbpedia.org/resource/Jacky_Cheung> <http://dbpedia.org/resource/Template:%E8%97%9D%E4%BA%BA> "\u8840\u578B"@zh .
<http://dbpedia.org/resource/Jacky_Cheung> <http://dbpedia.org/resource/Template:%E8%97%9D%E4%BA%BA> "\u8A9E\u8A00"@zh .

抛出的异常是:

Exception in thread "main" com.hp.hpl.jena.shared.InvalidPropertyURIException: http://dbpedia.org/resource/Template:%E8%97%9D%E4%BA%BA
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.splitTag(BaseXMLWriter.java:393)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.startElementTag(BaseXMLWriter.java:368)
    at com.hp.hpl.jena.xmloutput.impl.Unparser$3.wTypeStart(Unparser.java:671)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wPropertyEltValueString(Unparser.java:488)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wPropertyEltValue(Unparser.java:473)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wPropertyElt(Unparser.java:339)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wPropertyEltStar(Unparser.java:811)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wTypedNodeOrDescriptionLong(Unparser.java:797)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wTypedNodeOrDescription(Unparser.java:727)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wDescription(Unparser.java:686)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wObj(Unparser.java:642)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wObjStar(Unparser.java:317)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.wRDF(Unparser.java:298)
    at com.hp.hpl.jena.xmloutput.impl.Unparser.write(Unparser.java:200)
    at com.hp.hpl.jena.xmloutput.impl.Abbreviated.writeBody(Abbreviated.java:143)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:500)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:472)
    at com.hp.hpl.jena.xmloutput.impl.Abbreviated.write(Abbreviated.java:128)
    at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:458)
    at com.hp.hpl.jena.rdf.model.impl.ModelCom.write(ModelCom.java:277)
    at jena.ReadRDF.main(ReadRDF.java:45)
Java Result: 1

问题是由“%E8%97%9D%E4%BA%BA”引起的,当使用URIref.decode()用这个字符串解码URI时,“%E8%97%9D%E4%BA%BA "代表两个汉字。

但是当我使用 Sesame 读取这个 N-Triple 文件时,就可以了,没有任何问题。

我的问题是,是否有任何方法可以在 Jena 中解决这个问题,以及为什么 dbpedia 选择 N-Triple 作为默认 RDF 语法?它在非 ASCII 语言中效果不佳。

另外,我想知道,如果我想将我的RDF数据发布为Linked数据,但是资源的URI带有一些中文和日文,我应该先解码URI吗?

【问题讨论】:

    标签: jena nt


    【解决方案1】:

    嗯,你的问题并不完全清楚,因为你问的是“在 Jena 模型中阅读”,但你引用的堆栈跟踪实际上是从调用作者开始的。

    一般来说,耶拿​​会非常努力地遵守 W3C 和 IETF 的相关 RDF 建议。特别是,它尝试不生成任何不符合有效 URI 规则的 URI。这在编写 XML 的情况下更加复杂,因为大多数 RDF 标识符不是合法的 XML 元素 ID,这意味着您必须在某处拆分 URI 并使用 XML 名称空间来生成完整的标识符。并非所有的 RDF 工具包都像 Jena 那样特别符合标准中的某些规则。

    你可以尝试的事情:

    • 您是否需要在加载过程中致电Model.write()?您应该能够加载和处理模型,而无需调用合法 URI 的检查。

    • 尝试使用 Turtle 格式而不是 XML 来编写输出。 Turtle 没有 XML 那样的限制,而且人类也更容易阅读。

    • 如果您正在加载的数据中存在特定格式错误的 URI,请查看是否有更新版本的数据。 dbpedia 中的非法 URI 过去一直是个问题。如果非法 URI 在最新版本中仍然存在,请通知 dbpedia 团队。

    • 尝试预处理您的数据,以在包含非法 URI 的三元组进入您的处理链之前将其删除。

    对于包含中日字符的URI,Jena符合IRI spec,所以只要你的URI符合这个就OK了。

    【讨论】:

    • 是的,据我所知,问题是您不能在 RDF/XML 中写入该属性。
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多