あるフィールドを別のフィールドに基づいて制限する XML スキーマ

StackOverflow https://stackoverflow.com/questions/2518384

  •  22-09-2019
  •  | 
  •  

質問

次のスキーマがあります。これを使用して、人の PhoneNumber そして PhoneNumberType (自宅、職場など)は10文字以内です。ただし、このスキーマを改善して、 PhoneNumberType の場合は必要ありません。 PhoneNumber は提供されていませんが、次の場合には必須です。 PhoneNumber 供給される。XML Schema 1.0 でこれを行う方法はありますか?

これは、XML Schema 1.1 で以下を使用して実現できることは承知しています。 <xs:assert/>, 、しかし残念なことに、私はXML Schema 1.0で行き詰まっています。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xs:element name="PhoneNumber">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:minLength value="0"/>
        <xs:maxLength value="10"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="PhoneNumberType">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:minLength value="0"/>
        <xs:maxLength value="10"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
</xsd:schema>

他のヒント

「持っている」関係であるように私には思えます。

あなたはPhoneNumberの要素を持っている場合は、

、それはタイプPhoneNumberTypeのある性質を持っている必要があります。むしろ、検証と制限をいじりよりも、私はあなたが複雑な要素にPhoneNumberのを回すとPhoneNumberTypeそれの必要なプロパティにすることをお勧めします。

は遅すぎるかもしれないが、あなたはこの

のようなグループにそれらを置くことができます
<xs:group name="group">
<xs:sequence>
    <xs:element ref="PhoneNumber"/>
    <xs:element ref="PhoneNymberType" />
</xs:sequence>

そして作るこのグループが必要かどうか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top