![]() |
xsd Validierung
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 |
Re: xsd Validierung
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 |
Re: xsd Validierung
Hallo Chris,
ich bin eben auf ![]() nur von welchem Typ sollte im folgenden Codestück die Variable xsd wohl sein? (CoXMLSchemaCache40 wäre ja fast zu einfach ;) )
Code:
[edit=sakura] BBCodes an! Mfg, sakura[/edit]
// 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'); |
Re: xsd Validierung
Hi,
Mathias hat ![]() 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 |
Re: xsd Validierung
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> |
Re: xsd Validierung
Zitat:
Zitat:
Delphi-Quellcode:
Erfordert daher auch MS XML 4.
var
xsd : XMLSchemaCache40; xmldoc, olddoc : DOMDocument40; |
Re: xsd Validierung
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 |
Re: xsd Validierung
..doofe Frage, aber in welcher Unit sind die "IXMLDOMSchemaCollection2" und "IXMLDOMDocument2" deklariert, rsp. welche Units muss ich in die Uses ziehen???
:gruebel: |
Re: xsd Validierung
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 |
Re: xsd Validierung
danke für die Antwort! :thumb:
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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