Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in XML - Teil 1

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in XML - Teil 1"—  Präsentation transkript:

1 Einführung in XML - Teil 1
Kai Besser Dipl. Ing. Informatik Account Manager Software AG

2 Voraussetzungen Allgemeine Kenntnisse über: World Wide Web (WWW)
Auszeichnungssprachen (z.B. HTML) Programmiersprachen (z.B. C, C++, Java)

3 Ziele von Teil 1 Verstehen von: XML und seinen Einsatzbereichen
Anwenden von: XML und DTD XML Namespaces XML Stylesheets (CSS, XSL)

4 Inhaltsverzeichnis XML - Extensible Markup Language XML Namespaces
DTD - Document Type Definitions XML Stylesheets - XSL Workshops wichtige Links Abkürzungsverzeichnis

5 XML - Extensible Markup Language
Einleitung Markup Languages (Auszeichnungssprachen) Einstieg Grundlagen Struktur und Syntax Regeln der DTD

6 Begriffsklärung - Markup
Präsentations-Markup (physische Auszeichnung) WYSIWYG (Textverarbeitung, DTP, HTML) vom Menschen lesbar Prozedurales Markup (logische Auszeichnung) Formatvorlagen, DTP, HTML (CSS), XML (PI) kann die Präsentation steuern Deskriptives Markup (semantische Auszeichnung) XML und SGML kann díe Verarbeitung und Präsentation steuern von Menschen und Maschinen lesbar

7 Geschichte GML SGML Generalized Markup Language
1969: Entwicklung (IBM) Goldfarb, Mosher und Lorie 1974: validierender Parser SGML Standard Generalized Markup Language 1978: Entwicklung 1986: Standard ISO 8879

8 Geschichte HTML Hypertext Markup Language
1990: Tim Berners-Lee am CERN in Genf World Wide Web (URL, HTTP und HTML) fester Satz von Elementtypen inoffizielle Erweiterungen über Jahre nicht sehr streng definiert DTD für HTML erst Jahre später

9 Auszeichnungssprachen
HTML (*.html, *.htm) Rich Text Format (*.rtf) Microsoft Word (*.doc, *.dot) Adobe PostScript (*.ps, *.eps) Adobe Portable Document Format (*.pdf) LaTeX (*.tex), usw.

10 Was ist XML? Empfehlung des World Wide Web Consortium (W3C)
entwickelt zwischen Juli 1996 und Februar 1998 von Jon Bosak, James Clark, Tim Bray, Jean Paoli und sieben weiteren Co-Editoren besonders auffällig: XML wurde aus einem akuten Bedarf heraus entwickelt sehr grosses Interesse der Industrie, z.B. Microsoft, IBM, Sun, Apache, SAP, Oracle, Adobe, Corel, Macromedia, Software AG, DataChannel, webMethods, eXcelon, ...

11 Was ist XML? XML bildet eine Teilmenge (Subset) von SGML:
XML = SGML - fortgeschrittene Merkmale + Weberweiterungen + neuer Name und Vermarktung XML ist eine (schlanke) Metasprache: Mit XML können Auszeichnungssprachen für beliebige Einsatzzwecke entwickelt werden. XML ist für das Web konzipiert XML bietet 80 Prozent der Merkmale und Funktionen von SGML, aber nur 20 Prozent von dessen Komplexität.

12 XML vs. HTML XML Beschreibung und Strukturierung von Informationen
strenge Syntax- und Strukturregeln Trennung des Inhalts und der Struktur von der Präsentation Teilmenge von SGML HTML Anzeige von Informationen über Jahre nicht streng spezifiziert keine strikte Trennung von Inhalt und Präsentation eine Anwendung von SGML

13 XML vs. HTML <?xml version="1.0"?> <email>
<an>Dich</an> <von>mir</von> <cc>Chef</cc> <betreff>XML</betreff> <text>Hier geht es um XML</text> </ > <html> <head> <title>HTML</title> </head> <body> <br> <b>AN: </b>Dich<br> <b>VON: </b>mir<br> <b>CC: </b>Chef<br> <b>Betreff: </b>HTML<br><br> Hier geht es um: <b>HTML</b>. </body> </html>

