AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

xsd Validierung

Ein Thema von CelloUndCo · begonnen am 6. Aug 2004 · letzter Beitrag vom 31. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
CelloUndCo

Registriert seit: 6. Aug 2004
Ort: Wien
9 Beiträge
 
#1

xsd Validierung

  Alt 6. Aug 2004, 10:36
hi,

ist es möglich auch xsd Dateien zur Validierung heranzuziehen oder geht das (nach dem Tutorial von Herrn Harms) ausschliesslich mit dtd Dateien?

lg,
Toni
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: xsd Validierung

  Alt 6. Aug 2004, 11:31
Hi Toni,
ich habe mich mit XSD noch nicht beschäftigt, aber wenn ich das richtig sehe (in den W3C-Definitionen) wird das beim MS XML-Parser keinen großen Unterschied machen. Sprich der sollte das auch korrekt validieren.
Aber wie gesagt: keine Garantie, weil ich XSD noch nie in meinem Leben verwendet habe.

Chris
  Mit Zitat antworten Zitat
CelloUndCo

Registriert seit: 6. Aug 2004
Ort: Wien
9 Beiträge
 
#3

Re: xsd Validierung

  Alt 6. Aug 2004, 11:38
Hallo Chris,

ich bin eben auf diesen post gestossen und bin dabei das einmal zu versuchen.

nur von welchem Typ sollte im folgenden Codestück die Variable xsd wohl sein? (CoXMLSchemaCache40 wäre ja fast zu einfach ;) )

Code:
// create XSD schema
  xsd := CoXMLSchemaCache40.Create;
  if(xsd = nil) then
  begin
    MessageBox(self.Handle,
      pchar(NOXMLPARSER),
      nil,
      MB_OK or MB_ICONEXCLAMATION);

    fErrorExit := true;
    Application.Terminate;
    exit;
  end;
  xsd.add('',ExtractFilePath(paramstr(0)) + 'MO.xsd');
[edit=sakura] BBCodes an! Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: xsd Validierung

  Alt 6. Aug 2004, 11:46
Hi,
Mathias hat hier ja einen Code gepostet. Ich vermute mal das der auch funktioniert. Du müsstest dir den SourceCode am besten mal ansehen. Dort ist das ja prüfen auf Fehler in der Datei erklärt.
Ich vermute mal, dass xmlDoc vom Typ IXMLDOMDocument2 ist. Und für den Typ von xsd musst du dir in Delphi anschauen, welchen Typ CoXMLSchemaCache40.Create zurückgibt.

Chris
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: xsd Validierung

  Alt 6. Aug 2004, 11:54
Falls du damit meinst, du willst nur halbwegs glaubwürdige Daten bzw. keine groben Eingabefehler/FK- oder PK-Verletzungen, dann dürfte XSD die Wahl sein.

Ich habe hier mal einen Auszug meines ersten funktionstüchtigen XSD für .Net angefügt.
Ist schon etwas älter, aber noch lesbar. Meine jetzigen Schemata sind ziemlich groß (das VS hat zum Glück einen visuellen XSD Designer )

XML-Code:
<?xml version="1.0" standalone="yes" ?>
<xs:schema id="dsImportMe"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
    attributeFormDefault="qualified"
    elementFormDefault="qualified">
    <xs:element name="dsImportMe" msdata:IsDataSet="true">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded">
                <xs:element name="DEMOGRAPHY">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="SUBJECT_ID" type="xs:int" minOccurs="0" />
                            <xs:element name="SUBJID" minOccurs="0" >
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:maxLength value="8" />
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="COUNTRY" type="xs:decimal" minOccurs="0" />
                            <xs:element name="SEXCD" type="xs:int" minOccurs="0" />
                            <xs:element name="SITEID" type="xs:decimal" minOccurs="0" />
                            <xs:element name="RACECD" type="xs:int" minOccurs="0" />
                            <xs:element name="RACEOTH" minOccurs="0" >
                                <xs:simpleType>
                                    <xs:restriction base="xs:string">
                                        <xs:maxLength value="20" />
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                            <xs:element name="BIRTHDT" type ="xs:dateTime" minOccurs="0" />
                            <xs:element name="TEMP" minOccurs="0" >
                                <xs:simpleType>
                                    <xs:restriction base="xs:decimal">
                                        <xs:totalDigits value="3"/>
                                        <xs:fractionDigits value="1"/>
                                        <xs:minInclusive value="36.5"/>
                                        <xs:maxInclusive value="40.5"/>
                                    </xs:restriction>
                                </xs:simpleType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="RACECD">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Code" type="xs:int" />
                            <xs:element name="Label" type="xs:string"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="SEXCD">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Code" type="xs:int" />
                            <xs:element name="Label" type="xs:string"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:complexType>
        
        <xs:unique name="PK_DEMO" msdata:PrimaryKey="true">
            <xs:selector xpath=".//DEMOGRAPHY" />
            <xs:field xpath="SUBJECT_ID" />
        </xs:unique>
        
        <xs:unique name="PK_Format_RACECD" msdata:PrimaryKey="true">
            <xs:selector xpath=".//RACECD" />
            <xs:field xpath="Code" />
        </xs:unique>
        <xs:unique name="PK_Format_SEXCD" msdata:PrimaryKey="true">
            <xs:selector xpath=".//SEXCD" />
            <xs:field xpath="Code" />
        </xs:unique>
        
        <xs:keyref name="FK_Format_RACECD_DEMO" refer="PK_Format_RACECD" msdata:ConstraintOnly="true"
                   msdata:UpdateRule="None" msdata:DeleteRule="None">
            <xs:selector xpath=".//DEMOGRAPHY" />
            <xs:field xpath="RACECD" />
        </xs:keyref>
        <xs:keyref name="FK_Format_SEXCD_DEMO" refer="PK_Format_SEXCD" msdata:ConstraintOnly="true"
                   msdata:UpdateRule="None" msdata:DeleteRule="None">
            <xs:selector xpath=".//DEMOGRAPHY" />
            <xs:field xpath="SEXCD" />
        </xs:keyref>
    </xs:element>
