Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Beschreibung von Web Services Seminar Parallele und Verteilte Systeme

Ähnliche Präsentationen


Präsentation zum Thema: "Beschreibung von Web Services Seminar Parallele und Verteilte Systeme"—  Präsentation transkript:

1 Beschreibung von Web Services Seminar Parallele und Verteilte Systeme
im Semantic Web Armin Stein Seminar Parallele und Verteilte Systeme Services Computing und Service-Oriented Architectures

2 Vorgehen Motivation Beschreibung von Elementen (RDF/S)
Ontologien (OWL) Topic Maps (XTM) Umfassender Ansatz (OWL-S) Fazit Fragen Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit

3 Motivation Ziel des Semantic Web: Maschinenlesbarkeit der Inhalte
Daraus „Implizite Information“ Vision der Nutzung von Web Services: Automatisches Auffinden Automatischer Aufruf Automatische Anordnung und Automatische Kommunikation Voraussetzung: Maschinenlesbarkeit und vor allem Maschinenverständlichkeit Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit

4 Beschreibung (RDF) RDF Verwendung: RSS (Nachrichten etc.)
Einfache Beziehung zwischen Objekten Tripel der Art Subjekt – Prädikat – Objekt <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rdf:Description rdf:about="http://www.w3.org/RDF/"> <dc:title>Resource Description Framework (RDF)</dc:title> </rdf:Description> Verwendung: RSS (Nachrichten etc.) Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit RDF – RDF/S

5 Beschreibung (RDF/S) RDF/S Erweitertes Vokabular Klassenbildung
Hierarchisierung <rdfs:Class rdf:ID="Person"> <rdfs:comment>Personenklasse</rdfs:comment> <rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Resource"/> </rdfs:Class> <rdfs:Class rdf:ID="Student"> <rdfs:comment>Studentenklasse</rdfs:comment> <rdfs:subClassOf rdf:resource="#Person"/> Abfrage durch Parsen, Graphen-Erstellung… Schön, aber: Was ist ein „Student“? Eine „Person“!… Was ist eine „Person“…? (vielleicht juristisch?) Bereich der Wort-Domäne Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit RDF – RDF/S

6 Ontologien (OWL) Aus der Philosophie: „Sein“ als Gesprächsgegenstand
Definition von Gegenständen und Beziehungen Datei auf dem Server, die interpretiert werden kann OWL = Web Ontology Language. Bildung einer Ontologie: Aus der Ontologie <owl:Class rdf:ID="PastaWithWhiteSauce"> <rdfs:subClassOf rdf:resource="#Pasta" /> <owl:disjointWith rdf:resource="#PastaWithRedSauce" /> </owl:Class> Verknüpfbarkeit! Konkrete Realisierung als Expertensystem vorhanden Durch Verknüpfungen Verständnis über das „Sein“ Umsetzung beispielsweise als Topic Map Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit

7 Topic Maps (XTM) Anlehnung an Back-of-Book-Index, XmlTopicMaps Topics
„Dinge“, die mit einem Namen belegt werden Aufnahme in die Map abhängig von der Präferenz des Betrachters Können durch Klassen hierarchisiert werden „Münster“ Occurrences Realisierung eines Topics „www.muenster.de“ „www.sz.de/artikel_ueber_muenster…“ Auch Daten: „Einwohner: “ Associations Verbinden Topics untereinander oder Topics und Occurrences Müssen nicht hierarchisch sein (Busverbindung) Rath (2003), S. 9. Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit TAO – Beispiel

8 Topic Maps (XTM) Warum Topic Map? Web Services?
In Anlehnung an Rath (2003), S. 16. Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit TAO – Beispiel

9 Topic Maps (XTM) Substitut für UDDI?
Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit TAO – Beispiel

10 Konzept (OWL-S) - Übersicht
Umfassender Ansatz W3C Member Submission 22. November 2004 Abgesehen vom Namen wohlwollend aufgenommen Nutzung von RDF/S, OWL und WSDL Aufteilung in vier (fünf) Dateien Instanziierbare Hauptklasse, verweist auf: Service Profile Service Process Model Service Grounding WSDL – Beschreibung Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

11 Konzept (OWL-S) - Hauptklasse
Wird instanziiert für jeden Service-Aufruf Beispiel Fluggesellschaft „Bravo Air“ <owl:Ontology rdf:about=""> <!-- Versionsinformation und Kommentar -->... <owl:imports rdf:resource="&service;" /> <owl:imports rdf:resource="&ba_profile;" /> <owl:imports rdf:resource="&ba_process;" /> </owl:Ontology> Profile, Process und Grounding <service:Service rdf:ID="BravoAir_ReservationAgent"> <service:presents rdf:resource="&ba_profile;#Profile_BravoAir_ReservationAgent"/> <service:describedBy rdf:resource="&ba_process;#BravoAir_ReservationAgent_ProcessModel"/> <service:supports rdf:resource="&ba_grounding;#Grounding_BravoAir_ReservationAgent"/> </service:Service> </rdf:RDF> Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