14 XML im Einsatz als offenes Format für Datenaustausch
als strukturierte, semantisch reiche Webdaten mehr Verarbeitung beim Client semantische Findmaschinen und Informationsagenten für neue Webanwendungen (z.B. Small-Screen-Clients) zur Speisung unterschiedlichster Anwendungen mit denselben Daten zur Datenspeicherung (Aufbewahrungspflicht)

15 XML im Einsatz XML/EDI Elektronischer Datenaustausch
offener, herstellerunabhängiger Standard leicht zu implementieren flächendeckend möglich Zeit und Kosten werden gespart steigert die Effizienz traditionelles EDI besitzt feste Transaktionssätze

16 XML im Einsatz Web XHTML-Webseiten (XForms)
Daten anzeigen im Web (mit Stylesheets) Personalisierte Webseiten Webportale Suchmaschinen („Findmaschinen“) Informationsagenten Internet-Auktionen

17 Eigenschaften von XML gliedert Dokumente in hierarchische Komponenten
benennt diese Komponenten durch Regeln kann festgelegt werden, wie die Komponenten zusammengehören stellt Regeln bereit für die Fehlerbehandlung ist leicht im Internet nutzbar ist für eine Vielzahl von Anwendungen einsetzbar XML-Dokumente sind SGML-Dokumente: ähnliche Ausdrucksmöglichkeiten vorhandene SGML-Werkzeuge lesen und schreiben XML

18 Eigenschaften von XML die Namen und Inhalte sind Unicode-Text (Internationalisierung) XML ist von Menschen und Maschinen lesbar keine optionalen Features in XML (im Gegensatz zu SGML) XML-Prozessoren sind klein, schnell, einfach zu schreiben (und zahlreich) XML-Dokumente sind einfach zu erstellen Die XML-Spezifikation ist formal und knapp gehalten

19 Struktur und Syntax von XML
Markup wird vom XML-Prozessor verarbeitet Start- und Ende-Tags, Leeres-Element-Tags, Entity- und Zeichen-Referenzen, Kommentare, CDATA-Abschnittsbegrenzer, Dokumenttypdeklarationen und Verarbeitungsanweisungen beginnt mit „<“ oder mit „&“ Zeichendaten werden von menschlichen Lesern verstanden

20 Struktur und Syntax von XML
Gross-/Kleinschreibung wird berücksichtigt (Internationalisierung) Namen: beginnen mit einem Buchstaben oder einem oder mehreren Interpunktionszeichen und setzen sich fort mit Buchstaben, Ziffern, Gedankenstrichen, Unterstrichen, Doppelpunkten oder Punkten - den sog. Namenszeichen Nmtoken (Namenstoken): ist eine beliebige Kombination aus Namenszeichen Die Zeichenkette „xml“ ist reserviert (in allen Schreibweisen)

21 Struktur und Syntax von XML
Literal-Zeichenketten Daten (Text, der kein Markup darstellt) eingeschlossen in "" oder '‘ Leerraum: White Spaces alle unsichtbaren Zeichen Leerzeichen (ASCII 32) Tabulator (ASCII 9) Zeilenumbruch (Carriage Return ASCII 13) Zeilenvorschub (Line Feed ASCII 10)

22 Physische Struktur geparste Entities:
enthalten Text, der aus Zeichen zusammengesetzt ist Unterscheidung in Auszeichnungen und Zeichendaten ungeparste Entities: haben eine Notation verweisen auf binäre Daten (z.B. Bilddateien)

23 Logische Struktur XML Deklaration (notwendig) <?xml version="1.0"?> Dokumenttypdeklaration (optional) <!DOCTYPE name SYSTEM "name.dtd"> Dokument-Element (notwendig) <Buch> </Buch> Verschachtelungen/Unterelemente (optional) <Buch> <Titel> ... </Titel> </Buch> Ein XML Dokument ist aus Deklarationen, Elementen, Verarbeitungsanweisungen, Komentaren aufgebaut. Die Reihenfolge muss eingehalten werden. Verschachtelungen dürfen sich nicht überkreuzen.

24 XML Syntax Öffnende Element-Tags: <Buch>
Schliessende Element-Tags: </Buch> zwingend erforderlich Leeres Element: Bsp.: <Fortsetzung/> (entspricht <Fortsetzung></Fortsetzung>) Attribute: <Lager zone="Halle3"> Attribute bei HTML <A HREF=" von der Software AG</A>

