いくつかのオプションがあります。
(1) 次の行に沿って、かなり精巧な正規表現を記述することで、説明した制約を適用できます。
- 4 つの文字列すべてが存在するすべての有効な値は、シーケンスの順列 ("HASCALCULATOR"、"READ ONLY"、"LISTUPDATENEEDED"、"MANDATORY") の連結です。
- 存在する文字列が 4 つ未満のすべての正当な値は、いくつかの順列を連結したプレフィックスです。
したがって、4 つの文字列の 24 の順列を計算し、接尾辞をオプションにすることで、正規表現を完全に書き出すことができます。  
<xs:simpleType name="properties">
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
    <xs:pattern value="((HASCALCULATOR (LISTUPDATENEEDED 
      (READ ONLY (MANDATORY)?)?)?)|(HASCALCULATOR 
      (LISTUPDATENEEDED (MANDATORY (READ ONLY)?)?)?)|(HASCALCULATOR 
      (READ ONLY (LISTUPDATENEEDED (MANDATORY)?)?)?)|(HASCALCULATOR
      (READ ONLY (MANDATORY (LISTUPDATENEEDED)?)?)?)|(HASCALCULATOR 
      (MANDATORY (LISTUPDATENEEDED (READ ONLY)?)?)?)|(HASCALCULATOR 
      (MANDATORY (READ ONLY 
      (LISTUPDATENEEDED)?)?)?)|(LISTUPDATENEEDED (HASCALCULATOR 
      (READ ONLY (MANDATORY)?)?)?)|(LISTUPDATENEEDED (HASCALCULATOR 
      (MANDATORY (READ ONLY)?)?)?)|(LISTUPDATENEEDED (READ ONLY 
      (HASCALCULATOR (MANDATORY)?)?)?)|(LISTUPDATENEEDED (READ ONLY 
      (MANDATORY (HASCALCULATOR)?)?)?)|(LISTUPDATENEEDED (MANDATORY 
      (HASCALCULATOR (READ ONLY)?)?)?)|(LISTUPDATENEEDED (MANDATORY 
      (READ ONLY (HASCALCULATOR)?)?)?)|(READ ONLY (HASCALCULATOR 
      (LISTUPDATENEEDED (MANDATORY)?)?)?)|(READ ONLY (HASCALCULATOR 
      (MANDATORY (LISTUPDATENEEDED)?)?)?)|(READ ONLY 
      (LISTUPDATENEEDED (HASCALCULATOR (MANDATORY)?)?)?)|(READ ONLY 
      (LISTUPDATENEEDED (MANDATORY (HASCALCULATOR)?)?)?)|(READ ONLY 
      (MANDATORY (HASCALCULATOR (LISTUPDATENEEDED)?)?)?)|(READ ONLY 
      (MANDATORY (LISTUPDATENEEDED (HASCALCULATOR)?)?)?)|(MANDATORY 
      (HASCALCULATOR (LISTUPDATENEEDED (READ ONLY)?)?)?)|(MANDATORY 
      (HASCALCULATOR (READ ONLY (LISTUPDATENEEDED)?)?)?)|(MANDATORY 
      (LISTUPDATENEEDED (HASCALCULATOR (READ ONLY)?)?)?)|(MANDATORY 
      (LISTUPDATENEEDED (READ ONLY (HASCALCULATOR)?)?)?)|(MANDATORY 
      (READ ONLY (HASCALCULATOR (LISTUPDATENEEDED)?)?)?)|(MANDATORY 
      (READ ONLY (LISTUPDATENEEDED (HASCALCULATOR)?)?)?))?">
      <xs:annotation>
        <xs:documentation>
          The pattern here was calculated this way.
          1 Let A = "HASCALCULATOR", B = "LISTUPDATENEEDED", 
            C = "READ ONLY", and D = "MANDATORY".
          2 Calculate the permutations of the sequence (A,B,C,D). 
            A sequence with four members has 4! = 24 permutations: 
            (A,B,C,D), (A,B,D,C), (A,C,B,D), (A,C,D,B), ...
          3 From each permutation generate a regex of the form
            (s1 (s2 (s3 (s4)?)?)?)
          4 Join all of these in single optional choice.
        </xs:documentation>
      </xs:annotation>
    </xs:pattern>
  </xs:restriction>
</xs:simpleType>
(2) 論理和を左因数分解することにより、より冗長なバージョンを生成できます。
(A (B, (C, (D)?)?)?)
|(A (B, (D, (C)?)?)?) 
|(A (C, (B, (D)?)?)?)
|(A (C, (D, (B)?)?)?)
のようなものになります
(A ((B ((C D?)|(D C?))? 
  | (C ((B D?)|(D B?))?)
  | (D ((B C?)|(C B?))?)))
(3)素材の表現を考え直すことができます。たとえば、4 つの文字列のいずれかの存在をフラグとして扱い、繰り返しを無視することができます。これにより、スケッチしたようなパターンが機能します。  
(4) フラグを 4 つのブール属性として表すことができるため、代わりに
<xs:element name="properties" type="tns:properties"/>
<!--* assumes the declaration for 'properties' type
    * given above *-->
あなたは次のようなものを書きます:
<xs:element name="properties">
  <xs:complexType>
    <xs:attribute name="has-calculator" type="xs:boolean"/>
    <xs:attribute name="mandatory" type="xs:boolean"/>
    <xs:attribute name="read-only" type="xs:boolean"/>
    <xs:attribute name="list-update-needed" type="xs:boolean"/>
  </xs:complexType>
</xs:element>
(5) フラグを空の要素として表すことができます。これは、発生することによってプロパティを通知します。
<xs:complexType name="empty">
  <xs:sequence/>
</xs:complexType>
<xs:element name="properties">
  <xs:complexType>
    <xs:all>
      <xs:element name="has-calculator" 
                  type="tns:empty" minOccurs="0"/>
      <xs:element name="mandatory" 
                  type="tns:empty" minOccurs="0"/>
      <xs:element name="read-only" 
                  type="tns:empty" minOccurs="0"/>
      <xs:element name="list-update-needed" 
                  type="tns:empty" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
</xs:element>
私自身、オプション(5)を使用する傾向があります。しかし、すべて大文字の文字列と相まって、質問の一般的な感じから、十分に確立されたシステムからの出力を扱っており、形式を変更することは現実的ではないと思います。