我正在使用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
我只是想知道为什么这不是默认行为?
谢谢,马可
1 回答
无论是隐式还是显式,都无法保证任何Jena节点上的
toString
产生适合任何特定序列化的输出(例如Turtle) . 您也可以问为什么toString
不生成XML节点,或者为什么数据类型没有缩写为q-name . Jena采用的观点是toString
产生足够的信息以便在调试中发挥作用 . 除此之外的任何要求都是应用职责 .所以说,如果你有一个好的用例,可以随意向Jena Jira提交补丁 . 但请记住,现有的用户代码可能已经开始依赖于当前的行为,因此切换会产生一些成本,因此您需要做出有力的改变!