210 likes | 301 Views
XML – Grundlagen und Anwendungen. Teil 4: Modellierung von Datenmodellen mit XML-Schema Prof. Dr. Michael Löwe, FHDW Hannover. Motivation . Internet verändert sich vom Hypertext (WWW) für den menschlichen Betrachter zur Informationsinfrastruktur für IT-Services (SOA).
E N D
XML – Grundlagen und Anwendungen Teil 4: Modellierung von Datenmodellen mit XML-Schema Prof. Dr. Michael Löwe,FHDW Hannover
Motivation Internet verändert sich vom Hypertext (WWW) für den menschlichen Betrachter zur Informationsinfrastruktur für IT-Services (SOA). Die Kommunikationsinhalte verändern sich von Dokumenten (Texte mit Reihenfolge und Gliederung) zu Datenstrukturen (Daten, Objekte und Referenzen). HTTP, HTML und XML sind weniger sichtbarer Selbstzweck und mehr Mittel zum Zweck im Hintergrund (RPC, etc.). Abbildung der objektorientierten Modelle muss möglich sein. XML Grundlagen und Anwendungen
Kritik an DTDs Nur Objekte keine Typen Zu wenig Basistypen (kein string, integer etc.) Nur Komposition keine Spezialisierung Nur globale Referenzen (ID, IDREF) Kein Konzept für Namensräume Selbst nicht XML. XML Grundlagen und Anwendungen
Inhalt XML-Schema verbessert DTDs durch: Reichhaltige Basistypen Built-in‘s Trennung von Element und Typ Klassen Differenzierte Schlüssel Assoziationen Typerweiterung Spezialisierung Ersetzungsgruppen „Polymorphie“ XML Grundlagen und Anwendungen
dateTime boolean float string integer byte NMTOKENS Basisdatentypen XML Grundlagen und Anwendungen
Definition von Basistypen Aufzählung Längenbeschränkungen Wertbegrenzungen (untere / obere Schranken) White-Space-Eliminierung Reguläre Ausdrücke Vereinigung Listen XML Grundlagen und Anwendungen
Person name: string vorname: string geburtstag: date Klassen als Elemente <!ELEMENT Person EMPTY> <!ATTLIST Person name CDATA #REQUIRED vorname CDATA #REQUIRED geburtstag CDATA #REQUIRED> Komposition: <!ELEMENT LebensVersicherungsVertrag (Person, Person, …) > Spezialisierung <!ELEMENT Frau (Person)> XML Grundlagen und Anwendungen
Klassen als Schema-Elemente <element name=„Person“> <complexType> <attribute name=„name“ type=„string“ use=„Required“/> <attribute name=„vorname“ type=„string“ use=„Required“/> <attribute name=„geburtstag“ type=„date“ use=„Required“/> </complexType> </element> Komposition: <element name=„LebensVersicherungsVertrag“> <complexType> <sequence> <element ref=„Person“> <element ref=„Person“> ….. </sequence> </complexType> </element> XML Grundlagen und Anwendungen
Person name: string vorname: string geburtstag: date VersNehmer VersPerson LebenVertrag Klassen als Schema-Typen <element name=„Person“> <complexType> <attribute> name=„name“ type=„string“ use=„Required“/> <attribute> name=„vorname“ type=„string“ use=„Required“/> <attribute> name=„geburtstag“ type=„date“ use=„Required“/> </complexType> </element> Komposition: <element name=„LebensVersicherungsVertrag“> <complexType> <sequence> <element ref=„Person“> <element ref=„Person“> ….. </sequence> </complexType> </element> <element name=„person“ type=„Person> <complexType name=„Person“> <attribute> name=„name“ type=„string“ use=„Required“/> <attribute> name=„vorname“ type=„string“ use=„Required“/> <attribute> name=„geburtstag“ type=„date“ use=„Required“/> </complexType> Komposition: <element name=„LebensVersicherungsVertrag“> <complexType> <sequence> <element ref=„person“> <element ref=„person“> ….. </sequence> </complexType> </element> <complexType name=„Person“> <attribute> name=„name“ type=„string“ use=„Required“/> <attribute> name=„vorname“ type=„string“ use=„Required“/> <attribute> name=„geburtstag“ type=„date“ use=„Required“/> </complexType> Komposition: <element name=„LebensVersicherungsVertrag“> <complexType> <sequence> <element name=„versicherungsnehmer“ type=„Person“> <element name=„versichertePerson“ type=„Person“> ….. </sequence> </complexType> </element> XML Grundlagen und Anwendungen
Person name: string vorname: string geburtstag: date VersNehmer VersPerson LebenVertrag Komposition vs. Assoziation <complexType name=„Person“> <attribute> name=„name“ type=„string“ use=„Required“/> <attribute> name=„vorname“ type=„string“ use=„Required“/> <attribute> name=„geburtstag“ type=„date“ use=„Required“/> </complexType> Komposition: <element name=„LebensVersicherungsVertrag“> <complexType> <sequence> <element name=„versicherungsnehmer“ type=„Person“> <element name=„versichertePerson“ type=„Person“> ….. </sequence> </complexType> </element> <complexType name=„Person“> <attribute> name=„id“ type=„ID“ use=„Required“/> <attribute> name=„name“ type=„string“ use=„Required“/> <attribute> name=„vorname“ type=„string“ use=„Required“/> <attribute> name=„geburtstag“ type=„date“ use=„Required“/> </complexType> Assoziation: <element name=„LebensVersicherungsVertrag“> <complexType> <attribute> name=„versNehmer“ type=„IDREF“ use=„Required“/> <attribute> name=„versPerson“ type=„IDREF“ use=„Required“/> </complexType> </element> <complexType name=„Person“> <attribute> name=„id“ type=„int“ use=„Required“/> …… </complexType> <complexType name=„LVVertrag“> <attribute> name=„versNehmer“ type=„int“ use=„Required“/> <attribute> name=„versPerson“ type=„int“ use=„Required“/> </complexType> <element name=„System“> <complexType> <choice maxOccurs=„unbounded“> <element name=„person“ type=„Person“/> <element name=„vertrag“ type=„LVVertrag“/> </choice> </complexType> </element> <complexType name=„Person“> <attribute> name=„id“ type=„int“ use=„Required“/> …… </complexType> <complexType name=„LVVertrag“> <attribute> name=„versNehmer“ type=„int“ use=„Required“/> <attribute> name=„versPerson“ type=„int“ use=„Required“/> </complexType> <element name=„System“> <complexType> <element name=„person“… </complexType> <key name=„personKey“> <selector xpath=„person“/> <field xpath=„@id“/> </key> </element> <complexType name=„Person“> <attribute> name=„id“ type=„int“ use=„Required“/> </complexType> <complexType name=„LVVertrag“> <attribute> name=„versNehmer“ type=„int“ use=„Required“/> <attribute> name=„versPerson“ type=„int“ use=„Required“/> </complexType> <element name=„System“> <complexType> <element name=„vertrag“….</complexType> <key name=„personKey“>…..</key> <keyref name=„versNehmerRef“ refer=„personKey“> <selector xpath=„vertrag“/> <field xpath=„@versNehmer“/> </keyref> </element> XML Grundlagen und Anwendungen
Typen und System <complexType name=„T1“> ….. </complexType> <complexType name=„T2“> ….. </complexType> ….. <complexType name=„System“> <choice maxOccurrs=„unbounded“> <element name=„topElement“ type=„topT1“/> <element name=„topElement“ type=„topT2“/>……. </choice> </complexType> <element name=„system“ type=„System“> <key name=„K1“…. <key name=„K2“…. <keyref name=„KR1“…. <keyref name=„KR2“…. </element> XML Grundlagen und Anwendungen
Mengen-wertige Relationen <complexType name=„Person“> <sequence> <element name=„vertrag“ minOccurs=„0“ maxOccurs=„unbounded“> <complexType> <attribute name=„ref“ type=„int“/> </complexType> </element> <element name=„adresse“ maxOccurs=„unbounded“> ….. </element> </sequence> </complexType> XML Grundlagen und Anwendungen
Adresse PostfachAdresse StrassenAdresse Vererbung auf Typen <complexType name=„Adresse“ abstract=„true“> <attribute name=„PLZ“ type=„string“/> <attribute name=„ort“ type=„string“/> </complexType> <complexType name=„PostfachAdresse“> <complexContent> <extension base=„Adresse“> <attribute name=„postFachNr“ type=„int“/> </extension> </complexContent> </complexType> <complexType name=„StrassenAdresse“> ….. XML Grundlagen und Anwendungen
Adresse PostfachAdresse StrassenAdresse Vererbung auf Elementen <complexType name=„Adresse“ abstract=„true“> …. </complexType> <complexType name=„PostfachAdresse“> <complexContent> <extension base=„Adresse“>…. </complexType> <complexType name=„StrassenAdresse“> <complexContent> <extension base=„Adresse“>…. </complexType> <element name=„adresse“ type=„Adresse“ abstract=„true“/> <element name=„pfAdresse“ type=„PostfachAdresse“ substitutionGroup=„adresse“/> <element name=„stAdresse“ type=„StrassenAdresse“substitutionGroup=„adresse“/> XML Grundlagen und Anwendungen
Überblick Elementdefinition: <element name=„…“ type=„…“/> Name eines öffentlichen Typs muss angegeben werden <element name=„…“/> <complexType> Hier muss der private Typ definiert werden </complexType> </element> XML Grundlagen und Anwendungen
Überblick Typedefinition: <complexType …ggf. Namensangabe..> <complexContent> <extension base=„…“> Inhaltsspezikation mit <sequence> und <choice> Elemente in den Sequenzen und Auswahlen Kardinalität durch Attribute minOccurs und maxOccurs (Standardwert 1) Attributeliste: <attribute name=„..“ type=„..“ use=„..“/> </extension> </complexContent> </complexType> XML Grundlagen und Anwendungen
Überblick Schlüsseldefinitionen am Ende von Elementen: (Lokal zum Element, in dem die Definition steht) <key name=„…“> <selector xpath =„…“/> <field xpath = „…“/> </key> <keyref name=„…“ refer=„Schlüsselname“> <selector xpath =„…“/> <field xpath = „…“/> </keyref> XML Grundlagen und Anwendungen
Namensräume (Sketch) Im Schema definierte Objekte sind Namensräumen zugeordnet. Konfliktlösung bei gleichen Elementnamen in verschiedenen Schemata Zuordnung durch Attribut targetNamespace von Element schema targetNamespace="http://xml.netbeans.org/examples/targetNS" Namen von Namensräumen sind URI‘s <element name=„xxx“…/> definiert "http://xml.netbeans.org/examples/targetNS":xxx Abkürzung von Namensraumnamen durch Prefixvereinbarungen: xmlns:ns = "http://xml.netbeans.org/examples/targetNS„ Danach ns:xxx statt "http://xml.netbeans.org/examples/targetNS":xxx Unsere Namensräume: Schemaobjekte: xmlns:xsd="http://www.w3.org/2001/XMLSchema„ Typunterscheidung: xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance‚ StyleSheet-Objekte: xmlns:xsl="http://www.w3.org/1999/XSL/Transform" XML Grundlagen und Anwendungen
Zusammenfassung XML-Schema ist XML-Dialekt, geht weit über DTD hinaus, vereinheitlicht Werte für Inhalte und Attribute kann UML-Klassenmodelle 1:1 abbilden, verfügt über komfortable built-in-Datentypen, unterstützt die Wiederverwendung (Name Spaces), ist erste Wahl zur Definition vom XML-Protokollen XML Grundlagen und Anwendungen
System * * * Person Adresse Postfach Strasse Übung 6 Erweitern Sie das Schema für das Modell unten um: • Zusätzliches Attribut: Länderkennzeichen • Bankverbindungen für Personen • Juristische und Natürliche Personen • Lieferungen von Strasse nach Strasse Testen Sie Ihre Lösungen durch Erweiterung der Instanz! XML Grundlagen und Anwendungen
Übung 7 Schreiben Sie ein Schema für Schemata! XML Grundlagen und Anwendungen