Ответ 1
Это один из возможных способов определения XSD, соответствующего вашему XML; при обучении XSD вы можете зачислить помощь инструмента, который предоставляет вам XSD, начиная с одного или нескольких файлов примеров 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>
Как вы это сделаете, вы можете начать настройку min/maxOccurs, использовать (обязательно/необязательно), повторное использование определений и т.д. Сгенерированный XSD является хорошей отправной точкой, но обычно заканчивается тем, что редактируется так или иначе...