use of org.eclipse.rdf4j.model.BNode in project rdf4j by eclipse.
the class TriGWriter method handleStatementInternal.
protected void handleStatementInternal(Statement st, boolean endRDFCalled, boolean canShortenSubject, boolean canShortenObject) {
// them if they are sent here
if (prettyPrintModel != null && !endRDFCalled) {
prettyPrintModel.add(st);
return;
}
try {
Resource context = st.getContext();
if (inActiveContext && !contextsEquals(context, currentContext)) {
closePreviousStatement();
closeActiveContext();
}
if (!inActiveContext) {
writer.writeEOL();
if (context != null) {
boolean canShortenContext = false;
if (context instanceof BNode) {
if (prettyPrintModel != null && !prettyPrintModel.contains(context, null, null) && !prettyPrintModel.contains(null, null, context)) {
canShortenContext = true;
}
}
writeResource(context, canShortenContext);
writer.write(" ");
}
writer.write("{");
writer.increaseIndentation();
currentContext = context;
inActiveContext = true;
}
} catch (IOException e) {
throw new RDFHandlerException(e);
}
// If we get to this point, switch endRDFCalled to true so writing occurs
super.handleStatementInternal(st, true, canShortenSubject, canShortenObject);
}
use of org.eclipse.rdf4j.model.BNode in project rdf4j by eclipse.
the class RDFXMLPrettyWriter method writeAbbreviatedPredicate.
/**
* Write out an empty property element.
*/
private void writeAbbreviatedPredicate(IRI pred, Value obj) throws IOException, RDFHandlerException {
writeStartOfStartTag(pred.getNamespace(), pred.getLocalName());
if (obj instanceof Resource) {
Resource objRes = (Resource) obj;
if (objRes instanceof IRI) {
IRI uri = (IRI) objRes;
writeAttribute(RDF.NAMESPACE, "resource", uri.toString());
} else {
BNode bNode = (BNode) objRes;
writeAttribute(RDF.NAMESPACE, "nodeID", getValidNodeId(bNode));
}
writeEndOfEmptyTag();
} else if (obj instanceof Literal) {
Literal objLit = (Literal) obj;
// datatype attribute
IRI datatype = objLit.getDatatype();
// Check if datatype is rdf:XMLLiteral
boolean isXmlLiteral = datatype.equals(RDF.XMLLITERAL);
// language attribute
if (Literals.isLanguageLiteral(objLit)) {
writeAttribute("xml:lang", objLit.getLanguage().get());
} else {
if (isXmlLiteral) {
writeAttribute(RDF.NAMESPACE, "parseType", "Literal");
} else {
writeAttribute(RDF.NAMESPACE, "datatype", datatype.toString());
}
}
writeEndOfStartTag();
// label
if (isXmlLiteral) {
// Write XML literal as plain XML
writer.write(objLit.getLabel());
} else {
writeCharacterData(objLit.getLabel());
}
writeEndTag(pred.getNamespace(), pred.getLocalName());
}
writeNewLine();
}
use of org.eclipse.rdf4j.model.BNode in project rdf4j by eclipse.
the class RDFXMLPrettyWriter method writeNodeStartOfStartTag.
/**
* Write out the opening tag of the subject or object of a statement up to (but not including) the end of
* the tag. Used both in writeStartSubject and writeEmptySubject.
*/
private void writeNodeStartOfStartTag(Node node) throws IOException, RDFHandlerException {
Value value = node.getValue();
if (node.hasType()) {
// We can use abbreviated syntax
writeStartOfStartTag(node.getType().getNamespace(), node.getType().getLocalName());
} else {
// We cannot use abbreviated syntax
writeStartOfStartTag(RDF.NAMESPACE, "Description");
}
if (value instanceof IRI) {
IRI uri = (IRI) value;
writeAttribute(RDF.NAMESPACE, "about", uri.toString());
} else {
BNode bNode = (BNode) value;
writeAttribute(RDF.NAMESPACE, "nodeID", getValidNodeId(bNode));
}
}
use of org.eclipse.rdf4j.model.BNode in project rdf4j by eclipse.
the class ArrangedWriter method nextStatement.
private synchronized Statement nextStatement() {
if (stmtBySubject.isEmpty() && blanks.isEmpty()) {
assert queueSize == 0;
return null;
}
Set<Statement> stmts = null;
while (stmts == null) {
SubjectInContext last = stack.peekLast();
stmts = stmtBySubject.get(last);
if (stmts == null && last != null && blanks.contains(last.getSubject(), null, null, last.getContext())) {
stmts = queueBlankStatements(last);
} else if (stmts == null) {
stack.pollLast();
}
if (stack.isEmpty() && stmtBySubject.isEmpty()) {
Statement st = blanks.iterator().next();
stmts = queueBlankStatements(new SubjectInContext(st));
} else if (stack.isEmpty()) {
stmts = stmtBySubject.values().iterator().next();
}
}
Iterator<Statement> iter = stmts.iterator();
Statement next = iter.next();
queueSize--;
iter.remove();
SubjectInContext key = new SubjectInContext(next);
if (!key.equals(stack.peekLast())) {
stack.addLast(key);
}
if (!iter.hasNext()) {
stmtBySubject.remove(key);
}
Value obj = next.getObject();
if (obj instanceof BNode) {
// follow blank nodes before continuing with this subject
SubjectInContext bkey = new SubjectInContext((BNode) obj, next.getContext());
if (stack.contains(bkey)) {
// cycle detected
if (repeatBlankNodes) {
throw new RDFHandlerException("Blank node cycle detected. Try disabling " + BasicWriterSettings.INLINE_BLANK_NODES.getKey());
}
} else {
stack.addLast(bkey);
}
}
return next;
}
use of org.eclipse.rdf4j.model.BNode in project rdf4j by eclipse.
the class RenderUtils method toSPARQL.
/**
* Append the SPARQL query string rendering of the {@link org.eclipse.rdf4j.model.Value} to the supplied
* {@link StringBuilder}.
*
* @param value
* the value to render
* @param builder
* the {@link StringBuilder} to append to
* @return the original {@link StringBuilder} with the value appended.
*/
public static StringBuilder toSPARQL(Value value, StringBuilder builder) {
if (value instanceof IRI) {
IRI aURI = (IRI) value;
builder.append("<").append(aURI.toString()).append(">");
} else if (value instanceof BNode) {
builder.append("_:").append(((BNode) value).getID());
} else if (value instanceof Literal) {
Literal aLit = (Literal) value;
builder.append("\"\"\"").append(escape(aLit.getLabel())).append("\"\"\"");
if (Literals.isLanguageLiteral(aLit)) {
aLit.getLanguage().ifPresent(lang -> builder.append("@").append(lang));
} else {
builder.append("^^<").append(aLit.getDatatype().toString()).append(">");
}
}
return builder;
}
Aggregations