2016-01-13 10 views
2

Я использую Complexible Pinto для сопоставления Java POJO и RDF. В одном из моих оценочных тестов у меня есть производное свойство, которое не должно появляться в выходных тройках, однако кажется, что все получатели JavaBean автоматически включаются в вывод с генерируемым ресурсом свойств. Как я могу подавить это без искажения имени метода? Подобные структуры обычно имеют некоторую аннотацию @Ignore или параметр аннотации игнорирования, но я не вижу этого в Pinto.Как вы можете исключить определенные свойства POJO для сопоставления с RDF с помощью сложного Pinto?

Я могу подавить это, изменив имя метода (например, xgetNameLength()), но я бы предпочел не делать этого таким образом, так как это было бы уродливо.


Код:

создать POJO Java, который имеет производное свойство, которое не должно быть переведенным, и преобразовать его в тройки с использованием Пинто.

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> . 
+0

Попробуйте '@RdfProperty (null)' - это работает? – Bohemian

+0

Я пробовал это, но получаю эту ошибку компиляции 'Значение атрибута аннотации RdfProperty.value должно быть постоянным выражением'. Я получаю ту же ошибку, если я определяю, чтобы установить некоторую фактическую строчную константу в null и использовать ее вместо этого. –

+0

Попробуйте '@RdfProperty (" ")' вместо – Bohemian

ответ

2

Как предложил Джин, Пинто не предлагает эту возможность. Но это было на моем ментальном списке дел, поэтому я создал issue for this.