类型化文字的字符串表示形式



我使用的是Jena 2.6.4。

以下代码

String v = "Parnell Square East";
Literal l = ModelFactory.createDefaultModel().createTypedLiteral(
    v, XSDDatatype.XSDstring);
System.out.println(l.toString());

产生以下输出:

帕内尔广场东^^http://www.w3.org/2001/XMLSchema#string

这在我看来是错误的:我本以为:

"帕内尔广场东"^^http://www.w3.org/2001/XMLSchema#string

通过快速查看LiteralImpl.java的源代码,我可以看到:

@Override public String toString() {
    return asNode().toString( PrefixMapping.Standard, false );
}

为什么第二个参数(引用)设置为false

如果我做

String v = "Parnell Square East";
Literal l = ModelFactory.createDefaultModel().createTypedLiteral(v,
        XSDDatatype.XSDstring);
System.out.println(l.asNode().toString(PrefixMapping.Standard, true));

我得到想要的输出

"帕内尔广场东"^^http://www.w3.org/2001/XMLSchema#string

我只是想知道为什么这不是默认行为?

谢谢,marco

无论是隐式还是显式,都不能保证任何Jena节点上的toString产生适合任何特定序列化的输出(例如Turtle)。您可能会问为什么toString不生成XML节点,或者为什么数据类型不缩写为q-name。Jena认为toString产生的信息足够用于调试。除此之外的任何要求都是应用程序的责任。

也就是说,如果你有一个好的用例,请随时向Jena Jira提交一个补丁。不过,请记住,现有的用户代码可能已经依赖于当前的行为,因此切换会有一些成本,因此您需要提出强有力的更改理由!

最新更新