12 Konzept (OWL-S) – Profile
Informationen über das anbietende Unternehmen Allgemeine (textuelle) Informationen über den Service (Wie geschaffen für UDDI!) <profileHierarchy:AirlineTicketing rdf:ID="Profile_BravoAir_ReservationAgent"> <service:presentedBy rdf:resource="&ba_service;#BravoAir_ReservationAgent"/> <profile:has_process rdf:resource="&ba_process;#BravoAir_Process"/> <profile:serviceName>BravoAir_ReservationAgent</profile:serviceName> <profile:textDescription>…</profile:textDescription> Hier auch Qualitätseinschätzung des Services (durch den Provider) Einordnung in Standards (bspw. NAICS) <profile:hasInput rdf:resource="&ba_process;#DepartureAirport_In"/> <profile:hasOutput rdf:resource="&ba_process;#AvailableFlightItineraryList_Out"/> <profile:hasEffect rdf:resource="&ba_process;#HaveSeat"/> </profileHierarchy:AirlineTicketing> Sorgfältige Auswahl der Informationen! Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

13 Konzept (OWL-S) – Process Model
Losgelöst vom Programmcode des Web Services Eher zu betrachten als „Business Process“ atomic-, composite- und simple-Prozesse <process:CompositeProcess rdf:ID="BravoAir_Process"> <rdfs:label>This is the top level process for BravoAir</rdfs:label> <process:composedOf> <process:Sequence> <process:components rdf:parseType="Collection"> <process:AtomicProcess rdf:about="#GetDesiredFlightDetails"/> <process:AtomicProcess rdf:about="#SelectAvailableFlight"/> <process:CompositeProcess rdf:about="#BookFlight"/> </process:components> </process:Sequence> </process:composedOf> </process:CompositeProcess> Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

14 Konzept (OWL-S) – Process Model
Definition der Ein- und Ausgaben <process:AtomicProcess rdf:ID="SelectAvailableFlight"> <process:hasInput rdf:resource="#PreferredFlightItinerary_In"/> <process:hasOutput rdf:resource="#AvailableFlightItineraryList_Out"/> </process:AtomicProcess> <process:Input rdf:ID="PreferredFlightItinerary_In"> <process:parameterType rdf:resource="&concepts;#FlightItinerary"/> </process:Input> <process:UnConditionalOutput rdf:ID="AvailableFlightItineraryList_Out"> <process:parameterType rdf:resource="&concepts;#FlightItineraryList"/> </process:UnConditionalOutput> Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

15 Konzept (OWL-S) – Grounding
Konkrete Realisierung Verknüpfung mit WSDL Grounding von OWL vergleichbar mit Binding von WSDL Benötigt WSDL-Binding Entnommen aus Abrufdatum: Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

16 Konzept (OWL-S) – Grounding
Beispiel: <message name="SelectAvailableFlight_Input"> <part name="preferredFlightItinerary" owl-s parameter="BravoAir:#preferredFlightItinerary_In"/> </message> <portType name="SelectAvailableFlight_PortType"> <operation name="SelectAvailableFlight_operation" owl-s process="BravoAir:#SelectAvailableFlight"> <input message="tns:SelectAvailableFlight_Input"/> <output message="tns:SelectAvailableFlight_Output"/> </operation> </portType> <grounding:WsdlGrounding rdf:ID="Grounding_BravoAir_ReservationAgent"> <service:supportedBy rdf:resource="&ba_service;#BravoAir_ReservationAgent"/> <!-- Mehrere Groundings für atomare Prozesse, im Speziellen: --> <grounding:hasAtomicProcessGrounding rdf:resource="#WsdlGrounding_SelectAvailableFlight"/> </grounding:WsdlGrounding> Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit Übersicht – Hauptklasse – Profile – Process Model – Grounding

17 Fazit Semantic Web durch Idee der Beschreibung geradezu geschaffen für die Unterstützung von Web Services OWL-S in Verbindung mit WSDL guter Ansatz zur vollständigen Beschreibung eines Web Services Nutzt vorhandene (vom W3C unterstützte) Sprachen wie RDF, OWL und WSDL Service Profile „UDDI-Enabled“, aber noch immer Eintragung „von Hand“ notwendig (nicht OWL-S-Problem!) Idee: „Web-Service-Suchmaschine“, Realisierung als Topic Map; Vorteil: Erweiterbarkeit, Durchsuchbarkeit Architektur eines Web Service und alternative Beschreibung: WSMO, WSML  Jan Motivation – Beschreibung – Ontologien – Topic Maps – Umfassender Ansatz – Fazit

