The aim of this project is to realize custom JSP tags & functions for using Semantic Web ontologies (RDF/OWL) in JSP pages.
Download (with all necessary libraries): semwebsite.war (7.1 Mb). Last modified: 2004/08/07 13:26 GMT+08:00.
Install: download this example project and deploy it into your web server (tested with Tomcat 5 & Resin 3);
Tag query executes query (RDQL or BRQL) and save results in variable, e.g.:
<rdf:query var="peoples" language="BRQL">
SELECT ?name,?homepage
WHERE
(?person foaf:knows ?somebody)
(?somebody foaf:name ?name)
OPTIONAL
(?somebody foaf:homepage ?homepage)
<rdf:param name="person" resource="${personURI}"/>
</rdf:query>
<c:if test="${!empty peoples}">
<ul>
<c:forEach var="somebody" items="${peoples.rows}">
<li>
<c:choose>
<c:when test="${!empty somebody.homepage}"><a href="${somebody.homepage}">${somebody.name}</a></c:when>
<c:otherwise>${somebody.name}</c:otherwise>
</c:choose>
</c:forEach>
</ul>
</c:if>
Tag queryFirst executes query and save only first row, e.g.:
<rdf:queryFirst var="person">
SELECT
?name,?homepage,?image
WHERE
(?person foaf:name ?name)
(?person foaf:homepage ?homepage)
(?person foaf:img ?image)
<rdf:param name="person" resource="${personURI}"/>
</rdf:queryFirst>
<a href="${person.homepage}"><img alt="${person.name}" src="${person.image}"></a>
Tag queryValue executes query & save only first value of first row.
Operators resource.property and resource[property] return property of resource, e.g.:
<c:set var="person" value="${rdf:resource('http://www.ideaspace.net/users/wkearney/foaf.xrdf#wkearney99')}"/>
<table align=right><tr><td><img src="${person.img}"></td></tr></table>
<div><a href="${person['homepage']}">${person['foaf:name']}</a> knows:</div>
<ul>
<c:forEach var="somebody" items="${rdf:all(person.knows)}">
<li>
<c:choose>
<c:when test="${!empty somebody.homepage}"><a href="${somebody.homepage}">${somebody.name}</a></c:when>
<c:otherwise>${somebody.name}</c:otherwise>
</c:choose>
</c:forEach>
</ul>
For using of dot-operation resources really must have type ru.krasu.semweb.semwebsite.Node and you can obtain such resources by function rdf:resource or by means of queries (see examples above).
Tag add adds N3 statements to model, e.g.:
<rdf:add>
[ rdf:type ex3:String; ex3:value ?string ].
<rdf:param name="string" literal="${param.string}"/>
</rdf:add>
Base RDF model (file or URL) and others parameters are stated in WEB-INF/web.xml file. If you want to use Jena persistent models, then edit ont-policy.rdf file in folder WEB-INF/classes/conf/ (see example at the end of file) and simply import model by public URL from your base RDF model.