1   /*
2    wsmo4j - a WSMO API and Reference Implementation
3    Copyright (c) 2005, University of Innsbruck, Austria
4    This library is free software; you can redistribute it and/or modify it under
5    the terms of the GNU Lesser General Public License as published by the Free
6    Software Foundation; either version 2.1 of the License, or (at your option)
7    any later version.
8    This library is distributed in the hope that it will be useful, but WITHOUT
9    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10   FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11   details.
12   You should have received a copy of the GNU Lesser General Public License along
13   with this library; if not, write to the Free Software Foundation, Inc.,
14   59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15   */
16  package test.wsmo4j.serializer.rdf;
17  
18  import java.io.*;
19  import java.util.*;
20  
21  import org.deri.wsmo4j.io.parser.rdf.*;
22  import org.deri.wsmo4j.io.serializer.rdf.*;
23  import org.omwg.ontology.*;
24  import org.omwg.ontology.Value;
25  import org.openrdf.model.*;
26  import org.wsmo.common.*;
27  import org.wsmo.factory.*;
28  import org.wsmo.wsml.*;
29  
30  import test.wsmo4j.*;
31  import static test.wsmo4j.Utils.*;
32  /**
33  * Test method for RDF parsing.
34  *
35  * <pre>
36  *  Created on May 02, 2006
37  *  Committed by $Author: nathaliest $
38  *  $Source$
39  * </pre>
40  *
41  * @author nathalie.steinmetz@deri.org
42  * @version $Revision: 2643 $ $Date: 2008-08-08 01:32:53 +0300 (Fri, 08 Aug 2008) $
43  */
44  public class RDFSerializerTest extends Wsmo4jTestCase {
45  
46      protected Parser parser;
47      protected Parser rdfparser;
48      
49      protected Serializer serializer;
50      
51      private List warnings;
52      
53      protected void setUp() throws Exception {
54          super.setUp();
55          HashMap <String, Object> properties = new HashMap <String, Object> ();
56          properties.put(Factory.WSMO_FACTORY, factory);
57          properties.put(Factory.LE_FACTORY, leFactory);
58          properties.put(Factory.DATA_FACTORY, dataFactory);
59          parser = Factory.createParser(properties);
60          
61          properties.put(Factory.PROVIDER_CLASS, "org.deri.wsmo4j.io.parser.rdf.RDFParserImpl");
62          properties.put(RDFParserImpl.RDF_PROPERTIES, RDFParserImpl.RDF_PROP_AS_ATTR);
63          rdfparser = Factory.createParser(properties);
64          
65          properties = new HashMap <String, Object> ();
66          properties.put(Factory.PROVIDER_CLASS,
67                  "org.deri.wsmo4j.io.serializer.rdf.WsmlRdfSerializer");
68          //*** N3 ***
69  //        properties.put(WsmlRdfSerializer.RDF_SERIALIZER_TYPE, 
70  //               WsmlRdfSerializer.RDF_SERIALIZER_N3);
71          //*** XML ***
72          properties.put(WsmlRdfSerializer.RDF_SERIALIZER_TYPE, 
73                  WsmlRdfSerializer.RDF_SERIALIZER_XML);
74          // serialize WSML axioms to RDF triples
75          properties.put(WsmlRdfSerializer.RDF_AXIOMS, 
76          		WsmlRdfSerializer.RDF_AXIOMS_TRIPLE);
77          
78          serializer = Factory.createSerializer(properties);
79      }
80  
81      protected void tearDown() throws Exception {
82          super.tearDown();
83          parser = null;
84          rdfparser = null;
85          serializer = null;
86          System.gc(); // tries to reinitialize all singletons in WSMO!
87      }
88      
89      private void printWarnings() {
90          int index = 0;
91          Iterator it = warnings.iterator();
92          while (it.hasNext()) {
93              RDFParserWarning w  = (RDFParserWarning) it.next();
94              System.out.println("Warning " + (index+1) + ": " + w);
95              index = index+1;
96              printTriples(w.getTriples());
97          }
98      }
99      
100     private void printTriples(Set triples) {
101         int index = 0;
102         Iterator it = triples.iterator();
103         while (it.hasNext()) {
104            Statement statement = (Statement) it.next();     
105            System.out.println(statement.getSubject().toString());
106            System.out.println(statement.getPredicate().toString());
107            System.out.println(statement.getObject().toString());
108            System.out.println("------------------------------------");
109            index = index+1;   
110         }
111     }
112     
113     public void testRDFserialization() throws Exception {
114         InputStreamReader reader = new InputStreamReader(getStream("test/wsmo4j/serializer/rdf/rdf.wsml"));
115         TopEntity[] entities = parser.parse(reader);
116         
117         doRDFTest(entities, true);
118         CharArrayWriter fw = new CharArrayWriter();
119         serializer.serialize(entities, fw);
120         fw.flush();
121         StringReader buf = new StringReader(new String(fw.toCharArray())); 
122         
123         System.out.println("============== RDF Serialization ================ " );
124         System.out.println(new String(fw.toCharArray()));
125         
126         TopEntity[] te = rdfparser.parse(buf);
127         assertNotNull(te);
128         doRDFTest(te, false);
129     }
130     
131     public void testRDFSserialization() throws Exception {
132         InputStreamReader reader = new InputStreamReader(getStream("test/wsmo4j/serializer/rdf/rdfs.wsml"));
133         TopEntity[] entities = parser.parse(reader);
134         
135 //        doRDFSTest(entities);
136         
137         CharArrayWriter fw = new CharArrayWriter();
138         serializer.serialize(entities, fw);
139         fw.flush();
140         StringReader buf = new StringReader(new String(fw.toCharArray())); 
141         
142         System.out.println("============== RDFS Serialization ================ " );
143         System.out.println(new String(fw.toCharArray()));
144         
145         TopEntity[] te = rdfparser.parse(buf);
146         assertNotNull(te);
147         doRDFSTest(te);
148     }
149     
150     private void doRDFTest(TopEntity[] entities, boolean wsmlRun) {
151         Ontology onto = (Ontology)entities[0];
152         assertTrue(onto.listInstances().size() == 3);
153         
154         Instance instanceA = onto.findInstance(
155                 factory.createIRI("http://test.example.org/wsmo4j#instanceA"));
156         assertNotNull(instanceA);
157         assertTrue(instanceA.listAttributeValues().size() == 2);
158         assertTrue(instanceA.listAttributeValues(
159                 factory.createIRI("http://test.example.org/wsmo4j#propertyB")).size() == 2);
160         assertTrue(instanceA.listConcepts().size() == 1);
161         
162         Value val = instanceA.listAttributeValues(factory.createIRI("http://test.example.org/wsmo4j#propertyA")).iterator().next();
163         
164         assertTrue(val instanceof Instance);
165         
166         Instance instanceB = onto.findInstance(
167                 factory.createIRI("http://test.example.org/wsmo4j#instanceB"));
168         assertNotNull(instanceB);
169         if(wsmlRun) assertTrue(instanceB.listAttributeValues().size() == 3);
170         else assertTrue(instanceB.listAttributeValues().size() == 4);
171         
172         assertTrue(instanceB.listAttributeValues(
173                 factory.createIRI("http://test.example.org/wsmo4j#propertyA")).size() == 1);
174         assertTrue(instanceB.listConcepts().size() == 2);
175     }
176     
177     private void doRDFSTest(TopEntity[] entities) {
178         assertTrue(entities.length == 1);
179         
180         Ontology onto = (Ontology)entities[0];
181         assertTrue(onto.listConcepts().size() == 4);
182         assertTrue(onto.listInstances().size() == 0);
183         assertTrue(onto.listAxioms().size() == 1);
184         
185         Concept testB = onto.findConcept(factory.createIRI("http://test.example.org/wsmo4j#TestB"));
186         assertNotNull(testB);
187         assertTrue(testB.listSuperConcepts().size() == 1);
188         assertTrue(testB.listAttributes().size() == 2);
189     }
190 }
191 /*
192  * $Log$
193  * Revision 1.6  2007/04/02 12:13:22  morcen
194  * Generics support added to wsmo-api, wsmo4j and wsmo-test
195  *
196  * Revision 1.5  2006/11/30 13:52:34  nathaliest
197  * changed test to write to stringbuffers instead of files
198  *
199  * Revision 1.4  2006/11/17 16:43:51  ohamano
200  * *** empty log message ***
201  *
202  * Revision 1.3  2006/11/16 14:34:13  ohamano
203  * *** empty log message ***
204  *
205  * Revision 1.2  2006/11/10 15:03:27  ohamano
206  * *** empty log message ***
207  *
208  * Revision 1.1  2006/11/10 10:08:23  ohamano
209  * *** empty log message ***
210  */