【问题标题】:Unable to extend Node_Literal Jena class无法扩展 Node_Literal Jena 类
【发布时间】:2014-06-19 00:07:27
【问题描述】:

我正在尝试编写 jena 图形 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
    }

 }

【问题讨论】:

    标签: java rdf semantics jena semantic-web


    【解决方案1】:

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

    /* package */ Node_Literal( Object label )
    

    即注意包范围。

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

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

    因为所有节点的语义都是按值的,所以仅仅因为你创建了一个并把它放在一个图中,当你检索它时你可能会得到一个不同的实例。字面量对此特别敏感,因为它带有值。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2017-04-17
    • 2017-02-20
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多