001 // This file is part of the Attempto Java Packages.
002 // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
003 //
004 // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
005 // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
006 // either version 3 of the License, or (at your option) any later version.
007 //
008 // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
009 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
010 // PURPOSE. See the GNU Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with the Attempto
013 // Java Packages. If not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.owl;
016
017 import org.apache.commons.httpclient.HttpClient;
018 import org.apache.commons.httpclient.HttpStatus;
019 import org.apache.commons.httpclient.NameValuePair;
020 import org.apache.commons.httpclient.methods.PostMethod;
021
022 /**
023 * This is a simple interface to the OWL verbalizer.
024 * OWL verbalizer is a tool that translates an OWL 2 ontology into an ACE text.
025 * It expects the ontology to be represented in the OWL 2 XML serialization syntax.
026 * The version of the OWL 2 XML syntax that the OWL verbalizer supports is described in
027 *
028 * <blockquote>
029 * <a href="http://www.w3.org/TR/2008/WD-owl2-xml-serialization-20080411/">http://www.w3.org/TR/2008/WD-owl2-xml-serialization-20080411/</a>
030 * </blockquote>
031 *
032 * The OWL verbalizer accepts one parameter, <code>xml</code>, the value of which
033 * is the complete ontology as string.
034 * The OWL verbalizer returns the ACE representation of the ontology as plain text (string).
035 * In case the verbalizer fails to process an OWL axiom in the ontology,
036 * an error message is returned between ACE comment symbols.
037 *
038 * Note that future versions of the OWL verbalizer (and as a result this interface)
039 * will expect a different input format (because the OWL 2 XML specification will be updated)
040 * and probably produce a different output format (a more structured one, where e.g. error
041 * messages are represented differently).
042 *
043 * @author Kaarel Kaljurand
044 *
045 */
046 public class VerbalizerWebservice {
047
048 private HttpClient client = new HttpClient();
049 private String url = null;
050
051 /**
052 * Constructs a new <code>VerbalizerWebservice</code> object
053 * on the basis of the URL of the OWL verbalizer webservice.
054 *
055 * @param url The URL of the OWL verbalizer webservice.
056 */
057 public VerbalizerWebservice(String url) {
058 this.url = url;
059 }
060
061 /**
062 * Calls the OWL verbalizer webservice by giving the string representation of
063 * an XML-formatted ontology as input. Returns the corresponding ACE text
064 * with possible error messages as comments.
065 *
066 * @param xml XML-representation of an OWL ontology.
067 * @return ACE text that corresponds to the ontology.
068 */
069 public String call(String xml) {
070 String acetextAsString = null;
071
072 PostMethod method = new PostMethod(url);
073
074 method.setRequestBody(new NameValuePair[] {
075 new NameValuePair("xml", xml)
076 });
077
078 try {
079 int statusCode = client.executeMethod(method);
080
081 if (statusCode == HttpStatus.SC_OK) {
082 acetextAsString = method.getResponseBodyAsString();
083 }
084 else {
085 throw new RuntimeException("HTTP request failed: " + method.getStatusLine());
086 }
087 } catch (Exception e) {
088 throw new RuntimeException("Error accessing OWL->ACE webservice: " + e.getMessage());
089 } finally {
090 method.releaseConnection();
091 }
092
093 return acetextAsString;
094 }
095 }