18 Literaturverzeichnis
Rath, Holger: The Topic Maps Handbook – White Paper. URL: – Abrufdatum: Martin, David; Burstein, Mark; Hobbs, Jerry; Lassila, Ora; McDermott, Drew; McIlraith,Sheila; Narayanan, Srini; Paolucci, Massimo; Parsia, Bijan; Payne, Terry; Sirin, Evren; Srinivasan, Naveen; Sycara, Katia: OWL-S: Semantic Markup for Web Services. URL: – Abrufdatum:

19 Fragen? ?

20 Beschreibung von Web Services Vielen Dank für die Aufmerksamkeit!
Das war… Beschreibung von Web Services im Semantic Web Armin Stein Vielen Dank für die Aufmerksamkeit!

21 Beispiel OWL 1/3 Gerüst <!DOCTYPE rdf:RDF [
<!ENTITY vin "http://www.w3.org/TR/2004/REC-owl-guide /wine#" > <!ENTITY food "http://www.w3.org/TR/2004/REC-owl-guide /food#" > ]> <rdf:RDF xmlns ="&vin;" xmlns:vin ="&vin;" xml:base ="&vin;" xmlns:food="&food;" xmlns:owl ="http://www.w3.org/2002/07/owl#" xmlns:rdf ="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xsd ="http://www.w3.org/2001/XMLSchema#"> ... <owl:Ontology rdf:about=""> <rdfs:comment>An example OWL ontology</rdfs:comment> <owl:imports rdf:resource="http://www.w3.org/TR/2004/REC-owl-guide /food"/> <rdfs:label>Wine Ontology</rdfs:label> </owl:Ontology> </rdf:RDF> Gerüst

22 Beispiel OWL 2/3 Klassen- definition Werte- bereiche Restrik- tionen
<owl:Class rdf:ID="Person" /> <owl:Class rdf:ID="Mann"> <rdfs:subClassOf rdf:resource="Person" /> ... </owl:Class> <owl:Class rdf:ID="Alter" /> <owl:DatatypeProperty rdf:ID="wertAlter"> <rdfs:domain rdf:resource="#Alter" /> <rdfs:range rdf:resource="&xsd;positiveInteger"/> </owl:DatatypeProperty> <owl:Class rdf:ID="Wine"> <rdfs:subClassOf rdf:resource="&food;PotableLiquid" /> <rdfs:subClassOf> <owl:Restriction> <owl:onProperty rdf:resource="#hasMaker" /> <owl:allValuesFrom rdf:resource="#Winery" /> </owl:Restriction> </rdfs:subClassOf> Klassen- definition Werte- bereiche Restrik- tionen

23 Beispiel OWL 3/3 Einbindung <owl:Class rdf:ID="Wine">
<owl:equivalentClass rdf:resource="&vin;Wine"/> </owl:Class>

24 Beispiel XTM Basename, Scope <?xml version="1.0"?>
<!DOCTYPE topicMap PUBLIC "-//TopicMaps.Org//DTD XML Topic Map (XTM) V1.0//EN" "http://www.topicmaps.org/xtm/1.0/xtm1.dtd"> <topicMap id="stadtfuehrer-deutschland“ xmlns:xlink="http://www.w3.org/1999/xlink"> <topic id="muenster"> <instanceOf> <topicRef xlink:href="#stadt"/> </instanceOf> <baseName> <scope><topicRef xlink:href="#german"/></scope> <baseNameString>Münster</baseNameString> </baseName> <scope><topicRef xlink:href="#latin"/></scope> <baseNameString>Monasterium</baseNameString> </topic> <topic id="stadt">...</topic> </topicMap>

25 Beispiel XTM Occurrence <topic id="muenster">
<baseName>...</baseName> <occurrence> <instanceOf> <topicRef xlink:href="#artikel"/> </instanceOf> <resourceRef xlink:href="http://www.muenster.de"/> </occurrence> <topicRef xlink:href="#einwohner"/> <resourceData> </resourceData> </topic>

26 Beispiel XTM Association <association> <instanceOf>
<topicRef xlink:href="#busverbindung"/> </instanceOf> <member> <roleSpec><topicRef xlink:href="#linie"/></roleSpec> <topicRef xlink:href="#8"/> </member> <roleSpec><topicRef xlink:href="#haltestelle"/></roleSpec> <topicRef xlink:href="\#wolbeck"/> <topicRef xlink:href="#gremmendorf"/> </association>

