private void renderSubject(Individual individual) { builder.append(NL).append(utils.toString(individual.getSubject())); if(individual.isAnonymous()) { String tail= !individual.isReferred()? "\t# Not referenced": String.format( "\t# Referenced %d times by resources: %s", individual.getReferences(), renderReferrers(individual.getReferrers())); builder.append(tail); } }
int evalRef(Individual i1) { return i1.isReference()?0:1; }
String render() { renderPrefixes(); renderBase(); for(Individual individual:graph) { if(!individual.isReference() && (disableFolding || !individual.isFoldable())) { renderSubject(individual); renderPredicates(false,individual); renderNewLine(); } } return builder.toString(); }
private void renderPredicateValues(Individual individual, URI predicate) { Assertions assertions=individual.getAssertions(predicate); Resource subject=individual.getSubject(); builder.append(NL).append(indenter.indent()).append(utils.toString(predicate)); String statementSeparator=" "; if(assertions.size()>3) { indenter.increase(); statementSeparator=NL.concat(indenter.indent()); } Iterator<Value> objectIterator = assertions.iterator(); String valueSeparator; do { builder.append(statementSeparator); Value object = objectIterator.next(); if(tryRenderingFolded(subject,object)) { valueSeparator=" ,"; } else { builder.append(utils.toString(object)); valueSeparator=","; } if(objectIterator.hasNext()) { builder.append(valueSeparator); } } while(objectIterator.hasNext()); if(assertions.size()>3) { indenter.decrease(); } }
void add(Individual individual) { this.links.put(individual.getSubject(),individual); }
int evalAnon(Individual i1) { return i1.isAnonymous()?1:0; }
private void renderPredicates(boolean anonymous, Individual individual) { Iterator<URI> predicateIterator = individual.iterator(); while(predicateIterator.hasNext()) { URI predicate=predicateIterator.next(); renderPredicateValues(individual,predicate); String predicateSeparator=" ."; if(predicateIterator.hasNext()) { predicateSeparator=" ;"; } else if(anonymous) { predicateSeparator=""; } builder.append(predicateSeparator); } }
private boolean tryRenderingFolded(Resource subject, Value object) { boolean result=false; if(!disableFolding && object instanceof Resource) { Individual individual=graph.findIndividual((Resource)object); if(individual!=null && individual.canBeFoldedBy(subject)) { renderFoldedBlankNode(individual); result=true; } } return result; }
private List<Value> getValues() { List<Value> result=new ArrayList<Value>(); result.addAll(this.values); SortedSet<Individual> sortedLinks=new TreeSet<Individual>(new IndividualComparator()); sortedLinks.addAll(links.values()); for(Individual link:sortedLinks) { result.add(link.getSubject()); } return result; }
@Override public int compare(Individual i1, Individual i2) { int result=evalAnon(i1)-evalAnon(i2); if(result==0) { result=evalRef(i1)-evalRef(i2); if(result==0) { result=i1.getSubject().toString().compareTo(i2.getSubject().toString()); } } return result; }
private void renderFoldedBlankNode(Individual individual) { builder.append("[").append(" # FOLDED: ").append(individual.getSubject().toString()); indenter.increase(); renderPredicates(true,individual); indenter.decrease(); builder.append(NL).append(indenter.indent()).append("]"); }