Announcement

Collapse
No announcement yet.

XSD prüft nicht auf unique Id

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSD prüft nicht auf unique Id

    Hallo!

    Ich habe folgendes Problem mit der Validierung von Unique IDs durch
    den XML-Parser.

    Getestet wurden folgende Tools, die alle das gleiche Verhalten
    zeigten:

    - Microsoft XML-Notepad
    - XML Spy Enterprise (Funktion "Validate")
    - Online durch: http://www.xmlvalidation.com/


    Aufgabenstellung:

    Es soll eine Parameterliste in XML erstellt werden, die eine eindeutige
    Id beinhaltet (egal ob als Attribut oder Element). D.h. jede ID darf nur
    einmal vorkommen.

    Realisierung:

    Diese Prüfung soll über ein Schema (XSD) erfolgen. Hierzu gibts es den
    XSD-Befehl "unique".

    Problem:

    Das XSD-Schema wird akzeptiert und prüft alles, bis auf die Eindeutigkeit
    der ID. Es ist also möglich z.B. im XML-Notepad die gleiche ID für mehrere
    Parameter-Objekte zu vergeben, ohne eine Fehlermeldung zu bekommen.


    Es wurde folgende Code verwendet:


    XML-Datei 'Test08.xml'::

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Root xmlns="http://meinnamespace.meinefirma.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://meinnamespace.meinefirma.de Test08.xsd">
    <Objects>
    <Parameter Name="VehicleWeight">
    <Label>Vehicle.Weight1</Label>
    <id>12</id>
    </Parameter>
    <Parameter Name="VehicleWeight">
    <Label>Vehicle.Weight1</Label>
    <id>12</id>
    </Parameter>
    <Parameter Name="NameDrivePedalMin">
    <Label>DrivePedal.Min</Label>
    <id>12</id>
    </Parameter>
    </Objects>
    </Root>



    XSD-Datei 'Test08.xsd':

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://meinnamespace.meinefirma.de" targetNamespace="http://meinnamespace.meinefirma.de" elementFormDefault="qualified">

    <xs:element name="Root">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="Objects" type="TObjects" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    </xs:complexType>
    <xs:unique name="ParameterId">
    <xs:selector xpath="Objects/Parameter"/>
    <xs:field xpath="id"/>
    </xs:unique>
    </xs:element>

    <xs:complexType name="TObjects">
    <xs:sequence>
    <xs:element name="Parameter" type="TParameter" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TParameter">
    <xs:sequence>
    <xs:element name="Label" type="xs:string"/>
    <xs:element name="id" type="xs:int"/>
    </xs:sequence>
    <xs:attribute name="Name" type="xs:string"/>
    </xs:complexType>
    </xs:schema>



    Folgendes Beispiel aus dem Internet habe ich auch getestet, allerdings
    auch ohne Erflog, d.h. auch hier werden die IDs nicht geprüft!

    http://www.torsten-horn.de/techdocs/...ma-Unique-Enum


    Vielen Dank für eure Hilfe und Grüße

    jhirth
Working...
X