27 Beispiel XTM Klassenbildung <association> <instanceOf>
<subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass"/> </instanceOf> <member> <roleSpec><topicRef xlink:href="...#superclass"/></roleSpec> <topicRef xlink:href="#ortsteil"/> </member> <roleSpec><topicRef xlink:href="...#subclass"/></roleSpec> <topicRef xlink:href="#wolbeck"/> </association>

28 Beispiel WSDL 1/3 Elemente-Definition
<definitions name="StockQuote" ... <types> <schema targetNamespace="http://example.com/stockquote.xsd" xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name="tickerSymbol" type="string"/> </all> </complexType> </element> <!-- element price entsprechend als Float --> </schema> </types> <message name="GetLastTradePriceInput"> <part name="body" element="xsd1:TradePriceRequest"/> </message> <message name="GetLastTradePriceOutput"> <part name="body" element="xsd1:TradePrice"/>

29 Beispiel WSDL 2/3 Binding von Input/Output an soap
<portType name="StockQuotePortType"> <operation name="GetLastTradePrice"> <input message="tns:GetLastTradePriceInput"/> <output message="tns:GetLastTradePriceOutput"/> </operation> </portType> <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding style="document„ transport="http://schemas.xmlsoap.org/soap/http"/> <soap:operation soapAction="http://example.com/GetLastTradePrice"/> <input><soap:body use="literal"/></input> <output><soap:body use="literal"/></output> </binding>

30 Beispiel WSDL 3/3 <service name="StockQuoteService">
<documentation>My first service</documentation> <port name="StockQuotePort" binding="tns:StockQuoteBinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions>

31 Beispiel OWL-S (Hauptdatei)
Service-Beschreibung <?xml version='1.0' encoding='ISO '?> <!DOCTYPE uridef[ <!-- Definition des Vokabulars (RDF, RDFS, XML, XMS, OWL) --> ]> <rdf:RDF...<!-- Definition der Namespaces -->...> <owl:Ontology rdf:about=""> ...<!-- Versionsinformation und Kommentar -->... <owl:imports rdf:resource="&service;" /> <owl:imports rdf:resource="&ba_profile;" /> <owl:imports rdf:resource="&ba_process;" /> </owl:Ontology> <service:Service rdf:ID="BravoAir_ReservationAgent"> <service:presents rdf:resource="&ba_profile;#Profile_BravoAir_ReservationAgent"/> <service:describedBy rdf:resource="&ba_process;#BravoAir_ReservationAgent_ProcessModel"/> <service:supports rdf:resource="&ba_grounding;#Grounding_BravoAir_ReservationAgent"/> </service:Service> </rdf:RDF>

32 Beispiel OWL-S (Profile 1/2)
Profil-Beschreibung <profileHierarchy:AirlineTicketing rdf:ID="Profile_BravoAir_ReservationAgent"> <service:presentedBy rdf:resource="&ba_service;#BravoAir_ReservationAgent"/> <profile:has_process rdf:resource="&ba_process;#BravoAir_Process"/> <profile:serviceName>BravoAir_ReservationAgent</profile:serviceName> <profile:textDescription> This service provides flight reservations based on the specification... </profile:textDescription> <profile:contactInformation> <actor:Actor rdf:ID="BravoAir-reservation"> <actor:name>BravoAir Reservation department</actor:name> <!--...actor,phone,fax, ,physicalAddress,webURL etc. --> </actor:Actor> </profile:contactInformation> <actor:Actor rdf:ID="BravoAir-information"> <!--möglicher weiterer Kontakt -->

33 Beispiel OWL-S (Profile 2/2)
Parameter-Definition <profile:serviceParameter> <addParam:GeographicRadius rdf:ID="BravoAir-geographicRadius"> <profile:serviceParameterName> BravoAir Geographic Radius </profile:serviceParameterName> <profile:sParameter rdf:resource="&country;#UnitedStates"/> </addParam:GeographicRadius> </profile:serviceParameter> <!-- Weitere Spezifikationen wie Qualitäts-Einschätzung oder --> <!-- Einordnung in unterschiedliche Kategorien wie NAICS oder UNSPSC --> <!-- Beschreibung von Input/Output/Prä-/Posteffekten --> <profile:hasInput rdf:resource="&ba_process;#DepartureAirport_In"/> <profile:hasOutput rdf:resource="&ba_process;#AvailableFlightItineraryList_Out"/> <profile:hasEffect rdf:resource="&ba_process;#HaveSeat"/> </profileHierarchy:AirlineTicketing>

