Ваши ограничения не совсем ясны, поэтому ряд схем будет проверять XML в зависимости от того, насколько вы хотите, чтобы проверка была свободной. В этом примере показана схема, которая обязывает ровно два элемента внутри элемента, и они должны иметь атрибут «name» со значениями «status» или «message».
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="str" type="StrType" minOccurs="2" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="StrType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="StrAttribute" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="StrAttribute">
<xs:restriction base="xs:string">
<xs:enumeration value="status"/>
<xs:enumeration value="message"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Конечно, это позволило бы двум элементам как с атрибутом name, установленным в «message», так и сначала с «message», затем с состоянием. Я полагаю, что схема не может определить последовательность, содержащую два элемента с одинаковыми именами, но разных типов, которые вам понадобятся, если вам потребуется проверка, чтобы убедиться, что первый всегда содержит «статус», а второй - «сообщение».