Используйте атрибуты extension и normal вместе в xsd - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь сделать отображение, и мне нужно использовать:

  • Config.xxx.yyy.KeyPair [z] .normalAttribute
  • Config.xxx.yyy.KeyPair[z] @ exteAttribute

KeyPair можно использовать от 0 до x раз

  • Дополнительные атрибуты: KeyId, KeyType, ValidTo, Active
  • Обычные атрибуты: PrivateKey, PublicKey

Но выдается ошибка, когда я пытаюсь загрузить xsd файл в C #:

System.Xml.Schema.XmlSchemaException: The type attribute cannot be present with either simpleType or complexType.

Здесь показана сокращенная версия какя сделал это, но это совсем не работает:

<xs:element name="Config">
  <xs:complexType>
    <xs:all>
      <xs:element name="xxx">
        <xs:complexType>
          <xs:all>
            <xs:element name="EncryptionKeys" type="yyy"/>
          </xs:all>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:element>

<xs:element name="yyy">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="KeyPair" type="KeyPairExtraTypes" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:attributeGroup ref="KeyPairAttributes"/>
          <xs:attributeGroup ref="KeyPairExtraTypes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:attributeGroup name="KeyPairAttributes">
  <xs:attribute name="PrivateKey" type="xs:string"/>
  <xs:attribute name="PublicKey" type="xs:string"/>
</xs:attributeGroup>

<xs:complexType name="KeyPairExtraTypes">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute type="xs:string" name="KeyId"/>
      <xs:attribute type="xs:string" name="KeyType" use="required"/>
      <xs:attribute type="xs:string" name="ValidTo" use="optional"/>
      <xs:attribute type="xs:bool" name="Active" use="required"/>
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

1 Ответ

0 голосов
/ 10 июля 2018

Решение было простым.

<xs:element name="Config">
    <xs:complexType>
        <xs:all>
            <xs:element name="xxx">
                <xs:complexType>
                    <xs:all>
                        <xs:element name="EncryptionKeys">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="KeyPair" maxOccurs="unbounded">
                                        <xs:complexType>
                                            <xs:all>
                                                <xs:element name="PublicKey" type="xs:string"/>
                                                <xs:element name="PrivateKey" type="xs:string"/>
                                            </xs:all>
                                            <xs:attribute name="KeyId"/>
                                            <xs:attribute name="KeyType" type="xs:string" use="required"/>
                                            <xs:attribute name="ValidTo" type="xs:string"/>
                                            <xs:attribute name="Active" type="xs:boolean" use="required"/>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:all>
                </xs:complexType>
            </xs:element>
        </xs:all>
    </xs:complexType>
</xs:element>
...