cvc-complex-type.3.2.2: Attribute xsi:schemaLocation is not allowed to appear in <people> in Java DOM
24,302
The problem is here:
<xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema" .....>
and
<people
xmlns="http://www.cmu.edu/ns/blank"
xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"....>
The problem is the c in the w3c.org
. DOM parser expects it to be w3.org
everywhere-- in the XML document, in the XML Schema Document, in the schemaLanguage
and the schemaSource
properties.
Author by
An SO User
Updated on July 09, 2022Comments
-
An SO User almost 2 years
I am attempting to validate my XML using XSD in Java by using DOM validator.
Although, manually, I know that the document is indeed valid, DOM validator shouts back at me and says:cvc-complex-type.3.2.2: Attribute <xsi:schemaLocation> is not allowed to appear in the element <people>
I have made sure that:
setNamespaceAware()
is set totrue
TheschemaLanguage
property was set beforeschemaSource
schemaLanguage
is set tohttp://ww.w3.org/2001/XMLSchema
Both theXSD
andXML
are in the same folder as the.java
and.class
fileSSCCE
import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class DOMValidator { String xmlInstance = null; String xmlSchema = null; public static void main(String[] args){ DOMValidator validator = new DOMValidator(); validator.validateXML("student.xsd", "helloWorld.xml"); } public void validateXML(String xsd,String xml){ xmlSchema = xsd; xmlInstance = xml; beginValidation(); } public void beginValidation(){ try{ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(true); factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", xmlSchema); ErrorHandler errorHandler = new ErrorHandler(); DocumentBuilder builder = factory.newDocumentBuilder(); builder.setErrorHandler(errorHandler); builder.parse(xmlInstance); if(errorHandler.errorOccured == true){ System.out.println("Document is Invalid."); System.out.println(errorHandler.ex.getMessage()); }else{ System.out.println("Doument is valid"); } }catch(ParserConfigurationException e){ e.printStackTrace(); }catch(SAXException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } private class ErrorHandler extends DefaultHandler{ public SAXParseException ex = null; public boolean errorOccured = false; @Override public void error(SAXParseException ex){ this.ex = ex; errorOccured = true; } @Override public void fatalError(SAXParseException ex){ this.ex = ex; errorOccured = true; } @Override public void warning(SAXParseException ex){ this.ex = ex; errorOccured = true; } } }
XSD
<xs:schema xmlns:xs="http://www.w3c.org/2001/XMLSchema" xmlns="http://www.cmu.edu/ns/blank" targetNamespace="http://www.cmu.edu/ns/blank" elementFormDefault="qualified">
XML
<people xmlns="http://www.cmu.edu/ns/blank" xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cmu.edu/ns/blank student.xsd">
How do I resolve this?