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