in src/main/java/software/amazon/neptune/csv2rdf/PropertyGraph2RdfMapper.java [222:278]
public List<Statement> mapToStatements(NeptunePropertyGraphVertex vertex) {
final List<Statement> statements = new ArrayList<>();
final PropertyGraphVertex2RdfMapping vertexMapper = mapping.getVertex2RdfMapping();
Set<String> propertiesForRdfsLabel = new HashSet<>();
// the vertex itself; for now, we always type (falling back on a default if no
// type is given)
if (vertex.getLabels().isEmpty()) {
statements.add(vertexMapper.createTypeStatement(vertex.getId()));
} else {
for (String label : vertex.getLabels()) {
statements.add(vertexMapper.createTypeStatement(vertex.getId(), label));
String propertyForRdfsLabel = vertexMapper.getPropertyForRdfsLabel(label);
if (propertyForRdfsLabel != null) {
propertiesForRdfsLabel.add(propertyForRdfsLabel);
}
}
}
for (NeptuneCsvUserDefinedProperty userDefinedProperty : vertex.getUserDefinedProperties()) {
String propertyName = userDefinedProperty.getName();
if (vertexMapper.containsRdfResourcePatternForProperty(propertyName)) {
// in this case, we do not write a literal statement but a relation
for (String value : userDefinedProperty.getValues()) {
statements.add(vertexMapper.createRelationStatement(vertex.getId(), propertyName, value));
}
} else {
boolean addRdfsLabel = propertiesForRdfsLabel.contains(propertyName);
// this property has been marked as the property used as the rdfs:label
if (addRdfsLabel) {
for (String value : userDefinedProperty.getValues()) {
statements.add(vertexMapper.createRdfsLabelStatement(vertex.getId(), value));
}
}
// if either this was not written as rdfs:label or the configuration tells us to
// write label properties
// redundantly, we also emit the datatype property statement
if (!addRdfsLabel || alwaysAddPropertyStatements) {
for (String value : userDefinedProperty.getValues()) {
statements.add(vertexMapper.createLiteralStatement(vertex.getId(), propertyName, value,
userDefinedProperty.getDataType()));
}
}
}
}
return statements;
}