1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package com.ontotext.ordi.wsmo4rdf.impl;
19
20 import java.util.Iterator;
21 import java.util.List;
22 import java.util.Set;
23 import java.util.Stack;
24
25 import org.deri.wsmo4j.io.serializer.wsml.SerializerImpl;
26 import org.omwg.logicalexpression.LogicalExpression;
27 import org.omwg.ontology.Attribute;
28 import org.omwg.ontology.Axiom;
29 import org.omwg.ontology.Concept;
30 import org.omwg.ontology.Instance;
31 import org.omwg.ontology.Ontology;
32 import org.omwg.ontology.OntologyElement;
33 import org.omwg.ontology.Parameter;
34 import org.omwg.ontology.Relation;
35 import org.omwg.ontology.RelationInstance;
36 import org.omwg.ontology.Type;
37 import org.omwg.ontology.Variable;
38 import org.omwg.ontology.WsmlDataType;
39 import org.openrdf.model.URI;
40 import org.openrdf.model.vocabulary.XMLSchema;
41 import org.wsmo.common.Entity;
42 import org.wsmo.common.IRI;
43 import org.wsmo.common.Identifier;
44 import org.wsmo.common.TopEntity;
45 import org.wsmo.common.exception.SynchronisationException;
46 import org.wsmo.factory.WsmoFactory;
47 import org.wsmo.mediator.GGMediator;
48 import org.wsmo.mediator.OOMediator;
49 import org.wsmo.mediator.WGMediator;
50 import org.wsmo.mediator.WWMediator;
51 import org.wsmo.service.Capability;
52 import org.wsmo.service.Choreography;
53 import org.wsmo.service.Goal;
54 import org.wsmo.service.Interface;
55 import org.wsmo.service.Orchestration;
56 import org.wsmo.service.WebService;
57
58 import com.ontotext.ordi.wsmo4rdf.Constants;
59 import com.ontotext.ordi.wsmo4rdf.WSMLTripleHandler;
60 import com.ontotext.ordi.wsmo4rdf.WSMLtoTriples;
61 import com.ontotext.ordi.wsmo4rdf.WSMO4RDFRuntimeException;
62 import com.ontotext.wsmo4j.serializer.wsml.WSMLEnumerator;
63 import com.ontotext.wsmo4j.serializer.wsml.WSMLItem;
64
65 /**
66 * This class transforms a WSMO Entity to a set of triples associated with
67 * specific meta data. Meta-data is associated to triples as follows:
68 *
69 * Named graph contains the IRI of the outer most TopEntity to be converted
70 * (i.e, the container of all statements). Triplesets contains all IRIs of
71 * Entities, which after deletion should remove the statement.
72 *
73 * @author vassil
74 */
75 @SuppressWarnings("unchecked")
76 public class WSML2TriplesImpl extends WSMLEnumerator implements WSMLtoTriples {
77
78 protected final WsmoFactory wsmoFactory;
79 protected final Stack<URI> stack = new Stack<URI>();
80 private WSMLTripleHandler handler;
81
82 private URI attributeId = null;
83 private URI axiomId = null;
84
85 protected URI namedGraph = null;
86 protected final Stack<URI> metaDataStack = new Stack<URI>();
87
88 public WSML2TriplesImpl(WsmoFactory wsmoFactory, WSMLTripleHandler handler) {
89 super();
90 if (wsmoFactory == null || handler == null) {
91 throw new IllegalArgumentException(
92 "Null is not allowed for this constructor!");
93 }
94 this.wsmoFactory = wsmoFactory;
95 this.handler = handler;
96 }
97
98 public synchronized void process(Entity entity) {
99 stack.clear();
100 metaDataStack.clear();
101 new WSMLItem(entity).apply(this);
102 namedGraph = null;
103
104 assert stack.size() == 0;
105 }
106
107 public WSMLTripleHandler getHandler() {
108 return handler;
109 }
110
111 public synchronized void setHandler(WSMLTripleHandler handler) {
112 if (handler == null) {
113 throw new IllegalArgumentException();
114 }
115 this.handler = handler;
116 }
117
118 public void inEntity(Entity item) {
119 if (item instanceof Attribute) {
120
121 stack.push(attributeId);
122 } else if (item instanceof Axiom) {
123 stack.push(axiomId);
124 } else {
125 URI entityURI = Util.toURI(item.getIdentifier());
126 stack.push(entityURI);
127 }
128 }
129
130 public void onNFPKeyValues(IRI key, Set vals) {
131 if (vals.size() == 0) {
132 return;
133 }
134 Iterator<?> iter = vals.iterator();
135
136 handler.handleTriple(Util.toURI(key), Util.toURI(wsmoFactory
137 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
138 .createIRI(Constants.OWL_AnnotationProperty)), namedGraph,
139 metaDataStack.toArray(new URI[metaDataStack.size()]));
140
141 while (iter.hasNext()) {
142 Object obj = iter.next();
143 handler.handleTriple(stack.peek(), Util.toURI(key), Util
144 .toValue(obj), namedGraph, metaDataStack
145 .toArray(new URI[metaDataStack.size()]));
146 }
147 }
148
149 public void outEntity(Entity item) {
150 stack.pop();
151 }
152
153 public void inTopEntity(TopEntity te) {
154 super.inTopEntity(te);
155 String variant = te.getWsmlVariant();
156 if (variant == null)
157 variant = Constants.WSML_wsml_core.toString();
158 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
159 .createIRI(Constants.WSML_variant)), Util.toValue(variant),
160 namedGraph, metaDataStack
161 .toArray(new URI[metaDataStack.size()]));
162 }
163
164 public void outTopEntity(TopEntity te) {
165 return;
166 }
167
168 public void inImportsOntologies(TopEntity _) {
169 stack.push(Util.toURI(_.getIdentifier()));
170 }
171
172 public void onImportedOntologies(Set list) {
173 Iterator<?> iter = list.iterator();
174 while (iter.hasNext()) {
175 Identifier entityID = ((Entity) iter.next()).getIdentifier();
176 URI ontologId = Util.toURI(entityID);
177 metaDataStack.push(ontologId);
178 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
179 .createIRI(Constants.WSML_importsOntology)), ontologId,
180 namedGraph, metaDataStack.toArray(new URI[metaDataStack
181 .size()]));
182 metaDataStack.pop();
183 }
184 }
185
186 public void outImportsOntologies(TopEntity _) {
187 stack.pop();
188 }
189
190 public void inUsesMediators(TopEntity item) {
191 stack.push(Util.toURI(item.getIdentifier()));
192 }
193
194 public void onUsedMediators(Set list) {
195 Iterator<?> iter = list.iterator();
196 while (iter.hasNext()) {
197 Identifier entityID = (Identifier) iter.next();
198 URI mediatorId = Util.toURI(entityID);
199 metaDataStack.push(mediatorId);
200 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
201 .createIRI(Constants.WSML_usesMediator)), mediatorId,
202 namedGraph, metaDataStack.toArray(new URI[metaDataStack
203 .size()]));
204 metaDataStack.pop();
205 }
206 }
207
208 public void outUsesMediators(TopEntity item) {
209 stack.pop();
210 }
211
212 public void inOntology(Ontology item) {
213 URI ontologyURI = Util.toURI(item.getIdentifier());
214 namedGraph = ontologyURI;
215 stack.push(ontologyURI);
216 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
217 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
218 .createIRI(Constants.WSML_ontology)), namedGraph, metaDataStack
219 .toArray(new URI[metaDataStack.size()]));
220 }
221
222 public void outOntology(Ontology item) {
223 stack.pop();
224 namedGraph = null;
225 }
226
227 public void inAxiom(Axiom item) {
228 axiomId = Util.toURI(item.getIdentifier());
229 metaDataStack.push(axiomId);
230 processOntologyElement(item);
231 stack.push(axiomId);
232 handler.handleTriple(axiomId, Util.toURI(wsmoFactory
233 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
234 .createIRI(Constants.WSML_axiom)), namedGraph, metaDataStack
235 .toArray(new URI[metaDataStack.size()]));
236 }
237
238
239
240
241
242 public void onAxiomDefinition(Axiom item) {
243 super.onAxiomDefinition(item);
244 stack.pop();
245 metaDataStack.pop();
246 }
247
248 public void onLogExpression(LogicalExpression item) {
249 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
250 .createIRI(Constants.RDFS_isDefinedBy)), Util.toValue(item
251 .toString()), namedGraph, metaDataStack
252 .toArray(new URI[metaDataStack.size()]));
253 }
254
255 public void inConcept(Concept item) {
256 URI id = Util.toURI(item.getIdentifier());
257 metaDataStack.push(id);
258 processOntologyElement(item);
259 stack.push(id);
260 handler.handleTriple(id, Util.toURI(wsmoFactory
261 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
262 .createIRI(Constants.WSML_concept)), namedGraph, metaDataStack
263 .toArray(new URI[metaDataStack.size()]));
264 }
265
266 public void onSuperConcepts(Set list) {
267 Iterator<?> iter = list.iterator();
268 while (iter.hasNext()) {
269 Identifier entityID = ((Entity) iter.next()).getIdentifier();
270 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
271 .createIRI(Constants.RDFS_subClassOf)), Util
272 .toValue(entityID), namedGraph, metaDataStack
273 .toArray(new URI[metaDataStack.size()]));
274 }
275 }
276
277 public void outConcept(Concept item) {
278 stack.pop();
279 metaDataStack.pop();
280 }
281
282 public void inAttribute(Attribute item) {
283 if (stack.size() == 0 && item.getConcept() != null) {
284 inConcept(item.getConcept());
285 }
286 attributeId = Util.toURI(wsmoFactory.createAnonymousID());
287 metaDataStack.push(Util.toURI(item.getIdentifier()));
288 if (stack.size() != 0) {
289 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
290 .createIRI(Constants.PART_hasPart_directly)), attributeId,
291 namedGraph, metaDataStack.toArray(new URI[metaDataStack
292 .size()]));
293 }
294 stack.push(attributeId);
295
296 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
297 .createIRI(Constants.WSML_forAttribute)), Util.toValue(item
298 .getIdentifier()), namedGraph, metaDataStack
299 .toArray(new URI[metaDataStack.size()]));
300
301 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
302 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
303 .createIRI(Constants.WSML_attribute_definition)), namedGraph,
304 metaDataStack.toArray(new URI[metaDataStack.size()]));
305
306 if (item.isTransitive()) {
307 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
308 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
309 .createIRI(Constants.WSML_transitiveAttributeDefinition)),
310 namedGraph, metaDataStack.toArray(new URI[metaDataStack
311 .size()]));
312 }
313 if (item.isReflexive()) {
314 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
315 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
316 .createIRI(Constants.WSML_reflexiveAttributeDefinition)),
317 namedGraph, metaDataStack.toArray(new URI[metaDataStack
318 .size()]));
319 }
320 if (item.isSymmetric()) {
321 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
322 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
323 .createIRI(Constants.WSML_symmetricAttributeDefinition)),
324 namedGraph, metaDataStack.toArray(new URI[metaDataStack
325 .size()]));
326 }
327 if (item.getInverseOf() != null) {
328 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
329 .createIRI(Constants.WSML_inverseOf)), Util.toValue(item
330 .getIdentifier()), namedGraph, metaDataStack
331 .toArray(new URI[metaDataStack.size()]));
332 }
333 IRI pred = null;
334 if (item.isConstraining()) {
335 pred = wsmoFactory.createIRI(Constants.WSML_ofType);
336 } else {
337 pred = wsmoFactory.createIRI(Constants.WSML_impliesType);
338 }
339 Set<?> list = item.listTypes();
340 Iterator<?> iter = list.iterator();
341 while (iter.hasNext()) {
342 Type c = (Type) iter.next();
343 if (c instanceof Concept)
344 handler.handleTriple(stack.peek(), Util.toURI(pred), Util
345 .toValue(((Concept) c).getIdentifier()), namedGraph,
346 metaDataStack.toArray(new URI[metaDataStack.size()]));
347 else if (c instanceof WsmlDataType)
348 handler.handleTriple(stack.peek(), Util.toURI(pred), Util
349 .toURI(((WsmlDataType) c).getIRI()), namedGraph,
350 metaDataStack.toArray(new URI[metaDataStack.size()]));
351 else
352 throw new SynchronisationException("Unexpected attribute type!");
353
354 }
355
356 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
357 .createIRI(Constants.WSML_minCardinality)), Util.toValue(item
358 .getMinCardinality(), XMLSchema.NON_NEGATIVE_INTEGER),
359 namedGraph, metaDataStack
360 .toArray(new URI[metaDataStack.size()]));
361 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
362 .createIRI(Constants.WSML_maxCardinality)), Util.toValue(item
363 .getMaxCardinality(), XMLSchema.NON_NEGATIVE_INTEGER),
364 namedGraph, metaDataStack
365 .toArray(new URI[metaDataStack.size()]));
366 }
367
368 public void outAttribute(Attribute item) {
369 stack.pop();
370 metaDataStack.pop();
371 attributeId = null;
372 }
373
374 public void inRelation(Relation item) {
375 URI id = Util.toURI(item.getIdentifier());
376 metaDataStack.push(id);
377 processOntologyElement(item);
378 stack.push(id);
379 handler.handleTriple(id, Util.toURI(wsmoFactory
380 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
381 .createIRI(Constants.WSML_Relation)), namedGraph, metaDataStack
382 .toArray(new URI[metaDataStack.size()]));
383 }
384
385
386
387 public void onParameters(List list) {
388 if (list.size() == 0)
389 return;
390 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
391 .createIRI(Constants.WSML_arity)), Util.toValue(list.size(),
392 XMLSchema.NON_NEGATIVE_INTEGER), namedGraph, metaDataStack
393 .toArray(new URI[metaDataStack.size()]));
394 Iterator<?> iter = list.iterator();
395 URI anon = Util.toURI(wsmoFactory.createAnonymousID());
396 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
397 .createIRI(Constants.PART_hasPart_directly)), anon, namedGraph,
398 metaDataStack.toArray(new URI[metaDataStack.size()]));
399 URI last = null;
400
401 while (iter.hasNext()) {
402 if (last != null) {
403 URI foo = Util.toURI(wsmoFactory.createAnonymousID());
404 handler.handleTriple(anon, Util.toURI(wsmoFactory
405 .createIRI(Constants.RDF_rest)), foo, namedGraph,
406 metaDataStack.toArray(new URI[metaDataStack.size()]));
407 anon = foo;
408 }
409 handler.handleTriple(anon, Util.toURI(wsmoFactory
410 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
411 .createIRI(Constants.RDF_List)), namedGraph, metaDataStack
412 .toArray(new URI[metaDataStack.size()]));
413 URI local = Util.toURI(wsmoFactory.createAnonymousID());
414 handler.handleTriple(anon, Util.toURI(wsmoFactory
415 .createIRI(Constants.RDF_first)), local, namedGraph,
416 metaDataStack.toArray(new URI[metaDataStack.size()]));
417 Parameter param = (Parameter) iter.next();
418 URI pred = null;
419
420 if (param.isConstraining()) {
421 pred = Util.toURI(wsmoFactory.createIRI(Constants.WSML_ofType));
422 } else {
423 pred = Util.toURI(wsmoFactory
424 .createIRI(Constants.WSML_impliesType));
425 }
426
427 Set types = param.listTypes();
428 Iterator typesIter = types.iterator();
429 while (typesIter.hasNext()) {
430
431 Object theType = typesIter.next();
432 if (theType instanceof WsmlDataType)
433 handler.handleTriple(local, pred, Util
434 .toValue(((WsmlDataType) theType).getIRI()),
435 namedGraph, metaDataStack
436 .toArray(new URI[metaDataStack.size()]));
437 else
438 handler.handleTriple(local, pred, Util
439 .toValue(((Concept) theType).getIdentifier()),
440 namedGraph, metaDataStack
441 .toArray(new URI[metaDataStack.size()]));
442 }
443 last = anon;
444 }
445
446 handler.handleTriple(anon, Util.toURI(wsmoFactory
447 .createIRI(Constants.RDF_rest)), Util.toValue(wsmoFactory
448 .createIRI(Constants.RDF_nil)), namedGraph, metaDataStack
449 .toArray(new URI[metaDataStack.size()]));
450 }
451
452 public void onSuperRelations(Set list) {
453 Iterator iter = list.iterator();
454 while (iter.hasNext()) {
455 Entity sc = (Entity) iter.next();
456 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
457 .createIRI(Constants.WSML_subRelationOf)), Util.toValue(sc
458 .getIdentifier()), namedGraph, metaDataStack
459 .toArray(new URI[metaDataStack.size()]));
460 }
461 }
462
463 public void outRelation(Relation item) {
464 stack.pop();
465 metaDataStack.pop();
466 }
467
468 public void inInstance(Instance item) {
469 URI id = Util.toURI(item.getIdentifier());
470 metaDataStack.push(id);
471 processOntologyElement(item);
472
473
474 if (item.listAttributeValues().size() == 0
475 && item.listConcepts().size() == 0
476 && item.listNFPValues().size() == 0) {
477 handler.handleTriple(id, Util.toURI(wsmoFactory
478 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
479 .createIRI(Constants.RDFS_Resource)), namedGraph,
480 metaDataStack.toArray(new URI[metaDataStack.size()]));
481 }
482 stack.push(id);
483 }
484
485 public void onInstanceMemberOf(Set list) {
486 if (0 == list.size())
487 return;
488 Iterator<?> iter = list.iterator();
489 while (iter.hasNext()) {
490 Concept c = (Concept) iter.next();
491 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
492 .createIRI(Constants.RDF_type)), Util.toValue(c
493 .getIdentifier()), namedGraph, metaDataStack
494 .toArray(new URI[metaDataStack.size()]));
495 }
496 }
497
498 public void onAttributeKeyValue(Identifier key, Set values) {
499 if (values.size() == 0 || key instanceof IRI == false) {
500 return;
501 }
502 URI pred = Util.toURI(key);
503 handler.handleTriple(pred, Util.toURI(wsmoFactory
504 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
505 .createIRI(Constants.WSML_Attribute)), namedGraph,
506 metaDataStack.toArray(new URI[metaDataStack.size()]));
507 Iterator<?> iter = values.iterator();
508 while (iter.hasNext()) {
509 Object o = iter.next();
510 handler.handleTriple(stack.peek(), pred, Util.toValue(o),
511 namedGraph, metaDataStack.toArray(new URI[metaDataStack
512 .size()]));
513 }
514 }
515
516 public void outInstance(Instance item) {
517 stack.pop();
518 metaDataStack.pop();
519 }
520
521 public void inRelationInstance(RelationInstance item) {
522 URI id = Util.toURI(item.getIdentifier());
523 metaDataStack.push(id);
524 processOntologyElement(item);
525 stack.push(id);
526 handler.handleTriple(id, Util.toURI(wsmoFactory
527 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
528 .createIRI(Constants.WSML_RelationInstance)), namedGraph,
529 metaDataStack.toArray(new URI[metaDataStack.size()]));
530 }
531
532 public void onRelationInstanceMemberOf(Relation relation) {
533 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
534 .createIRI(Constants.RDF_type)), Util.toValue(relation
535 .getIdentifier()), namedGraph, metaDataStack
536 .toArray(new URI[metaDataStack.size()]));
537 }
538
539 public void onParameterValues(List list) {
540 URI last = null;
541 URI anon = Util.toURI(wsmoFactory.createAnonymousID());
542 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
543 .createIRI(Constants.PART_hasPart_directly)), anon, namedGraph,
544 metaDataStack.toArray(new URI[metaDataStack.size()]));
545 Iterator<?> iter = list.iterator();
546 while (iter.hasNext()) {
547 Object val = iter.next();
548 if (last != null) {
549 URI foo = Util.toURI(wsmoFactory.createAnonymousID());
550 handler.handleTriple(anon, Util.toURI(wsmoFactory
551 .createIRI(Constants.RDF_rest)), foo, namedGraph,
552 metaDataStack.toArray(new URI[metaDataStack.size()]));
553 anon = foo;
554 }
555 handler.handleTriple(anon, Util.toURI(wsmoFactory
556 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
557 .createIRI(Constants.RDF_List)), namedGraph, metaDataStack
558 .toArray(new URI[metaDataStack.size()]));
559 handler.handleTriple(anon, Util.toURI(wsmoFactory
560 .createIRI(Constants.RDF_first)), Util.toValue(val),
561 namedGraph, metaDataStack.toArray(new URI[metaDataStack
562 .size()]));
563 last = anon;
564 }
565 handler.handleTriple(anon, Util.toURI(wsmoFactory
566 .createIRI(Constants.RDF_rest)), Util.toValue(wsmoFactory
567 .createIRI(Constants.RDF_nil)), namedGraph, metaDataStack
568 .toArray(new URI[metaDataStack.size()]));
569 }
570
571 public void outRelationInstance(RelationInstance item) {
572 stack.pop();
573 metaDataStack.pop();
574 }
575
576 public void inWebService(WebService item) {
577 URI webServiceURI = Util.toURI(item.getIdentifier());
578 namedGraph = webServiceURI;
579 stack.push(webServiceURI);
580 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
581 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
582 .createIRI(Constants.WSML_webService)), namedGraph,
583 metaDataStack.toArray(new URI[metaDataStack.size()]));
584 }
585
586 public void outWebService(WebService item) {
587 stack.pop();
588 namedGraph = null;
589 }
590
591 public void inCapability(Capability item) {
592 URI id = Util.toURI(item.getIdentifier());
593 if (namedGraph == null)
594 namedGraph = id;
595 metaDataStack.push(id);
596 if (stack.size() > 0) {
597 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
598 .createIRI(Constants.PART_hasPart_directly)), Util
599 .toValue(item.getIdentifier()), namedGraph, metaDataStack
600 .toArray(new URI[metaDataStack.size()]));
601 }
602 stack.push(id);
603 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
604 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
605 .createIRI(Constants.WSML_Capability)), namedGraph,
606 metaDataStack.toArray(new URI[metaDataStack.size()]));
607 }
608
609 public void onSharedVariables(Set list) {
610 Iterator<?> iter = list.iterator();
611 while (iter.hasNext()) {
612 Variable sc = (Variable) iter.next();
613 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
614 .createIRI(Constants.WSML_sharedVariable)), Util
615 .toValue("?" + sc.getName()), namedGraph, metaDataStack
616 .toArray(new URI[metaDataStack.size()]));
617 }
618 }
619
620 public void outCapability(Capability item) {
621 URI id = stack.pop();
622 metaDataStack.pop();
623 if (namedGraph.equals(id))
624 namedGraph = null;
625 }
626
627 public void onHasAssumptions(Entity item) {
628 URI id = Util.toURI(item.getIdentifier());
629 metaDataStack.push(id);
630 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
631 .createIRI(Constants.WSML_hasAssumption)), id, namedGraph,
632 metaDataStack.toArray(new URI[metaDataStack.size()]));
633 stack.push(id);
634 axiomId = id;
635 }
636
637 public void onHasEffects(Entity item) {
638 URI id = Util.toURI(item.getIdentifier());
639 metaDataStack.push(id);
640 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
641 .createIRI(Constants.WSML_hasEffect)), id, namedGraph,
642 metaDataStack.toArray(new URI[metaDataStack.size()]));
643 stack.push(id);
644 axiomId = id;
645 }
646
647 public void onHasPreconditions(Entity item) {
648 URI id = Util.toURI(item.getIdentifier());
649 metaDataStack.push(id);
650 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
651 .createIRI(Constants.WSML_hasPrecondition)), id, namedGraph,
652 metaDataStack.toArray(new URI[metaDataStack.size()]));
653 stack.push(id);
654 axiomId = id;
655 }
656
657 public void onHasPostconditions(Entity item) {
658 URI id = Util.toURI(item.getIdentifier());
659 metaDataStack.push(id);
660 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
661 .createIRI(Constants.WSML_hasPostcondition)), id, namedGraph,
662 metaDataStack.toArray(new URI[metaDataStack.size()]));
663 stack.push(id);
664 axiomId = id;
665 }
666
667 public void inInterface(Interface item) {
668 URI id = Util.toURI(item.getIdentifier());
669 if (namedGraph == null)
670 namedGraph = id;
671 metaDataStack.push(id);
672 if (stack.size() > 0) {
673 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
674 .createIRI(Constants.PART_hasPart_directly)), Util
675 .toValue(item.getIdentifier()), namedGraph, metaDataStack
676 .toArray(new URI[metaDataStack.size()]));
677 }
678 stack.push(id);
679 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
680 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
681 .createIRI(Constants.WSML_Interface)), namedGraph,
682 metaDataStack.toArray(new URI[metaDataStack.size()]));
683
684 if (item.getChoreography() != null)
685 _inChoreography(item.getChoreography());
686 }
687
688 public void outInterface(Interface item) {
689 URI id = stack.pop();
690 metaDataStack.pop();
691 if (namedGraph.equals(id))
692 namedGraph = null;
693 }
694
695 public void onMultipleInterfaces(Set list) {
696 Iterator<?> iter = list.iterator();
697 while (iter.hasNext()) {
698 Entity en = (Entity) iter.next();
699 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
700 .createIRI(Constants.PART_hasPart_directly)), Util
701 .toValue(en.getIdentifier()), namedGraph, metaDataStack
702 .toArray(new URI[metaDataStack.size()]));
703 }
704 }
705
706 public void inOrchestration(Orchestration item) {
707
708 URI id = Util.toURI(item.getIdentifier());
709 metaDataStack.push(id);
710 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
711 .createIRI(Constants.WSML_Orchestration)), id, namedGraph,
712 metaDataStack.toArray(new URI[metaDataStack.size()]));
713 stack.push(id);
714 }
715
716 public void outOrchestration(Orchestration item) {
717 stack.pop();
718 metaDataStack.pop();
719 }
720
721
722
723
724
725
726 public void inChoreography(Choreography item) {
727 return;
728 }
729
730 public void inGoal(Goal item) {
731 URI id = Util.toURI(item.getIdentifier());
732 namedGraph = id;
733 stack.push(id);
734 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
735 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
736 .createIRI(Constants.WSML_goal)), namedGraph, metaDataStack
737 .toArray(new URI[metaDataStack.size()]));
738 }
739
740 public void outGoal(Goal item) {
741 stack.pop();
742 namedGraph = null;
743 }
744
745 public void onMediatorSources(Set list) {
746 Iterator<?> iter = list.iterator();
747 while (iter.hasNext()) {
748 URI id = Util.toURI((Identifier) iter.next());
749 metaDataStack.push(id);
750 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
751 .createIRI(Constants.WSML_source)), id, namedGraph,
752 metaDataStack.toArray(new URI[metaDataStack.size()]));
753 metaDataStack.pop();
754 }
755 }
756
757 public void onMediatorTarget(Identifier item) {
758 URI id = Util.toURI(item);
759 metaDataStack.push(id);
760 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
761 .createIRI(Constants.WSML_target)), id, namedGraph,
762 metaDataStack.toArray(new URI[metaDataStack.size()]));
763 metaDataStack.pop();
764 }
765
766 public void onMediatorUseService(Identifier item) {
767 URI id = Util.toURI(item);
768 metaDataStack.push(id);
769 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
770 .createIRI(Constants.WSML_usesService)), Util.toValue(item),
771 namedGraph, metaDataStack
772 .toArray(new URI[metaDataStack.size()]));
773 metaDataStack.pop();
774 }
775
776 public void inOOMediator(OOMediator item) {
777 URI id = Util.toURI(item.getIdentifier());
778 namedGraph = id;
779 stack.push(id);
780 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
781 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
782 .createIRI(Constants.WSML_ooMediator)), namedGraph,
783 metaDataStack.toArray(new URI[metaDataStack.size()]));
784 }
785
786 public void outOOMediator(OOMediator item) {
787 stack.pop();
788 namedGraph = null;
789 }
790
791 public void inWGMediator(WGMediator item) {
792 URI id = Util.toURI(item.getIdentifier());
793 namedGraph = id;
794 stack.push(id);
795 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
796 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
797 .createIRI(Constants.WSML_wgMediator)), namedGraph,
798 metaDataStack.toArray(new URI[metaDataStack.size()]));
799 }
800
801 public void outWGMediator(WGMediator item) {
802 stack.pop();
803 namedGraph = null;
804 }
805
806 public void inWWMediator(WWMediator item) {
807 URI id = Util.toURI(item.getIdentifier());
808 namedGraph = id;
809 stack.push(id);
810 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
811 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
812 .createIRI(Constants.WSML_wwMediator)), namedGraph,
813 metaDataStack.toArray(new URI[metaDataStack.size()]));
814 }
815
816 public void outWWMediator(WWMediator item) {
817 stack.pop();
818 namedGraph = null;
819 }
820
821 public void inGGMediator(GGMediator item) {
822 URI id = Util.toURI(item.getIdentifier());
823 namedGraph = id;
824 stack.push(id);
825 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
826 .createIRI(Constants.RDF_type)), Util.toValue(wsmoFactory
827 .createIRI(Constants.WSML_ggMediator)), namedGraph,
828 metaDataStack.toArray(new URI[metaDataStack.size()]));
829 }
830
831 public void outGGMediator(GGMediator item) {
832 stack.pop();
833 namedGraph = null;
834 }
835
836
837
838
839 private void processOntologyElement(OntologyElement item) {
840 if (stack.size() == 0) {
841 if (item.getOntology() == null) {
842 throw new WSMO4RDFRuntimeException(String.format(
843 "The OntologyElement %s could not be persisted, "
844 + "because it's not associated with Ontology!",
845 item.getIdentifier()));
846 }
847
848 URI container = Util.toURI(item.getOntology().getIdentifier());
849 if (namedGraph == null) {
850 namedGraph = container;
851 }
852 handler.handleTriple(container, Util.toURI(wsmoFactory
853 .createIRI(Constants.PART_hasPart_directly)), metaDataStack
854 .peek(), namedGraph, metaDataStack
855 .toArray(new URI[metaDataStack.size()]));
856 } else {
857 URI container = stack.peek();
858 handler.handleTriple(container, Util.toURI(wsmoFactory
859 .createIRI(Constants.PART_hasPart_directly)), metaDataStack
860 .peek(), namedGraph, metaDataStack
861 .toArray(new URI[metaDataStack.size()]));
862 }
863 }
864
865
866
867
868
869
870
871 private void _inChoreography(Choreography item) {
872 URI id = Util.toURI(item.getIdentifier());
873 metaDataStack.push(id);
874 handler.handleTriple(stack.peek(), Util.toURI(wsmoFactory
875 .createIRI(Constants.WSML_Choreography)), id, namedGraph,
876 metaDataStack.toArray(new URI[metaDataStack.size()]));
877 if (item instanceof org.wsmo.service.choreography.Choreography) {
878 SerializerImpl serializer = new SerializerImpl(null);
879 handler
880 .handleTriple(
881 id,
882 Util
883 .toURI(wsmoFactory
884 .createIRI("urn:"
885 + org.wsmo.service.choreography.Choreography.class
886 .getName())),
887 Util
888 .toValue(serializer
889 .serialize((org.wsmo.service.choreography.Choreography) item)),
890 namedGraph, metaDataStack
891 .toArray(new URI[metaDataStack.size()]));
892 }
893 metaDataStack.pop();
894 }
895 }