如何排除某些POJO属性与Complexible Pinto映射到RDF?

时间:2016-01-13 20:58:57

标签: java rdf sesame linked-data stardog

我正在尝试here来实现Java POJO和RDF之间的映射。在我的一个评估测试中,我有一个不应出现在输出三元组中的派生属性,但似乎所有JavaBean getter都自动包含在输出中,并带有生成的属性资源。如何在不破坏方法名称的情况下抑制它?类似的框架通常有一些@Ignore注释或一个忽略注释参数,但我没有在Pinto中看到一个。

我可以通过修改方法名称(例如xgetNameLength())来抑制这种情况,但我不希望这样做,因为那样会很难看。

代码

我创建了一个Java POJO,它具有一个不应映射的派生属性,并使用Pinto将其转换为三元组。

package pintoeval;

import org.openrdf.model.Graph;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFWriter;
import org.openrdf.rio.Rio;

import com.complexible.pinto.Identifiable;
import com.complexible.pinto.RDFMapper;
import com.complexible.pinto.annotations.RdfProperty;
import com.complexible.pinto.annotations.RdfsClass;

public class PintoStackOverflowQuestion {

    @RdfsClass("http://www.example.com/person")
    public static class Person implements Identifiable {
        private Resource id;
        private String name;


        @Override
        public Resource id() {
            return id;
        }

        @Override
        public void id(Resource arg0) {
            id = arg0;
        }

        public String getName() {
            return name;
        }

        @RdfProperty("http://www.example.com/personName")
        public void setName(String name) {
            this.name = name;
        }

        /*
         * This is directly derived from another value, so it should not be stored.
         */
        public int getNameLength() {
            return name.length();
        }
    }

    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.id(new URIImpl("http://www.example.com/person/Larry0384"));
        person.setName("Larry");

        Graph aGraph = RDFMapper.create().writeValue(person);

        RDFWriter writer = Rio.createWriter(RDFFormat.NTRIPLES, System.out);
        writer.startRDF();
        for (Statement s : aGraph) {
            writer.handleStatement(s);
        }
        writer.endRDF();
    }
}

输出:

派生值与生成的属性一起映射。我想排除它,因此只会创建两个三元组。

<http://www.example.com/person/Larry0384> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/person> .
<http://www.example.com/person/Larry0384> <tag:complexible:pinto:nameLength> "5"^^<http://www.w3.org/2001/XMLSchema#int> .
<http://www.example.com/person/Larry0384> <http://www.example.com/personName> "Larry"^^<http://www.w3.org/2001/XMLSchema#string> .

1 个答案:

答案 0 :(得分:2)

正如Jeen所说,Pinto目前不提供此功能。但这是我的心理待办事项列表,所以我创建了一个issue for this