Esta es una forma posible de definir un XSD que coincida con su XML; Al aprender XSD, puede inscribir la ayuda de una herramienta que infiere el XSD por usted, comenzando con uno o más archivos de muestra XML.
<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="component">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="operation">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="input">
<xsd:complexType>
<xsd:attribute name="type" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="event">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="output">
<xsd:complexType>
<xsd:attribute name="type" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="type" type="xsd:string" use="required" />
<xsd:attribute name="binding" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
Como Tutorial esto, puede empezar a ajustar min/maxOccurs, el uso (requerido/opcional), las definiciones de reutilización, etc. A generado XSD es un buen punto de partida, pero normalmente termina siendo editado una manera o de otra ...
Creo que es necesario que 'xsd: sequence' viene antes de' xsd: attribute's. –
Sí, exactamente lo contrario de lo que cabría esperar, dado que en el xml real los atributos vienen antes que los elementos. –
mala decisión de diseño de los diseñadores de esquemas XML, hace que el XSD sea más difícil de leer, además de ser contra intuitivo. Debería haber permitido poner atributo y secuencia, etc. en cualquier orden dentro del complexType –