Search code examples
xmlxsdxsd-validationxml-validation

Not well formed: Element type "xs:element" must be followed by either attribute specifications, ">" or "/>"


I am getting an error saying Not well formed: Element type "xs:element" must be followed by either attribute specifications, ">" or "/>". All my element tags are nested properly though. No matter what I do, I am still getting the error.

This is my xsd file. I was given an xml file, and asked to develop an xsd file for it.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="createSalesOrder">
  <xs:complexType minOccurs="1" maxOccurs="unbounded">
    <xs:element name="order">
	 <xs:complexType> 
	  <xs:sequence minOccurs="1" maxOccurs="unbounded">
	  
	   <xs:element name="orderSource">
	    <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:string">
	    <xs:maxLength value="30"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="purchaseOrder">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:string">
	    <xs:maxLength value="20"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="purchaseOrderType">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:string">
	    <xs:maxLength value="5"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="purchaseOrderType">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:date"/>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	    <xs:element name="orderType">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:string">
	    <xs:maxLength value="10"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="orderExpiry">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:integer">
	    <xs:minInclusive value="1"/>
		<xs:maxInclusive value="5"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="orderConsumerReferenceId">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:string">
		<xs:maxLength value="20"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="orderSourceReferenceId">
	   <xs:simpleType>
		<xs:sequence minOccurs="1" maxOccurs="unbounded">
		<xs:restriction base="xs:integer">
		<xs:pattern value="\d{8}"/>
		</xs:restriction>
		</xs:sequence>
		</xs:simpleType>
	   </xs:element>
	   
	   <xs:element name="shipping">
	    <xs:complexType>
		 <xs:sequence>
		  <xs:element name="requestedDate" type="xs:dateTime"/>
		  <xs:element name="shipmentOrigin" type="xs:boolean"/>
		 </xs:sequence>
		</xs:complexType>
	   </xs:element>
	   
	   <xs:element name="orderCurrency">
	    <xs:complexType>
		 <xs:sequence>
		  <xs:element name="currenyCode" type="xs:string" default="EUR"/>
		  <xs:element name="currencyExchangeRate" type="xs:integer">
		   <xs:simpleType minOccurs="1">
		    <xs:restriction>
			 <xs:enumeration value="1"/>
			</xs:restriction>
		   </xs:simpleType>
		  </xs:element>
		 </xs:sequence>
		</xs:complexType>
	   </xs:element>
	   
	   <xs:element name="partner">
	    <xs:complexType>
		 <xs:sequence>
		  <xs:element name="partnerRole" type="xs:string"/>
		  <xs:element name="partnerId"/>
		  <xs:element name="communicationLanguageCode" type="xs:string"/>
		  <xs:element name="address" minOccurs="0" maxOccurs="unbounded">
		   <xs:complexType>
		    <xs:sequence>
			 <xs:all>
		      <xs:element name="name" type="xs:string"/>
			 </xs:all>
			 <xs:element name="value" type="xs:string">
			 <xs:restriction>
			  <xs:maxLength value="50"/>
			 </xs:restriction>
			 </xs:element>
			</xs:sequence>
		   </xs:complexType>
		  </xs:element>
		 </xs:sequence>
		</xs:complexType>
	   </xs:element>
	   
	   <xs:element name="salesOrganization">
	    <xs:simpleType>
		 <xs:restriction base="xs:string">
		  <xs:maxLength value="10"/>
		 </xs:restriction>
		</xs:simpleType>
	   </xs:element>
	   <xs:element name="distributionChannel">
	    <xs:simpleType>
		 <xs:restriction base="xs:string">
		  <xs:pattern value="[A-Z][A-Z]"/>
		 </xs:restriction>
		</xs:simpleType>
	   </xs:element>
	   <xs:element name="division">
	    <xs:simpleType>
		 <xs:restriction base="xs:integer">
		  <xs:maxLength value="2"/>
		 </xs:restriction>
		</xs:simpleType>
	   </xs:element>
	   <xs:element name="orderTerm" minOccurs="1" maxOccurs="unbounded">
	    <xs:complexType>
		 <xs:sequence>
		  <xs:element name="name" type="xs:string"/>
		  <xs:element name="value" type="xs:string"/>
		 </xs:sequence>
		</xs:complexType>
	   </xs:element>
	   <xs:element name="lineItem" minOccurs="0">
	    <xs:complexType>
		 <xs:sequence>
		  <xs:element name="lineId" type="xs:integer"/>
		  <xs:element name="parentLineId">
		   <xs:simpleType>
		    <xs:restriction base="xs:string">
			 <xs:maxLength value="12"/>
			</xs:restriction>
		   </xs:simpleType>
		  </xs:element>
		  <xs:element name="materialFlowType type="xs:integer"/>
		  <xs:element name="material" minOccurs="1" type="xs:string"/>
		  <xs:element name="materialDescription" minOccurs="0">
		   <xs:simpleType>
		    <xs:restriction base="xs:string">
			 <xs:maxLength value="20"/>
			</xs:restriction>
		   </xs:simpleType>
		  </xs:element>
		  <xs:element name="orderedQuantity" minOccurs="1" type="xs:integer"/> 
		  <xs:element name="configuration">
		   <xs:complexType>
		    <xs:sequence>
			 <xs:element name="instanceId">
			  <xs:simpleType>
			   <xs:restriction base="xs:integer">
			    <xs:maxLength value="20"/>
			   </xs:restriction>
			  </xs:simpleType>
			 </xs:element>
			 <xs:element name="parentInstanceId">
			  <xs:simpleType>
			   <xs:restriction base="xs:integer">
			    <xs:maxLength value="20"/>
			   </xs:restriction>
			  </xs:simpleType>
			 </xs:element>
			 <xs:element name="quantity" value="xs:integer"/>
			 <xs:element name="objectKey">
			  <xs:simpleKey>
			   <xs:restriction base="xs:string">
			    <xs:maxLength value="25"/>
			   </xs:restriction>
			  </xs:simpleKey>
			 </xs:element>
			 <xs:element name="characteristics" maxOccurs="unbounded">
			  <xs:complexType>
			   <xs:sequence>
			    <xs:element name="type" minOccurs="1">
				 <xs:simpleType>
				  <xs:restriction base="xs:string">
				   <xs:maxLength value="15"/>
				  </xs:restriction>
				 </xs:simpleType>
				</xs:element>
				<xs:element name="value" minOccurs="1">
				 <xs:simpleType>
				  <xs:restriction value="xs:string">
				   <xs:maxLength value="20"/>
				  </xs:restriction>
				 </xs:simpleType>
				</xs:element>
			   </xs:sequence>
			  </xs:complexType>
			 </xs:element>
			</xs:sequence>
		   </xs:complexType>
		  </xs:element>
		  <xs:element name="price">
		   <xs:complexType>
		    <xs:sequence>
			 <xs:element name="name" minOccurs="1" maxOccurs="1">
			  <xs:simpleType>
			   <xs:restriction base="xs:string">
			    <xs:maxlength value="15"/>
			   </xs:restriction>
			  </xs:simpleType>
			 </xs:element>
			 <xs:element name="value" type="xs:decimal"/>
			 <xs:element name="currencyCode" type="xs:string" default="EUR" minOccurs="1" maxOccurs="1">
			  <xs:simpleType>
			   <xs:restriction>
			    <xs:maxLength value="3"/>
			   </xs:restriction>
			  </xs:simpleType>
			 </xs:element>
			</xs:sequence>
		   </xs:complexType>
		  </xs:element>
		  <xs:element name="shippingDate">
		   <xs:complexType>
		    <xs:sequence>
			 <xs:element name="name">
			  <xs:simpleType>
			   <xs:restriction base="xs:string">
			    <xs:maxLength value="15"/>
			   </xs:restriction>
			  </xs:simpleType>
			 </xs:element>
			 <xs:element name="value" type="xs:dateTime"/>
			</xs:sequence>
		   </xs:complexType>
		  </xs:element>
		  <xs:element name="shipmentOrigin" type="xs:string"/>
		 </xs:sequence>
		</xs:complexType>
	   </xs:element>
	   <xs:element name="callBackUrl" type="xs:string"/>
	  </xs:sequence>
	 </xs:complexType>
	</xs:element> 
   </xs:complexType>
  </xs:element>
 </xs:schema>


Solution

  • A double quote missing in the following line

    <xs:element name="materialFlowType type="xs:integer"/>
    

    Correct code

    <xs:element name="materialFlowType" type="xs:integer"/>
    

    You have some additional error with the xsd file. In a xs:complexType tag xs:element is not allowed. You need to wrap entire "order" element with xs:sequence tag like this

    <xs:sequence>
       <xs:element name="order">.....</xs:element>
    </xs:sequence>