25 Referenzierung Entity-Referenzen:
Entity-Deklaration in DTD: <!ENTITY R1 "Regal Ebene 1"> Entity-Referenzierung: <Ort>Das Produkt steht auf dem &R1;</Ort> Sonderfall: Parameter-Entities numerische Zeichenreferenzen: dezimal: &#...; hexadezimal: &#x...;

26 Vordefinierte Entity-Referenzen
< öffnende spitze Klammer (<) > schliessende spitze Klammer (>) & Ampersand (&) &apos; Apostroph (') " Anführungszeichen (") Wie fügt man folgenden Text in ein XML Dokument ein: ... „(5 > 0)“ ... ... "(5 > 0)&qout; ...

27 Kommentar und CDATA Kommentar:
Definition: <!-- KommentarText --> Beispiel: <!-- Dies ist ein Kommentar --> CDATA-Abschnitt: explizit vom Parsing ausgeschlossen Definition: <!CDATA[ ... ]]> Beispiel: <!CDATA[ <html>Hier kommt Kurt!</html> ]]>

28 Processing Instructions
liefern Anweisungen für die Anwendung, die das Dokument verarbeitet Definition: <?piName piAnweisung?> Beispiel: <?xml version="1.0"?> <?avi codec="video1" colors="256"?>

29 Gültiges und Wohlgeformtes XML
stimmt mit den Regeln der XML-Spezifikation überein eindeutiges Wurzelelement alle Tags werden wieder geschlossen oder sind leer keine Überlappung von Tags (strenge Hierarchie) alle Entity-Referenzen ausser den Vordefinierten sind deklariert Literale stehen in einfachen oder doppelten Anführungszeichen Wohlgeformt es enthält ein oder mehr Elemente es enthält ein Wurzelelement (auch Dokument Element genannt) alle weiteren Elemente sind einwandfrei verschachtelt. Alle geparsten Entitys die im Dokument referenziert sind, sind wohlgeformt.

30 Gültiges und Wohlgeformtes XML
ist wohlgeformt die im Prolog spezifizierte interne oder externe DTD bestimmt die Regeln für das Dokument alle diese Regeln sind zwingend zu beachten Wohlgeformt es enthält ein oder mehr Elemente es enthält ein Wurzelelement (auch Dokument Element genannt) alle weiteren Elemente sind einwandfrei verschachtelt. Alle geparten Entitys die im Dokument referenziert sind, sind wohlgeformt.

31 Zusammenfassung Welche unterschiedlichen Arten von Markup gibt es?
Abgrenzung HTML vs. XML? Eigenschaften von XML? Wer kontrolliert den XML Standard? Einsatzgebiete für XML? Struktur und Syntax von XML? Logischer Aufbau eines XML Dokuments?

32 Zusammenfassung Was sind Processing Instructions (PI‘s)?
Wozu verwendet man CDATA Abschnitte? Unterschied zwischen ‚wohlgeformt‘ und ‚gültigem‘ XML?

33 Beispiele DTD XML Instanz XSL Document XML Schema Parser XML Editor
Anwendung Datenbank

34 Namensräume notwendig, um eindeutige Namen zu erhalten
wird durch einen URI (Uniform Resource Identifier) identifiziert ein qualifizierter Name im Dokument besteht aus dem Namen des Namespace und dem lokalen Namen, getrennt durch einen Doppelpunkt <test:preisliste xmlns:test=" ...> <test:preis waehrung="DM">100</test:preis> </test:preisliste>

35 Namensraum-Bereiche Deklaration bei einem Element als Attribute aus dem Namensraum xmlns Verwendung bei einem Element oder Attribut <el:produkt typ="software“ class:art="enduser" xmlns:el=" xmlns:class=" <pname>TestIt</pname> <ppreis>100</ppreis> </el:produkt>

36 Namensraum Default Standard-Namensraum deklarieren ohne Präfix:
<?xml version="1.0"?> <!-- elements are in the HTML namespace, in this case by default --> <html xmlns=' <head> <title>Frobnostication</title> </head> <body> <p>Moved to <a href=' </body> </html>

