LDPath implements an extension of the FreeMarker template engine that allows constructing templates with LDPath statements for inserting and iterating over values.
<@namespace rdfs="http://www.w3.org/2000/01/rdf-schema#" />
<html>
<head>
<title><@ldpath path="rdfs:label[@en]"/></title>
</head>
<body>
<h1><@ldpath path="rdfs:label[@en]"/></h1>
<p>
<@ldpath path="rdfs:comment[@en]"/>
</p>
<ul>
<@ldpath path="fn:sort(rdf:type)">
<#if evalLDPath("rdfs:label[@en] :: xsd:string")??>
<li><@ldpath path="rdfs:label[@en] :: xsd:string"/></li>
</#if>
</@ldpath>
</ul>
</body>
</html>
To use this templating mechanism you would need to include the following artifact in your Maven build file:
<dependency>
<groupId>org.apache.marmotta</groupId>
<artifactId>ldpath-template</artifactId>
<version>3.3.0</version>
</dependency>
This is the basic Java code for rendering LDPath templates:
final RepositoryConnection conn = ...getConnection();
try {
conn.begin();
final URI subject = conn.getValueFactory().createURI(uri);
final SesameConnectionBackend backend = SesameConnectionBackend.withConnection(conn);
final TemplateEngine<Value> engine = new TemplateEngine<Value>(backend);
engine.setDirectoryForTemplateLoading(new File("/path/to/templates"));
OutputStreamWriter writer = new OutputStreamWriter(System.out, Charset.forName("utf-8"));
engine.processFileTemplate(subject, "example.ftl", writer);
} finally {
conn.commit();
conn.close();
}