34 Beispiel OWL-S (Process Model 1/2)
Prozess-Definition <process:CompositeProcess rdf:ID="BravoAir_Process"> <rdfs:label>This is the top level process for BravoAir</rdfs:label> <process:composedOf> <process:Sequence> <process:components rdf:parseType="Collection"> <process:AtomicProcess rdf:about="#GetDesiredFlightDetails"/> <process:AtomicProcess rdf:about="#SelectAvailableFlight"/> <process:CompositeProcess rdf:about="#BookFlight"/> </process:components> </process:Sequence> </process:composedOf> </process:CompositeProcess>

35 Beispiel OWL-S (Process Model 2/2)
Prozess-Eingabe/Ausgabe <process:AtomicProcess rdf:ID="SelectAvailableFlight"> <process:hasInput rdf:resource="#PreferredFlightItinerary_In"/> <process:hasOutput rdf:resource="#AvailableFlightItineraryList_Out"/> </process:AtomicProcess> <process:Input rdf:ID="PreferredFlightItinerary_In"> <process:parameterType rdf:resource="&concepts;#FlightItinerary"/> </process:Input> <process:UnConditionalOutput rdf:ID="AvailableFlightItineraryList_Out"> <process:parameterType rdf:resource="&concepts;#FlightItineraryList"/> </process:UnConditionalOutput>

36 Beispiel OWL-S (Grounding 1/4)
Parameter <-> Message: <message name="SelectAvailableFlight_Input"> <part name="preferredFlightItinerary" owl-s parameter="BravoAir:#preferredFlightItinerary_In"/> </message> <portType name="SelectAvailableFlight_PortType"> <operation name="SelectAvailableFlight_operation" owl-s- process="BravoAir:#SelectAvailableFlight"> <input message="tns:SelectAvailableFlight_Input"/> <output message="tns:SelectAvailableFlight_Output"/> </operation> </portType>

37 Beispiel OWL-S (Grounding 2/4)
Prozesse: OWL-S <-> WSDL <grounding:WsdlGrounding rdf:ID="Grounding_BravoAir_ReservationAgent"> <service:supportedBy rdf:resource="&ba_service;#BravoAir_ReservationAgent"/> <!-- Mehrere Groundings für atomare Prozesse, im Speziellen: --> <grounding:hasAtomicProcessGrounding rdf:resource="#WsdlGrounding_SelectAvailableFlight"/> </grounding:WsdlGrounding>

38 Beispiel OWL-S (Grounding 3/4)
Prozess <-> Operation Input <-> Message <grounding:WsdlAtomicProcessGrounding rdf:ID="WsdlGrounding_SelectAvailableFlight"> <grounding:owlsProcess rdf:resource="&ba_process;#SelectAvailableFlight"/> <grounding:wsdlOperation rdf:resource="#SelectAvailableFlight_operation"/> <grounding:wsdlInputMessage> <xsd:anyURI rdf:value= "&BravoAirGroundingWSDL;#SelectAvailableFlight_Input"/> </grounding:wsdlInputMessage> <grounding:wsdlInputs rdf:parseType="Collection"> <grounding:WsdlInputMessageMap> <grounding:owlsParameter rdf:resource= "&ba_process;#preferredFlightItinerary_In"/> <grounding:wsdlMessagePart> <xsd:anyURI rdf:value="&BravoAirGroundingWSDL; #preferredFlightItinerary"/> </grounding:wsdlMessagePart> </grounding:WsdlInputMessageMap> </grounding:wsdlInputs>

39 Beispiel OWL-S (Grounding 4/4)
Output <-> Message <grounding:wsdlOutputs rdf:parseType="Collection"> <grounding:WsdlOutputMessageMap> <grounding:owlsParameter rdf:resource="&ba_process; #availableFlightItineraryList_Out"/> <grounding:wsdlMessagePart> <xsd:anyURI rdf:value="&BravoAirGroundingWSDL; #availableFlightItineraryList"/> </grounding:wsdlMessagePart> </grounding:WsdlOutputMessageMap> </grounding:wsdlOutputs> <grounding:wsdlReference> <xsd:anyURI rdf:value= "http://www.w3.org/TR/2001/NOTE-wsdl "/> </grounding:wsdlReference> </grounding:WsdlAtomicProcessGrounding>


Herunterladen ppt "Beschreibung von Web Services Seminar Parallele und Verteilte Systeme"

Ähnliche Präsentationen


Google-Anzeigen