Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# XSD-Schema für typisierte Datasets ergänzen (https://www.delphipraxis.net/78928-xsd-schema-fuer-typisierte-datasets-ergaenzen.html)

Jürgen Thomas 13. Okt 2006 09:57

Datenbank: Firebird • Version: 2.0 RC4 • Zugriff über: Firebird Net Provider 2.0 RC1

XSD-Schema für typisierte Datasets ergänzen
 
Hallo,

mangels nutzbarer Wizards in #D oder VC#E (siehe meine Frage unter [dp]#D und VC#E Fehlende Provider registrieren[/dp]) erzeuge ich mir meine typ.Datasets halbautomatisch:
  • Datenbank: Metadaten extrahieren
  • damit manuell eine xsd-Schemadatei schreiben (das geht im Editor teilweise über Suchen/Ersetzen)
  • mit XSD.Exe eine passende cs-Datei erstellen lassen
Das funktioniert auch als Notlösung. Mir fehlen aber noch Einstellungen:

Datentyp String: VARCHAR von Firebird, xsd:string und String von Net sind kompatibel. Wie kann ich in der xsd-Schemadatei festlegen, dass ein String bei einem Feld eine maximale Feldlänge hat? Wird dies vom typisierten Dataset und den DataAdaptern berücksichtigt, oder muss ich es - z.B. durch Delegates - selbst steuern?

Datentyp Zeitdauer: TIME von Firebird kann dafür verwendet werden, aber DateTime von Net entspricht dem nicht, weil immer ein Datum hinzugefügt wird; xsd:duration kann mangels Kompatibilität nicht umgesetzt werden. Wie kann ich das lösen? (Bisher nutze ich dafür Strings der Form "12'34" oder "1h 23", was konkret genügt; aber als Dauerlösung ist das unbefriedigend.)

Typisierter DataAdapter: Irgendwo habe ich gelesen, dass dies ebenfalls benötigt wird, um den Datenaustausch zwischen Programm und Datenbank sauber und 'automatisch' zu steuern. In der NET-Doku finde ich aber das Stichwort 'typisiert' nur für DataSets, aber nicht für DataAdapter. Kann mir jemand das Vorgehen erläutern? (Bei meinem bisherigen Vorgehen habe ich keine Probleme mit typ. Dataset und einem 'normal erzeugten' DataAdapter.)

Danke für Erläuterungen und Tipps! Jürgen

PS. Alles läuft unter NET 2.0.

marabu 13. Okt 2006 11:24

Re: XSD-Schema für typisierte Datasets ergänzen
 
Hallo Jürgen,

zu deiner ersten Frage: eine notwendige Vorraussetzung für eine spätere Auswertung ist die Bereitstellung der Längen-Restriktion. Ob aber die von dir verwendeten Komponenten damit umgehen können - keine Ahnung.

Grüße vom marabu

Jürgen Thomas 13. Okt 2006 12:00

Re: XSD-Schema für typisierte Datasets ergänzen
 
Zitat:

Zitat von marabu
eine notwendige Vorraussetzung für eine spätere Auswertung ist die Bereitstellung der Längen-Restriktion.

Danke, das hatte ich bei meiner Suche auch schon einmal gefunden. Ich verstehe aber nicht, ob (d.h. wie) ich dies bei einem einzelnen Feld eintragen kann oder ob ich für jede Feldlänge einen eigenen String-Typ ableiten muss.

Kannst Du mir dazu etwas sagen? Jürgen

PS. Wie ich schon an anderen Stellen mehrfach betont habe, habe ich wenig Ahnung von HTML und möchte mich wegen anderer Schwerpunkte damit auch nicht näher befassen; aber kurze und dennoch vollständige Erläuterungen helfen mir natürlich trotzdem.

marabu 13. Okt 2006 12:35

Re: XSD-Schema für typisierte Datasets ergänzen
 
Ich sehe da eine Analogie zum SQL Domain-Konzept. Du hast ja in der Regel auch für jedes VARCHAR(nn) eine Domain DOM_VCnn. In XSD kannst du das analog handhaben.

Zitat:

Zitat von Jürgen Thomas
... habe ich wenig Ahnung von HTML und möchte mich wegen anderer Schwerpunkte damit auch nicht näher befassen ...

Abgesehen davon, dass XSD kein HTML ist: du möchtest eine Technologie nutzen ohne diese zu verstehen? Hast du das schon mit anderen Technologien erfolgreich praktiziert?

Freundliche Grüße

Jürgen Thomas 13. Okt 2006 19:01

Re: XSD-Schema für typisierte Datasets ergänzen
 
Hallo Achim,
Zitat:

Zitat von marabu
Ich sehe da eine Analogie zum SQL Domain-Konzept. Du hast ja in der Regel auch für jedes VARCHAR(nn) eine Domain DOM_VCnn. In XSD kannst du das analog handhaben.

