/ / xmlスキーマxsd任意の要素 - xml、検証、xsd

xmlスキーマxsd任意の要素 - xml、検証、xsd

私は、次の構造を持つXML文書を検証するスキーマを作成しようとしています。

<?xml version="1.0" encoding="utf-8"?>
<RootElement>
<Group1>
<Group1Member1 value="true"/>
<Group1Member2 value="false"/>
<Group1Member3 value="true"/>
</Group1>
<Group2>
<Group2Member1 source="INA"/>
<Group2Member2 source="INB"/>
<Group2Member3 source="INC"/>
<Group2Member4 source="IND"/>
</Group2>
<Group3>
<Group3Member1 source="INY"/>
<Group3Member2 source="INZ"/>
</Group3>
<Group4>
<Group4Member device="D1" maxTemp="100" hysteresis="5" />
<Group4Member device="D2" maxTemp="120" hysteresis="2" />
<Group4Member device="D3" maxTemp="50" hysteresis="1" />
</Group4>
<RootElement>

キャッチはそれです:

  • Group1、Group2、Group3、およびGroup4はオプションであり、任意の順序で0回または1回発生することがあります
  • 各グループのメンバー要素は、任意の順序で
  • グループ4内では、Group4Memberは0回から4回の間で表示されます
  • ここに示されていない任意の数の任意の要素は、RootElement内またはグループ内のどこにでも表示できます。
  • 既知の要素内の未知の属性は無視する必要があります

私は次のXSDをまとめました:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="RootElement">
<xs:complexType>
<xs:all>
<xs:element name="Group1" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="Group1Member1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group1Member2" maxOccurs="1">
<xs:complexType>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group1Member3" maxOccurs="1">
<xs:complexType>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Group2" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="Group2Member1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group2Member2" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group2Member3" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group2Member4" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Group3" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="Group3Member1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INY" />
<xs:enumeration value="INZ" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group3Member2" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INY" />
<xs:enumeration value="INZ" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Group4" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Group4Member" maxOccurs="4">
<xs:complexType>
<xs:attribute name="device" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="D1" />
<xs:enumeration value="D2" />
<xs:enumeration value="D3" />
<xs:enumeration value="D4" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="maxTemp" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="255" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="hysteresis" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="255" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>

"xmllint"は不明なタグや属性を持たない文書に満足しています。

私が "<xs:"</ xs:sequence>"タグと "</ xs:all>"タグの直前では、スキーマは余分(4以上)または無効(不良属性)にフラグを立てることはありません。processContents = "skip" minOccurs = "0"値) "<Group4Member>"要素をエラーとして返します。

私はおそらく何かばかげたことをしています。誰かが私の問題を簡単に突き止めることができるチャンスがあるので、私はここで尋ねています。

私はまだこのanyAttributeを試していないので、私は最終的にそこに着くと思います。また、 "<xs:all>"グループに任意のメンバー要素が0以上(0または1ではなく)許可されるような方法はありますか?

あなたの忍耐と、事前のお手伝いをありがとうございます。

回答:

回答№1は0

namespace属性をxs:anyタグに追加します。値は## other、## localです。これにより、自分のネームスペースからチェックされていないタグが存在するのを防ぎます。