Laden...

Gateway validieren per XSD ?

Erstellt von Midnight Run vor 14 Jahren Letzter Beitrag vor 14 Jahren 892 Views
Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren
Gateway validieren per XSD ?

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 😁

1.564 Beiträge seit 2007
vor 14 Jahren

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ß.

P
67 Beiträge seit 2008
vor 14 Jahren

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

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren

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.

P
67 Beiträge seit 2008
vor 14 Jahren

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

1.564 Beiträge seit 2007
vor 14 Jahren

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ß.

1.564 Beiträge seit 2007
vor 14 Jahren

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ß.

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren

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

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren

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]))))?"/>

P
67 Beiträge seit 2008
vor 14 Jahren

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

1.564 Beiträge seit 2007
vor 14 Jahren

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ß.

Midnight Run Themenstarter:in
80 Beiträge seit 2008
vor 14 Jahren

Interessanter Ansatz. Den Overhead könnte ich eigentlich in Kauf nehmen. Nur mir fehlen noch die XSLT Erfahrungen. 👍