Witam,

mam następujący komunikat przy walidacji pliku XML za pomocą XSD:
„Węzeł nie jest poprawny ani niepoprawny. Nie znaleziono deklaracji schematu lub definicji DTD”.
Robię walidację w C++ przy użyciu biblioteki MSXML 6.0. Nie używam .NET.
Kod wygląda następująco. Najpierw tworzę obiekt IXMLDOMSchemaCollection2:

hr = CoCreateInstance(
       __uuidof(XMLSchemaCache60), 
        NULL, 
        CLSCTX_ALL, 
        __uuidof(IXMLDOMSchemaCollection2), 
        (void**)&this->SchemaCache);

  if(FAILED(hr)) 
 {
	    cerr << "Błąd przy tworzeniu SchemaCache";	
	return;
  }	
 

Następnie kojarzę go z czytnikiem XML:

hr = XMLReader->putProperty(L"schemas", _variant_t((IUnknown*)this->SchemaCache));
 if(FAILED(hr)) 
 {
	    cerr << "Błąd przy ustawianiu SchemaCache dla czytnika";				
  }
 

Na koniec włączam walidację przy użyciu XSD i dodaję schemat:

  //Włącz walidację za pomocą XSD.
  HRESULT hr =  this->XMLReader->putFeature(L"schema-validation", VARIANT_TRUE);
 if(FAILED(hr)) 
 {
	    cerr << "Błąd przy ustawianiu własności";
	return false;
 }	    

 //Dodaj nowy schemat.	
 _bstr_t bstrNamespace = namespaceURI.c_str();
  hr = this->SchemaCache->add(bstrNamespace, _variant_t(xsdPath.c_str()));
 if(FAILED(hr))
 {
	   cerr << "Błąd przy dodawaniu schematu";
	   return false;
}

Te dwie ostatnie czynności wykonuję w metodzie AddValidationSchema, która jako pierwszy argument przyjmuje przestrzeń nazw, a jako drugi ścieżkę do pliku XSD.
Kod w main wygląda tak:

CommonXMLReader *Reader = new CommonXMLReader;
Reader->SetFile(L"books.xml");
Reader->AddValidationSchema(L"http://www.w3.org/2001/XMLSchema", L"books.xsd");
Reader->Start(); 	//Tu wykonuje się walidacja.

Plik XML:

<?xml version="1.0" encoding="UTF-8"?> <catalog> <book> <author>Gambardella, Matthew</author> </book> </catalog>

Plik XSD:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="catalog">
xsd:complexType
xsd:sequence
<xsd:element name="book" minOccurs="0" maxOccurs="unbounded">
xsd:complexType
xsd:sequence
<xsd:element name="author" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

Pliki XML i XSD są na pewno poprawne. Wypróbowałem je na walidatorze online.
Program nie zgłasza żadnych błędów przy inicjalizowaniu obiektów.
Co może być źle? Byłbym wdzięczny za naprowadzenie na rozwiązanie tego problemu.