Hallo,
ich habe da mal eine kleine Frage da ich fest stecke.
Ich habe eine XML Datei wie folgende :
<ROOT>
<IP>100.100.10.144</IP>
<SUBNET>255.255.255.0</SUBNET>
<GATEWAY>100.100.10.110</GATEWAY>
</ROOT>
Das validieren tue ich durch eine XSD Datei. Das IP Element validiere ich durch eine Regex, die Subnetmaske durch eine Enumeration. Doch wie kann ich das Gateway validieren ? Da es ja abhängig der IP und Subnetmaske ist.
Danke für die Hilfe 😁
Hallo Midnight Run
Das geht - meines Wissens nach - nicht mit den klassischen XSD Bordmitteln. Du könntest höchstens Schematron verwenden. Das ist AFAIK im Framework noch nicht unterstützt - wobei es aber 3rd Party Libraries gibt.
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Da alles IP-Adressen sind(bzw gleich aufgebaut sind), kannst du alle Elemente mit dem gleichen Regex validieren.
Doch wie kann ich das Gateway validieren ? Da es ja abhängig der IP und Subnetmaske ist.
hm? Gateway ist ein Server/Router/was auch immer im aktuellen Subnetz. D.h. der Gateway wird auch die gleich Subnetzmaske benutzen.
Das IP Element validiere ich durch eine Regex, die Subnetmaske durch eine Enumeration.
Kannst du mal den Code-Ausschnitt davon posten?
Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat
Hallo Midnight Run
Das geht - meines Wissens nach - nicht mit den klassischen XSD Bordmitteln. Du könntest höchstens Schematron verwenden. Das ist AFAIK im Framework noch nicht unterstützt - wobei es aber 3rd Party Libraries gibt.
Grüße
Flo
Das bedeutet ich müsste im Programm die Logik implementieren ? Naja ist unsauber aber wenn es mit klassischen XSD nicht funktioniert werde ich es so machen.
ich versteh es immernoch nicht... willst du nun die Xml-Elemente validieren oder die Werte in den Elementen (also die Maske/IP-Adressen)?
XSD = XML Scheme Definition = Die vorschrift, in welchem Note welches Element zu liegen hat, außerdem welche Werte das Element verwenden darf...
Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat
Korrekt. Wenn du bei der Konfiguration der Validierung flexibel bleiben willst kannst du höchstens noch ein XSLT dazwischenhängen welches nach der XSD Validierung noch Relationale Integritäten prüft. Wenn alles passt am Ende ein:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
Das führt jedoch dazu dass du alles einmal komplett kopierst. Hat den Nachteil des immensen Overheads, aber den Vorteil der ausgelagerten Validierung. Du musst halt entscheiden was dir wichtiger ist. Performance oder Trennung.
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Hallo pohlmann
ich versteh es immernoch nicht ... außerdem welche Werte das Element verwenden darf...
Ich nehme an Midnight Run arbeitet mit dem <xs:pattern id="foo" value="RegEx"></xs:pattern>
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Korrekt. Wenn du bei der Konfiguration der Validierung flexibel bleiben willst kannst du höchstens noch ein XSLT dazwischenhängen welches nach der XSD Validierung noch Relationale Integritäten prüft. Wenn alles passt am Ende ein:
<xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template>
Das führt jedoch dazu dass du alles einmal komplett kopierst. Hat den Nachteil des immensen Overheads, aber den Vorteil der ausgelagerten Validierung. Du musst halt entscheiden was dir wichtiger ist. Performance oder Trennung.
Grüße
Flo
Ehrlich gesagt verstehe ich das nicht ganz. Bin nicht so tief drin in der Materie 😄 Aber jede neue Datei würde Änderungen am Endgerät verlangen.
@pohlmann, Ich möchte die Werte/Texte der Elemente zueinander validieren.
IP : 10.10.140.2
SUBN : 255.255.255.0
GATEWAY : 10.10.141.3 <- Fehler!
Sollte als ungültig markiert werden.
Mfg
Hallo pohlmann
ich versteh es immernoch nicht ... außerdem welche Werte das Element verwenden darf...
Ich nehme an Midnight Run arbeitet mit dem<xs:pattern id="foo" value="RegEx"></xs:pattern>
Grüße
Flo
Ich habe es so gelöst :
<xs:pattern value="((((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9])))(\-((((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9]))))?"/>
IP : 10.10.140.2
SUBN : 255.255.255.0
GATEWAY : 10.10.141.3 <- Fehler!
und was machst du, wenn die Bitausleihe Oktet-Übergreifend ist?
Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat
Ehrlich gesagt verstehe ich das nicht ganz. Bin nicht so tief drin in der Materie 😄
Du kannst die XSD wie sie ist ja verwenden um die XML Datei Strukturell zu validieren. Hinter die Validierung der XSD hängst du eine XSLT Transformation welche XPath verwendet um eben solche Abhängigkeiten wie deine IP in Verbindung mit deinem Gateway prüft. Wenn alles passt kannst du das von mir gepostete Template verwenden um die komplette XML Datei einfach 1:1 in eine Ausgabe zu "transformieren" (= kopieren). Danach ist alles valide und du kannst die Datei verarbeiten.
Tritt während der XPath-Validierung ein Fehler auf erzeugst du einfach eine Ausgabedatei aller:
<XML>
<Error>Subnet mask not valid for IP Address</Error>
</XML>
So kannst vor der Verarbeitung kurz prüfen ob ein Fehler aufgetreten ist oder nicht und ansonsten die Datei verarbeiten.
Aber jede neue Datei würde Änderungen am Endgerät verlangen.
Den versteh ich jetzt net. 😄
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Interessanter Ansatz. Den Overhead könnte ich eigentlich in Kauf nehmen. Nur mir fehlen noch die XSLT Erfahrungen. 👍