Vous êtes sur la page 1sur 5

DIS – un Web Broker & Discovery Service

Rosario Turco

Nella vita di un informatico capita, prima o poi, di lavorare su sistemi Java con prodotti Open Source come
Linux RedHat Enterprise, ServiceMix 4.3.0 per il BUS, Intalio per il BPM, Tomcat e Struts 2, Apache, JBoss,
Maven , Eclipse e Cimero per l’integrazione EIP con ServiceMix (Enterprise Integration Pattern).

A volte c’è da mettere su un ambiente collaborativo di lavoro, per la modifica ed il test di workflow, capace
di integrare i web services con un Web Broker o un Service Broker; il che consente ai modeler di prelevare
WSDL e XSD dei web services, da ServiceMix e da un repository sotto Tomcat o Apache.

In sostanza è la necessità di un Discovery Service. La prima idea è di trovare un altro prodotto open source,
la successiva è usare le ontologie e la snellezza del framework KBFE (Vedi SourceForge per il download del
war e dei manuali).

Con KBFE e il Web Service AXIS2 collegato (tutto nel war) si potrà ottenere la lista dei web services in
formato XML; mentre con una web application, basata su Tomcat e Struts2, si può renderizzare a video la
lista dei web services con tutti gli attributi come URL della WSDL, l’URL dell’XSD, la descrizione, la lista delle
operation, il nome del servizio etc. Cliccando sulle URL si possono ottenere WSDL o XSD.

La prima cosa è modellare l’ontologia, inizialmente nel modo più semplice possibile. Dopo si può affinare
maggiormente. Consiglio di inserire all’inizio come URL che imposta Protegè la seguente:

http://www.semanticweb.org/UniversityOntologies/MyOntology.owl

Il nome del file finale dell’ontologia come MyDiscoveryService.owl

Ho scelto di usare RDF/XML così lo script SPARQL può usare una sintassi come SQL ma potreste benissimo
scegliere OWL, tenendo conto però di scrivere lo script SPARQL coerente a OWL.

1
Inseriamo solo la classe Service, le relazioni (Object Properties) e gli attributi (Data Properties) e una
Istances (un servizio nel caso specifico che ho chiamato TecOrderManagement). Installiamo Tomcat 6.0.32
o superiore, installiamo il war di KBFE e configuriamolo secondo le info della User’s Guide.

A questo punto dobbiamo aggiungere a $CATALINA_HOME/bin il file dell’ontologia MyDiscoveryService.owl


che avrà un contenuto come in APPENDICE.

Sempre in $CATALINA_HOME/bin occorre che sia presenta una cartella dbquery con uno script ALL.sparql il
cui contenuto è in APPENDICE e occorre far attenzione a cambiare il puntamento nello script in modo che ci
sia coerenza rispetto a dove è posizionato MyDiscoveryService.owl. In rosso è la parte da cambiare.

Inoltre occorre fare una modifica al file KBFE.properties (vedi APPENDICE).

Se configuriamo SOAPUI e inoltriamo come nome ontologia MyDiscoveryService (InOnt) e come Individuals
ALL si ottiene il risultato in figura.

Per la Web Applications pensateci voi. Alla prox.

APPENDICE

MyDiscoveryService.owl

<?xml version="1.0"?>

<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY MyOntology "http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#" >
]>

<rdf:RDF xmlns="http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#"
xml:base="http://www.semanticweb.org/UniversityOntologies/MyOntology.owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:MyOntology="http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://www.semanticweb.org/UniversityOntologies/MyOntology.owl"/>

<!--

2
///////////////////////////////////////////////////////////////////////////////////////
//
// Datatypes
//
///////////////////////////////////////////////////////////////////////////////////////
-->

<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Object Properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#hasName -->

<owl:ObjectProperty rdf:about="&MyOntology;hasName"/>

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#hasURL -->

<owl:ObjectProperty rdf:about="&MyOntology;hasURL"/>

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#hasXSD -->

<owl:ObjectProperty rdf:about="&MyOntology;hasXSD"/>

<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Data properties
//
///////////////////////////////////////////////////////////////////////////////////////
-->

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#listOperation -->

<owl:DatatypeProperty rdf:about="&MyOntology;listOperation">
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#nameService -->

<owl:DatatypeProperty rdf:about="&MyOntology;nameService">
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#urlWSDL -->

<owl:DatatypeProperty rdf:about="&MyOntology;urlWSDL">
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#xsdRelated -->

<owl:DatatypeProperty rdf:about="&MyOntology;xsdRelated">
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>

<!--
///////////////////////////////////////////////////////////////////////////////////////
//
// Classes
//
///////////////////////////////////////////////////////////////////////////////////////
-->

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#Service -->

<owl:Class rdf:about="&MyOntology;Service"/>

<!--
3
///////////////////////////////////////////////////////////////////////////////////////
//
// Individuals
//
///////////////////////////////////////////////////////////////////////////////////////
-->

<!-- http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#TecOrderMgmt -->

<owl:NamedIndividual rdf:about="&MyOntology;TecOrderMgmt">
<rdf:type rdf:resource="&MyOntology;Service"/>
<xsdRelated rdf:datatype="&xsd;string">TecOrderMgmt.xsd</xsdRelated>
<nameService rdf:datatype="&xsd;string">TecnicalOrderManagement</nameService>
<urlWSDL rdf:datatype="&xsd;string">http://10.12.32.54/Service/TecOrderMgment.wsdl?</urlWSDL>
<listOperation rdf:datatype="&xsd;string">sendOperation(XmlMsg);getOperation()</listOperation>
</owl:NamedIndividual>
</rdf:RDF>

<!-- Generated by the OWL API (version 3.2.2.1785) http://owlapi.sourceforge.net -->

ALL.sparql

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

PREFIX table: <http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#>

SELECT ?a ?b ?c ?d ?e

FROM <file:/C:/Users/37509490/Desktop/OWL/OWL/MyOntology/MyDiscoveryService.owl>

WHERE

?a table:urlWSDL ?b .

?a table:xsdRelated ?c .

?a table:nameService ?d .

?a table:listOperation ?e

KBFE.properties

#PER Attivare (=YES) o disattivare (=NO)le System.out comode per uk debugging

WRITE_SYSTEM=NO

#Namespace di default

#Insert the namespace of your file of Protegè

IRI_NAMESPACE=<http://www.semanticweb.org/UniversityOntologies/MyOntology.owl#>

#Ontologie accettate (SE NON C'E' NULLA SI INTENDE = NO) -- dipende da quelle trattate

MyDiscoveryService=YES

4
#SISTEMI ABILITATI (SE NON C'E' NULLA SI INTENDE = NO)

ESBE=YES

#FORMATO OUTPUT TEXT (DEFAULT) O XML

FORMAT_OUTPUT=XML

NUMV_SPARQL=5

Vous aimerez peut-être aussi