37 DTD Document type definition - Dokumenttypdefinition
Definition für eine Klasse von Dokumenten intern: <!DOCTYPE [ ... ]> extern: <!DOCTYPE SYSTEM " .dtd">

38 Einfache DTD <?xml version="1.0"?> <!DOCTYPE email [
<!ELEMENT (an, von, cc, betreff, text)> <!ELEMENT an (#PCDATA)> <!ELEMENT von (#PCDATA)> <!ELEMENT cc (#PCDATA)> <!ELEMENT betreff (#PCDATA)> <!ELEMENT text (#PCDATA)> ]> ...

39 Elemente Any: Empty: Gemischter Inhalt (Mixed Content):
Dieser Elementtyp darf jeden beliebigen Inhalt in jeder beliebigen Reihenfolge enthalten <!ELEMENT test ANY> Empty: Dieser Elementtyp darf keinen Inhalt enthalten Kann Attribute enthalten <!ELEMENT test EMPTY> Gemischter Inhalt (Mixed Content): <!ELEMENT test (((#PCDATA)|x|y|z)*) Empty Elemente können Attribute enthalten

40 Strukturen Was bed. diese Definition:
Klammern (Inhalt1, Inhalt2) Gruppierung Komma (Inhalt1,Inhalt2) Sequenz Senkrechter Strich (Inhalt1|Inhalt2) Alternative ohne Inhalt1 muss 1 mal Fragezeichen Inhalt1? 0 oder 1 Stern Inhalt1* 0 bis n Plus Inhalt bis n Studenten sollen die letzte Zeile erklären. Was bed. diese Definition: <!ELEMENT (an+, von, cc*, betreff?, text?)>

41 Attribute Deklaration: Beispiel:
<!ATTLIST ElementName AttributName Typ Vorgabe> Beispiel: <!ATTLIST sprache (Western|Greek|Latin) "Latin">

42 Attributtypen CDATA es können nur Zeichendaten verwendet werden
ENTITY externe, binäre Entity, die in der DTD deklariert ist ENTITIES wie ENTITY aber mehrere, durch Leerzeichen getrennt ID eindeutiger Identifier IDREF Verweis auf eine anderswo im Dokument deklarierte ID IDREFS wie IDREF aber mehrere, durch Leerzeichen getrennt NMTOKEN beliebige Zusammenstellung von Namenszeichen NMTOKENS wie NMTOKEN aber mehrere, durch Leerzeichen getrennt NOTATION muss auf eine NOTATION verweisen, die anderswo in der DTD deklariert ist Aufzählung der Attributwert muss mit einem der genannten Werte übereinstimmen (Inhalt1|Inhalt2)

43 Attributtypen #REQUIRED muss spezifiziert werden #IMPLIED optional
#FIXED "Wert" das Attribut muss den angegebenen Wert haben Vorgabewert Vorbelegung des Attributwerts #REQUIRED Jedes Element, das das Attribut enthält, muss einen Wert für das Attribut spezifizieren. Ein fehlender Wert führt zu einem Fehler. #IMPLIED Dieses Attribut ist optional. Der Prozessor kann es ignorieren, wenn kein Wert gefunden wird. #FIXED feststehender Wert Dieses Attribut muss den Wert feststehender Wert haben. Wenn das Attribut im Element nicht enthalten ist, verhält sich der Prozessor so, als ob das Attribut mit dem Vorgabewert im Dokument stünde. Vorgabe Identifiziert einen Vorgabewert für ein Attribut. Wenn das Element das Attribut nicht enthält, verhält sich der Prozessor so, als ob das Attribut mit dem Vorgabewert im Dokument stünde.

44 Notations teilt dem Prozessor mit, welcher Objekttyp referenziert wird
Deklaration: <!NOTATION NotationsName SYSTEM "..."> Beispiel: <!NOTATION GIF SYSTEM "Iexplore.exe">

45 Entities interne Entities externe Entities geparste Entities:
Textentities werden wie XML-Text behandelt ungeparste Entities: Binärentitys werden als nicht geparste Einheiten betrachtet Parameter-Entities

46 Interne Entities Definition: Referenzierung: Beispiel: zu beachten:
<!ENTITY EntityName EntityDefinition> Referenzierung: &EntityName; Beispiel: <!ENTITY sign “Prof. Dr. Gerhard Entities"> &sign; zu beachten: werden in der DTD definiert enthalten den Inhalt, der im Dokument verwendet wird

47 Externe Entities Definition:
<!ENTITY EntityName SYSTEM|PUBLIC "URI" NOTATION> SYSTEM: Wenn lokal (auf einem Rechner in einer Organisation) verwendet Beispiel: <!ENTITY Bild SYSTEM " NDATA GIF> <!ENTITY Bild SYSTEM "bild1.gif" NDATA GIF>

48 Externe Entities PUBLIC: öffentlich bekannt oder Standardbibliothek
Beispiel: <!ENTITY Bild PUBLIC "-//XMLCo//Text Standard images//EN" " NDATA GIF> Hinweis: Externe Entitys können auch andere XML-Dateien referenzieren, z.B. wenn ein Buch aus mehreren Kapiteln aufgebaut wird: <!ENTITY Kapitel1 SYSTEM "Kapitel1.xml">

49 Parameter Entities Definition: Referenzierung: zu beachten:
<!ENTITY % EntityName "Wert"> Referenzierung: %EntityName; zu beachten: sind auf DTD beschränkt

50 IGNORE und INCLUDE dienen zum Aktivieren und Deaktivieren von Abschnitten der DTD Definition: <![IGNORE [DTD-Abschnitt]]> <![INCLUDE [DTD-Abschnitt]]>

51 IGNORE und INCLUDE <!ENTITY % SICHER "IGNORE">
<!ENTITY % UNSICHER "INCLUDE"> <![%SICHER; [hier Deklarationen]]> <![%UNSICHER; [hier Deklarationen]]>

52 Externe DTD DTDs können ziemlich gross werden
kann in beliebig vielen Dokumenten verwendet werden Syntax: <!DOCTYPE SYSTEM " .dtd"> Beispiel: externe DTD XML-Dokument

53 Klassen DTD Als Basisklasse verwendet Beispiel
<DOCTYPE SYSTEM "..." [ <!ENTITY Unterschrift "Franz"> ]> Bei Konflikten wird die zuerst gefundene Deklaration verwendet (die Innere)

54 CSS Cascading Style Sheets Stylesheets im HTML-Umfeld
CSS Level 1 nur für HTML CSS Level 2 kann auch zur Präsentation von XML im Web-Browser verwendet werden

55 XSL Extensible Stylesheet Language
XSL ist die Formatierungssprache für XML-Dokumente XSL ist eine Anwendung von XML XSL-T: Namespace xsl für: Transformation XSL-FO: Namespace fo für: Formatierung XPath wird zur Adressierung von Teilen (Elementen, Teilbäumen, etc.) der XML-Dokumente verwendet um XSL anwenden zu können, benötigt man einen XSL-Prozessor

56 Prozess Externe Elemente XML Instanz Parser DTD Definition
Ein validierender Parser führt die Prüfung eines XML-Dokuments bzgl. seiner DTD durch XML Dokument XSL Stylesheet XQL Anfrage Formatierungsprozess Web Script CD/DVD

57 XSL Mit XSL-T kann man ein Quelldokument in eine beliebige Ausgabestruktur transformieren XSL-FO stellt eine Vielzahl von Objekten zur Spezifikation von Formatierungen bereit Hierzu werden Stylesheets verwendet Ein Stylesheet besteht aus einer oder mehreren Vorlagen (Templates) Diese Vorlagen werden über Muster (Patterns) adressiert

58 XSL Muster XSL verwendet Muster zur Spezifikation von XML Elementen, d.h. XSL ist deklarativ Muster beschreiben den betreffenden Zweig innerhalb des gesamten Baumes z.B.: /von adressiert das Element von, das innerhalb des Wurzelelements liegt

59 XSL Muster XML-Dokument: XSL-Stylesheet: <TABLE BORDER="1">
< > <betreff>Tamino am Beispiel</betreff> <text>Servus, die Vorstellung von Tamino am Beispiel war ein voller Erfolg. Gruss Christian </text> </ > XSL-Stylesheet: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="uri:xsl"> <xsl:template match="/"> <HTML> <BODY> <TABLE BORDER="1"> <TR> <TD>Von</TD> <TD>An</TD> </TR> <xsl:for-each select=" "> <xsl:apply-templates/> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template> <xsl:template match="./"> <TD><xsl:value-of select="VON"/></TD> <TD><xsl:value-of select="AN"/></TD> </xsl:stylesheet>

60 XSL Elemente xsl:apply-templates xsl:attribute xsl:cdata xsl:choose
xsl:comment Weist den XSL-Prozessor an, auf Grundlage eines angegebenen Musters die korrekte Vorlage zu finden, die angewendet werden soll Erzeugt einen Attributknoten und wendet ihn auf das Ausgabeelement an Gibt einen Abschnitt CDATA aus Gestattet die Prüfung von Bedingungen. Dieses Element wird in Verbindung mit den Elementen xsl:otherwise und xsl:when benutzt Erzeugt in der Ausgabestruktur einen Kommentar

61 XSL Elemente xsl:copy xsl:define-template-set xsl:element
xsl:entity-ref xsl:eval Macht eine Kopie des Zielknotens von der Quelle, die in die Ausgabe eingefügt werden soll Definiert einen Satz von Vorlagen auf einer bestimmten Bereichsebene Erzeugt in der Ausgabe ein Element mit dem angegebenen Namen Erzeugt in der Ausgabe eine Entityreferenzierung mit dem angegebenen Namen Verwertet einen Textstring, gewöhnlich Skriptcode

62 XSL Elemente xsl:for-each xsl:if xsl:node-name xsl:otherwise xsl:pi
Wendet dieselbe Vorlage auf mehrere Dokumentknoten an Gestattet in einer Vorlage die Prüfung einer Bedingung Fügt den Namen des aktuellen Knotens als Textstring in die Ausgabe ein Ermöglicht die Prüfung einer Bedingung. Dieses Element wird in Verbindung mit den Elementen xsl:choose und xsl:when benutzt Erzeugt in der Ausgabe eine Verarbeitungsanweisung

63 XSL Elemente xsl:script xsl:stylesheet xsl:template xsl:value-of
xsl:when Definiert Deklarationen für globale Variablen und Funktionen Definiert den Satz von Vorlagen, die auf den Quelldokumentenbaum angewendet werden müssen, um das Ausgabedokument zu erstellen Definiert eine Vorlage für die Ausgabe auf der Grundlage eines bestimmten Musters Wertet ein XSL-Muster aus, das im Attribut select angegeben ist, und liefert den Wert des identifizierten Knotens als Text zurück, der dann in die Vorlage eingesetzt wird Bietet konditionale Prüfungen. Dieses Element wird in Verbindung mit den Elementen xsl:choose und xsl:otherwise benutzt

64 XSL in XSL muss jedes Element eine Vorlage haben, damit das Dokument einwandfrei verarbeitet werden kann integrierte Vorlagen: <xsl:template> <xsl:apply-templates/> </xsl:template> Konflikte werden vermieden, indem bei doppelten Spezifikationen das genauer spezifizierte Muster verwendet wird

65 Workshop I Beispiel für EMAIL zeigen und erklären EMAIL.XML
-externe-dtd.xml + Tag „attachment“ -externe-dtd-erweitert.xml Beispiel für zeigen und erklären

66 Workshop II XML für Buch erstellen DTD für Buch erstellen
XSL für Buch erstellen HTML-Seite zum Aufruf erstellen

67 Wichtige Links www.w3.org World Wide Web Consortium
OASIS XML Cover Pages OASIS XML.ORG O'Reilly Network XML.com Software AG GO XML xml.apache.org Apache XML Project IBM developerWorks msdn.microsoft.com/xml/default.asp msdn online XML wdvl.internet.com/Authoring/Languages/XML/ Web Developer's Virtual Library

68 Abkürzungen XML Extensible Markup Language
SGML Standard Generalized Markup Language DTD Document Type Definition XSL Extensible Stylesheet Language XQL XML Query Language HTML Hypertext Markup Language CSS1/2 Cascading Style Sheets, Level 1/2 WWW World Wide Web HTTP Hypertext Transport Protocol URI Uniform Resource Identifier URL Uniform Resource Locator URN Uniform Resource Name

69 The XML Company


Herunterladen ppt "Einführung in XML - Teil 1"

Ähnliche Präsentationen


Google-Anzeigen