Diese Analogie sehe ich auch. SQL gehört zu meinem täglichen Brot; da nutze ich das natürlich konsequent.
Zitat:

Zitat von marabu
Abgesehen davon, dass XSD kein HTML ist:

Da ich die Informationen unter SelfHTML gefunden hatte, habe ich die Abhängigkeit HTML > XML > XSD angenommen.
Zitat:

Zitat von marabu
du möchtest eine Technologie nutzen ohne diese zu verstehen? Hast du das schon mit anderen Technologien erfolgreich praktiziert?

Grundsätzlich hast Du natürlich recht. Es handelt sich um das Verhältnis von Aufwand und Ertrag: Ich will ein typisiertes DataSet erzeugen, das ich (siehe mein Beitrag #1) nicht direkt erhalte. Ich brauche also als Grundlage eine xsd-Datei, die den Meta-Daten meiner DB entsprechen muss und von XSD.Exe verarbeitet werden kann.

Diese xsd-Datei habe ich fertig. Ich möchte lediglich die genannten Ergänzungen vorsehen und z.B. im Feld Kategorie.Name eine max. Stringlänge von 30 Zeichen festlegen:
XML-Code:
<xsd:schema id="dsDGW"
    elementFormDefault="qualified"
    xmlns=""
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xsd:element name="dsDGW" msdata:IsDataSet="true" msdata:EnforceConstraints="False">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element name="Kategorie">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ID" msdata:AutoIncrement="true" type="xsd:int" />
              <xsd:element name="Name" type="xsd:string" minOccurs="0" />
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
Im Übrigen gibt es für mich keinerlei Notwendigkeit, mich mit HTML/XML/XSD zu befassen.

Kannst Du mich wirklich nicht verstehen, dass ich nicht erst lang und breit dies lernen will, wenn - wie ich gehofft hatte - mir jemand dies sagen könnte?

Gruß Jürgen

Nachtrag:
HTML = Hypertext Markup Language
XML = Extensible Markup Language
XSD = XML-Schemadatei
also hat das wohl schon irgendetwas miteinander zu tun

Elvis 13. Okt 2006 19:33

Re: XSD-Schema für typisierte Datasets ergänzen
 
Hat die C# Express Edition nicht den visuellen XSD Designer oder gar den DataSet designer vom VS?
Ich kann mich noch daran Erinnern, dass zumindest der DataSet designer in der Express edition enthalten war..

marabu 13. Okt 2006 20:10

Re: XSD-Schema für typisierte Datasets ergänzen
 
Hallo Jürgen,

dotNet ist nicht meine Welt - und ohne einen Sponsor wird sie es so schnell auch nicht werden. Wenn du ein Tool besitzt, wie es Robert anklingen lässt, dann solltest du es benutzen. Hast du keines, so bezweifle ich, dass meine Änderungen an deinem XSD file von den dotNet Programmen akzeptiert werden. Da scheint eine formale Beschreibung dahinter zu stecken.

Um maxLength in Ansatz zu bringen müsste das Element "Name" sich auf einen simpleType beziehen - und nicht auf den builtin type "xsd:string". Wenn die Datei von einem Tool erstellt wurde, dann solltest du prüfen, ob überhaupt ein einziges Element "xsd:simpleType" vorkommt - oder du müssest mir einen Link auf eine Referenz geben, wo ich den Aufbau der von des benötigten XSD file nachlesen kann.

Auf jeden Fall ist es nicht das einfache Hinzufügen von maxLength="20" an irgendeiner Stelle.

Und verzeih mir meine Frage nach deiner Haltung zu XSD. Manchmal schreibe ich, was ich besser nur denken sollte.

Gute Nacht

Jürgen Thomas 13. Okt 2006 20:21

Re: XSD-Schema für typisierte Datasets ergänzen
 
Zitat:

Zitat von Elvis
Hat die C# Express Edition nicht den visuellen XSD Designer oder gar den DataSet designer vom VS?
Ich kann mich noch daran Erinnern, dass zumindest der DataSet designer in der Express edition enthalten war..

Du hast recht; aber es werden nur MS-Access und MSSQL angeboten und nicht alle im System vorhandenen Provider... Jürgen

Jürgen Thomas 30. Okt 2006 08:13

Re: XSD-Schema für typisierte Datasets ergänzen
 
@Marabu
Und es geht doch: MaxLength kann in der XSD-Datei direkt beim Feld festgelegt werden:
XML-Code:
<xs:element name="Nachname" minOccurs="0" msdata:Ordinal="5">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value="30" />
    </xs:restriction>
  </xs:simpleType>
</xs:element>
So einfach geht es; und ähnlich einfach hätte ich (und jeder andere) darauf kommen können: ein Dataset erstellen, als XML-Schema abspeichern und das Ergebnis ansehen.

Bis zur nächsten Frage, die ich mir selbst beantworten muss. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz