SemWebsite — using RDF/OWL in JSP

The aim of this project is to realize custom JSP tags & functions for using Semantic Web ontologies (RDF/OWL) in JSP pages.

Download & install

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

Brief description of supported features

Tags: query, queryFirst, queryValue

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.

Dot-operation

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).

Add operation

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>

Configuration

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.

Other examples

Others working examples see in semwebsite.war.

Author

Barhatov Andrey aka edhel.