繁体   English   中英

无法扩展Node_Literal Jena类

[英]Unable to extend Node_Literal Jena class

我正在尝试编写jena graph API的实现,同时实现它。 我在扩展Node_Literal类时遇到问题,该类是文字值的耶拿类。 在扩展它时,它给出此错误“构造函数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
    }

 }

这是耶拿的哪个版本,因为当前代码显示:

/* package */ Node_Literal( Object label )

即注意包装范围。

该项目最近一直在讨论(小心!)对Node的更改-您不妨加入jena.apache.org上dev @邮件列表中的对话。

为什么要扩展以扩展Node_Literal? 您最好扩展Node本身。

因为所有节点的语义都是按值的,所以仅由于创建了一个节点并将其放置在图中,您就可以在检索它时返回另一个实例。 由于携带价值,文字对此特别敏感。

SPARQL引擎在SPARQL表达式评估中使用其自己的NodeValue,以便具有不同的语义(特定的XSD评估),而不会在存储在哈希映射等中时更改语义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM