DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Andreas Rauch Artikel Drucken
        
Varianten der Validierung - DTD, XML Schema und DOM bzw. SAX

Schön langsam sind die Zeiten vorbei, in denen man einfach Dokumente validieren konnte. Denkt man...Heute führen viele Wege nach Rom bzw. zur Validierung. In diesem Artikel stelle ich mal 3 Varianten vor:
  • Validierung per DOM - XML Schema
  • Validierung per DOM - DTD
  • Validierung SAX - XML Schema

 

Validierung DOM - DTD

Zunächst mal die einfachste: Im XML Dokument wird auf eine DTD inline verwiesen. 

<?xml version="1.0"?>
<!DOCTYPE catalog SYSTEM "cdcatalog.dtd">
<catalog>


Diese Überprüfung fällt leicht. Bereits beim Laden des XML Dokuments wird die Wohlgeformtheit überprüft und durch die Angabe von

validateonparse = true

veranlasst man den Parser, gegen das im Kopf des XML Dokuments angegebene DTD (oder auch Schema) zu prüfen.

Dim xmldoc As New DOMDocument

xmldoc.validateOnParse = True
xmldoc.async = False
xmldoc.Load "cdcatalog_dtd.xml"
If xmldoc.parseError.errorCode <> 0 Then GoTo errhandler

 

Validierung DOM - XML Schema

Mit der Final Version des Parseres ist es nun auch leichter geworden XML Dokumente gegen ein Schema validieren zu lassen. Dazu ist es notwendig einen sog. Schemacache zu erstellen, dem wir unser XML Schema Dokument hinzufügen. Hier gilt es aufzupasssen. Das Hinzufügen funktioniert nur als File. Die Übergabe eines String oder Variant, in dem dass Schema enthalten ist,  reicht hier nicht aus.

' Zunächst wird ein Schema Cache erstellt
'und book.xsd als Schema File angegeben
Dim xmlschema As New MSXML2.XMLSchemaCache40
xmlschema.Add "urn:cdcatalog", App.Path & "/schema2.xsd"

'Hier wird ein DomDocument erzeugt
Dim xmldom As New MSXML2.DOMDocument40

'Zuweisen des Schemas zum DomDocument
Set xmldom.schemas = xmlschema

'Laden des XML Dokuments

xmldom.async = False
xmldom.Load App.Path & "/cdcatalog.xml"

 

Validierung SAX - XML Schema

 Nun kommen wir zum aufwendigsten Teil. Auch mit der Simple API for XML ist nun auch möglich gegen ein Schema Validieren zu lassen. Dazu muß man sich allerdings nochmals daran erinnern, daß die Funktionalität von SAX eventgesteuert ist und der Vorteil bei sehr großen Dokumenten liegt. Das heißt, daß das XML Dokument Stück für Stück gescannt wird und dadurch bestimmte Ereignisse ausgelöst werden können. (start-Element, end-Element etc. (s Art: Sax Artikel).

Für diese Möglichkeit der Validierung gilt es Vorarbeit zu leisten:

Wir erstellen zunächst eine neues Klassenmodul myvalidator in der wir unsere "SAX-handler" unterbringen.

Implements IVBSAXContentHandler
Implements IVBSAXErrorHandler
Implements IVBSAXLocator
Implements IMXSchemaDeclHandler

Nacheinander rufen wir zu allen SAX Handler die einezelene Eigenschaften auf, sodaß die Ereignisse erstellt werden. Außerdem vergeben wir noch eine Variable als IVBSAXLocator., der als Schnittstelle für die Ereignisse der Handler dient und uns für das aktuelle event column number, line number, public ID, oder system ID ausgeben kann.

Private oLocator As IVBSAXLocator

Zu Schluß brauchen wir natürlich noch eine gute Fehlerbehandlung, der wir aus den Error Events unsere Parameter übergeben:

Aufruf der Fehlerfunktion:

WriteErrorToResults "Ignorable warning", strErrorMessage, _
nErrorCode, oLocator.lineNumber, oLocator.columnNumber

Fehlerbehandlung:

Private Function WriteErrorToResults(strLabel As String, _
strDescription As String, ByVal ErrCode As Long, _
Line As Long, Column As Long)
frmValid.Text1.Text = _
strLabel + ": (" + CStr(ErrCode) + ") " + _
strDescription & "at " + "line " + _
Str(Line) + ", column " + _
Str(Column) + vbCrLf
End Function

Das gesamte Projdekt gibts auch als download.

Viel Spaß damit!


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente

  Erfasst am: 12.02.2002
  Gültig bis: 14.03.2002
8 Ratings
Bewertung: 50,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG