vlad: warum fehler in validierung gegen xsd mit include in Subdir

Beitrag lesen

Hi ich habe hier folgende Konstellation:

Verzeichnis mit xsd.xsd und test.xml
unterverzeichnis TC1.xml

sobal das TC1 in einem anderen als dem gleichen Verzeichnis liegt, bekomme ich folgende Fehlermeldung:

test/TC1.xml:2: Schemas validity error : Element '{http://abc.de}component', attribute '{http://www.w3.org/XML/1998namespace}base': The attribute '{http://www.
w3.org/XML/1998/namespace}base' is not allowed.

xsd:

  
<?xml version="1.0"?>  
<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema"  
            targetNamespace="http://abc.de"  
            xmlns="http://abc.de"  
            elementFormDefault="qualified">  
  
  <xs:element name="module" type="ModuleType"/>  
  
  <xs:complexType name="ModuleType">  
    <xs:sequence>  
      <xs:element name="components" type="ComponentListType" minOccurs="1" maxOccurs="1"/>  
    </xs:sequence>  
  </xs:complexType>  
  
  <xs:complexType name="ComponentListType">  
    <xs:sequence>  
      <xs:element name="component" type="ComponentType" minOccurs="0" maxOccurs="unbounded"/>  
    </xs:sequence>  
  </xs:complexType>  
  
  <xs:complexType name="ComponentType">  
    <xs:attribute name="name" type="xs:string" use="required"/>  
  </xs:complexType>  
</xs:schema>  

  
<module xmlns:xi="http://www.w3.org/2001/XInclude"  
  xmlns="http://abc.de" >  
  
  
  <components>  
    <xi:include href="test/TC1.xml"      />  
  </components>  
</module>  

TC1.xml:

  
<component name="TC1"  
  xmlns="http://abc.de" />  

für die Validierung benutze ich ein Perl-Script mit Strawberry-Perl und der LibXml

  
my $schema_file = shift;  
my $document    = shift;  
  
my $schema = XML::LibXML::Schema->new(location => $schema_file);  
my $parser = XML::LibXML->new;  
  
my $doc    = $parser->parse_file($document);  
$parser->process_xincludes($doc);  
eval { $schema->validate($doc) };  
if($@){  
  print "------------------------------------\n";  
  print $@;  
  print "------------------------------------\n";  
}else{  
  print "$document validated successfully\n";  
}  

Hoffe mir kann jemand helfen, ich weiß langsam echt nicht mehr weiter.
ISt das ein Fehler in der LibXML oder in dem Perl-Modul oder liegt der Fehler bei mir?

Gruß
Vlad