Temat: wersje XML Schema
Pisze w BD Delphi 8 for .NET, uzywam takiego kodu:
function TXMLValidator.Waliduj: boolean;
var
reader: XmlTextReader;
val: XmlValidatingReader;
sch: XmlSchemaCollection;
begin
//zeruje rezultaty
ValResult := ArrayList.Create;
ValResultOK := true;
val := nil;
reader := nil;
try
try
//wczytuje dane
reader := XmlTextReader.Create(XmlName);
val := XmlValidatingReader.Create(reader);
sch := XmlSchemaCollection.Create;
sch.Add('', SchemaName);
val.ValidationType := ValidationType.Schema;
val.Schemas.Add(sch);
Include(val.ValidationEventHandler, ev);
//wykonuje walidacje
while (val.Read) do
begin
end;
except
on e:Exception do
begin
ValResult.Add(e.Message);
ValResultOK := false;
end;
end;
finally
//zamykam pliki
if reader <> nil then reader.Close;
if val <> nil then val.Close;
end;
result := ValResultOK;
end;
fragment schema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="head">
<xs:annotation>
<xs:documentation>Naglowek pliku.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="plas" type="OeS_wsp" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Punkt plasowania.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip">
<xs:annotation>
<xs:documentation>Jezeli w nowszej wersji pliku danych pojawi sie dodatkowe pole, walidacja pozwoli otworzyc taki pliki - dodatkowe pole/pola zostana pominiete.</xs:documentation>
</xs:annotation>
</xs:any>
</xs:sequence>
</xs:complexType>
</xs:schema>
problem jest (na razie wyskoczyl tylko na 2 komputerach) z nodem plas i anny, w skocie, walidacja wskazuje na niejednoznacznosc tych nodow