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