Problematyczny XML, który przychodzi z zewnątrz; nie ma zdefiniowanych przestrzeni nazw:
<?xml version="1.0"?>
<response>
<externalUrl nil="true" />
</response>
Fragment napisanego przeze mnie XSD:
<xs:element name="externalUrl" type="xs:string" nillable="true" />
Dokument się nie waliduje, bo atrybut nil nie jest rozpoznawany jako atrybut z XMLSchema-instance. Parser wywala błąd:
**Element 'externalUrl' is a simple type, so it cannot have attributes, excepting those whose namespace name is identical to 'http://www.w3.org/2001/XMLSchema-instance' and whose [local name] is one of 'type', 'nil', 'schemaLocation' or 'noNamespaceSchemaLocation'. However, the attribute, 'nil' was found.
**
XSD jest dynamicznie dołączane w kodzie:
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setSchema(schema);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlStream);
Dokument się ładnie waliduje, gdy dodam mu namespace xmlns:xsi (XMLSchema-instance), a atrybut nil poprzedzę prefiksem xsi. Niestety taka zmiana odpada, bo dostaję już gotowego XML-a z zewnętrznego serwisu, mam wpływ tylko na kod Javy i XML Schema. Chyba nie za bardzo ogarniam przestrzenie nazw, proszę o pomoc - co zrobić żeby uniknąć wstawiania prefiksu w parsowanym dokumencie?