</xs:schema>
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: xsd Validierung

  Alt 6. Aug 2004, 11:59
Zitat von Chakotay1308:
Mathias hat hier ja einen Code gepostet. Ich vermute mal das der auch funktioniert.
Ja.

Zitat:
Ich vermute mal, dass xmlDoc vom Typ IXMLDOMDocument2 ist. Und für den Typ von xsd musst du dir in Delphi anschauen, welchen Typ CoXMLSchemaCache40.Create zurückgibt.
Habe ich in der aktuellsten Version des Movie Organizer (1.8.3) benutzt, weil ich so auf die DTD verzichten konnte, die sich ja (offensichtlich) leider nicht nachträglich ergänzen lässt. Dank externem XSD ist das aber auch nicht notwendig:
Delphi-Quellcode:
var
  xsd : XMLSchemaCache40;
  xmldoc,
  olddoc : DOMDocument40;
Erfordert daher auch MS XML 4.
  Mit Zitat antworten Zitat
CelloUndCo

Registriert seit: 6. Aug 2004
Ort: Wien
9 Beiträge
 
#7

Re: xsd Validierung

  Alt 6. Aug 2004, 12:05
Die Validierung mit xsd geht also auf jeden Fall, wie im Link oben beschrieben.

Zu der Frage nach dem Typ:

ich hab jetzt mal IXMLDOMSchemaCollection2 genommen, das geht ganz gut.

hab auch die Validierung nach dem Code von Mathias Simmack getestet, und er spuckt brav fehler wenns nicht passt...

Vielen Dank für die schnelle Hilfe!

Toni
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: xsd Validierung

  Alt 30. Mai 2006, 17:42
..doofe Frage, aber in welcher Unit sind die "IXMLDOMSchemaCollection2" und "IXMLDOMDocument2" deklariert, rsp. welche Units muss ich in die Uses ziehen???

  Mit Zitat antworten Zitat
markusl

Registriert seit: 25. Apr 2006
Ort: Rotkreuz
21 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: xsd Validierung

  Alt 31. Mai 2006, 09:30
Hallo skyware,

du musst die Type Library des Microsoft XML Parsers importieren (Menüpunkt "Project" -> "Import Type Library" und dort die TLB ("Microsoft XML, v4.0" usw.) importieren und die erzeugte Unit in deine Uses-Clausel aufnehmen. Dort sind die ganzen Interfaces wie z.B. IXMLDOMDocument2 und IXMLDOMSchemaCollection2 und viele mehr drin definiert.

Mfg

Markus
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: xsd Validierung

  Alt 31. Mai 2006, 09:44
danke für die Antwort!

Bei mir stehen die Versionen

- Microsoft XML,v2.6
- Microsoft XML,v3.0
- Microsoft XML,v4.0
- Microsoft XML,v5.0

zur Verfügung.

Welche Version muss ich mindestens nehmen?
Respektive was hat es für Auswirkungen auf die Windows Rechner
auf denen ich dann das erstelle Tool verwenden will?

Ich denke mal mit der Windows Installation kommt automatisch eine Version dieses XML Parser hinzu.
Doch welche ist das?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz