2

Java POJO と RDF 間のマッピングにComplexible Pintoを試しています。私の評価テストの 1 つで、出力トリプルに表示されるべきではない派生プロパティがありますが、すべての JavaBean ゲッターが、生成されたプロパティ リソースとともに出力に自動的に含まれているようです。メソッド名をマングルせずにこれを抑制するにはどうすればよいですか? 同様のフレームワークには通常、何らかの @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();
    }
}

出力:

派生した値は、生成されたプロパティにマップされます。除外したいので、トリプルは 2 つだけ作成されます。

<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> .
4

1 に答える 1

2

Jeen が示唆したように、Pinto は現在この機能を提供していません。しかし、これは私の頭の中の todo リストにあったので、この.

于 2016-01-16T00:05:54.340 に答える