public List mapToStatements()

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;
	}