我正在尝试编写 jena graph API 的实现并同时实现它。我在扩展 Node_Literal 类时遇到问题,该类是用于文字值的 jena 类。扩展它时,出现此错误“构造函数 Node_Literal(Object) 不可见”
父类(Node_Literal)的代码如下:
public class Node_Literal extends Node_Concrete{
Node_Literal( Object label )
{ super( label ); }
@Override
public LiteralLabel getLiteral()
{ return (LiteralLabel) label; }
@Override
public final Object getLiteralValue()
{ return getLiteral().getValue(); }
@Override
public final String getLiteralLexicalForm()
{ return getLiteral().getLexicalForm(); }
@Override
public final String getLiteralLanguage()
{ return getLiteral().language(); }
@Override
public final String getLiteralDatatypeURI()
{ return getLiteral().getDatatypeURI(); }
@Override
public final RDFDatatype getLiteralDatatype()
{ return getLiteral().getDatatype(); }
@Override
public final boolean getLiteralIsXML()
{ return getLiteral().isXML(); }
@Override
public String toString( PrefixMapping pm, boolean quoting )
{ return ((LiteralLabel) label).toString( quoting ); }
@Override
public boolean isLiteral()
{ return true; }
/**
Literal nodes defer their indexing value to the component literal.
@see com.hp.hpl.jena.graph.Node#getIndexingValue()
*/
@Override
public Object getIndexingValue()
{ return getLiteral().getIndexingValue(); }
@Override
public Object visitWith( NodeVisitor v )
{ return v.visitLiteral( this, getLiteral() ); }
@Override
public boolean equals( Object other )
{
if ( this == other ) return true ;
return other instanceof Node_Literal && label.equals( ((Node_Literal) other).label );
}
@Override
public boolean sameValueAs(Object o) {
return o instanceof Node_Literal
&& ((LiteralLabel)label).sameValueAs( ((Node_Literal) o).getLiteral() );
}
@Override
public boolean matches( Node x )
{ return sameValueAs( x ); }
}
扩展节点文字的类如下:
public class JenaNeoLiteral extends Node_Literal{
protected JenaNeoLiteral(Object label) {
super(label);
// TODO Auto-generated constructor stub
}
}
最佳答案
这是哪个版本的 Jena,因为当前代码显示:
/* package */ Node_Literal( Object label )
即注意包范围。
该项目最近一直在讨论(小心!)对 Node 的更改 - 您可能希望在 jena.apache.org 的 dev@ 邮件列表中加入该对话。
为什么要扩展Node_Literal?你最好扩展 Node 本身。
因为所有节点的语义都是按值的,所以仅仅因为您创建一个节点并将其放入图表中,当您检索它时,您可能会得到一个不同的实例。文字对此特别敏感,因为它携带着值。
SPARQL引擎在SPARQL表达式求值中使用自己的NodeValue,以便在存储在 HashMap 等中时具有不同的语义(特定的XSD求值),而无需更改语义。
关于java - 无法扩展 Node_Literal Jena 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425890/