我正在使用Jena 2.6.4。
以下代码
String v = "Parnell Square East";
Literal l = ModelFactory.createDefaultModel().createTypedLiteral(
v, XSDDatatype.XSDstring);
System.out.println(l.toString());
产生以下输出:
Parnell Square East ^^ http://www.w3.org/2001/XMLSchema#string
我看起来不对:我原以为:
“Parnell Square East”^^ 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));
我得到了所需的输出
“Parnell Square East”^^ http://www.w3.org/2001/XMLSchema#string
我只是想知道为什么这不是默认行为?
谢谢, 马可
答案 0 :(得分:1)
任何Jena节点上的toString
都不能保证隐式或显式产生适合任何特定序列化(例如Turtle)的输出。您也可以问为什么toString
不生成XML节点,或者为什么数据类型没有缩写为q-name。 Jena采用的观点是toString
产生足够的信息以便在调试中发挥作用。除此之外的任何要求都是应用程序职责。
所以说,如果你有一个好的用例,可以随意向Jena Jira提交补丁。但请记住,现有的用户代码可能已经依赖于当前的行为,因此切换会产生一些成本,因此您需要做出有力的改变!