We have some abstract elements defined in our root schema e.g.:
<xs:complexType name="Abstract1" abstract="true"> <xs:sequence minOccurs="0"> <xs:element name="absName1" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType>
… which are then extended as follows:
<xs:complexType name="Extension1"> <xs:complexContent> <xs:extension base="root:Abstract1"> <xs:sequence> <xs:element name="extName1" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
These elements are used inside our xml file:
<?xml version="1.0" encoding="UTF-8" ?> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://example.com" xmlns:ext="https://ext.example.com" xsi:schemaLocation="https://example.com ../xsd/root.xsd https://ext.example.com ../xsd/ext1.xsd"> <test1 testTC="Test Case 1.1 - tag injection with same names using type casting, abstract type"> <extension1 xsi:type="ext:Extension1"> <absName1>Test Case 1.1 - absName1 from Abstract1 Type inhereted by Extension1</absName1> <ext:extName1>Test Case 1.1 - extName1 from Extension1</ext:extName1> </extension1> <extension1 xsi:type="ext:Extension11"> <absName1>Test Case 1.1 - absName1 from Abstract1 Type inhereted by Extension11</absName1> <ext:extName11>Test Case 1.1 - extName11 from Extension11</ext:extName11> </extension1> </test1> </root>
However, when I try to validate the xml using Saxon command line, I get the error message below:
$ java com.saxonica.Validate --multipleSchemaImports:on -s:tc1.xml -xsd:"../xsd/ext1.xsd;../xsd/root.xsd" Validation error on line 7 column 92 of tc1.xml: FORG0001: In content of element <root>: The content model does not allow element <test1> to appear as the first child. The element is in namespace https://example.com but it should be in no namespace. See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 2.4 Validation error on line 9 column 14 of tc1.xml: FORG0001: In content of element <extension1>: The content model does not allow element <absName1> to appear as the first child. The element is in namespace https://example.com but it should be in no namespace. See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 2.4 Validation error on line 13 column 14 of tc1.xml: FORG0001: In content of element <extension1>: The content model does not allow element <absName1> to appear as the first child. The element is in namespace https://example.com but it should be in no namespace. See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 2.4 Validation error on line 20 column 17 of tc1.xml: FORG0001: In content of element <extension2>: The content model does not allow element <nonAbsName2> to appear as the first child. The element is in namespace https://example.com but it should be in no namespace. See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 2.4 Validation error on line 24 column 17 of tc1.xml: FORG0001: In content of element <extension2>: The content model does not allow element <nonAbsName2> to appear as the first child. The element is in namespace https://example.com but it should be in no namespace. See http://www.w3.org/TR/xmlschema-1/#cvc-complex-type clause 2.4 Error on line 28 column 8 of tc1.xml: XQDY0027 Five validation errors were reported. First error: In content of element <root>: The content model does not allow element <test1> to appear as the first child. The element is in namespace https://example.com but it should be in no namespace. Validation of file tc1.xml completed: errors found
Here is a link to the actual sample files for reference: xml / root schema – ext schema
Any help would be greatly appreciated 🙂
Advertisement
Answer
Your immediate problem can be solved by adding
elementFormDefault="qualified"
to the xs:schema
elements of your XSDs. For an in-depth explanation, see
What does elementFormDefault do in XSD?
There remain additional validation issues. If their resolution is not obvious to you, post a new question, preferably with a complete MCVE that’s independent of off-site resources.