0

我从 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数据发布为链接数据,但是资源的URI带有一些中文和日文,我应该先解码URI吗?

4

1 回答 1

1

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

总的来说,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规范,所以只要你的URI符合就可以了。

于 2012-07-10T13:32:58.467 回答