3

XML ファイルに対して検証する XSD を作成したいと考えています。XML ファイルの例は次のようになります。

<person>
    <fullname>John Doe</fullname>
    <age>25</age>
    <gender>male</gender>
</person>

要件の 1 つは、<person>タグが拡張可能であることです。つまり、上記の 3 つの必須の子要素に加えて、任意の名前の任意の要素を含めることができます。したがって、このドキュメントは XSD によって検証されると有効になります。

 <person>
    <fullname>John Doe</fullname>
    <age>25</age>
    <gender>male</gender>
    <address>USA</address>
    <profession>worker</profession>
</person>

要素について読みましたが、XSD では要素内<xs:any />に配置できません。、および要素が必要であり、それぞれが正確に1つ表示される必要があります。それ以外には、ゼロまたは多数のオプション要素が存在する可能性があります。<xs:any /><xs:all /><fullname><gender><age>

サポートされている XSD ルールでこれを達成することは可能ですか?

4

1 に答える 1

0

xs:all と xs:any を組み合わせると、あいまいなコンテンツが作成される可能性があるため、許可されていません。ただし、コンテンツが xs:sequence 内に含まれている場合は、これを行うことができます。

注 : xs:any の名前空間と processContent 属性が要件に合わせて正しく設定されていることを確認してください。

xs:openContentタグを使用した XSD 1.1 でのこの種の拡張性に対するサポートははるかに優れていますが、XSD 1.1はサポートされています。はまだ限られています。

ここに画像の説明を入力

 <?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2016 Developer Bundle Edition 14.1.3.6618 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="fullname" type="xs:string" />
                <xs:element name="age" type="xs:int" />
                <xs:element name="gender">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="male" />
                            <xs:enumeration value="female" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:any namespace="##any" processContents="skip" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
于 2016-07-22T09:20:52.383 に答える