Esquema XML para restringir um campo com base em outro
Pergunta
Eu tenho o seguinte esquema, que eu uso para garantir que uma pessoa PhoneNumber
e PhoneNumberType
(Home, trabalho, etc.) não é superior a 10 caracteres. No entanto, quero melhorar esse esquema para que PhoneNumberType
não é necessário se um PhoneNumber
não é fornecido, mas é necessário se o PhoneNumber
é fornecido. Existe uma maneira de fazer isso no XML Schema 1.0?
Estou ciente de que isso pode ser realizado no esquema XML 1.1 usando <xs:assert/>
, mas infelizmente estou preso ao esquema XML 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>
Solução
Desculpe, o esquema XML não pode fazer isso.
Algumas perguntas semelhantes:
Outras dicas
Parece -me que este é um relacionamento "tem".
Se você possui um elemento foneNumber, ele deve ter uma propriedade do tipo PhoneNumberType. Em vez de mexer com validação e restrições, sugiro que você transforme o número de telefone em um elemento complexo e faça do PhoneNumberType uma propriedade necessária.
Pode ser tarde demais, mas você pode colocá -los em grupo assim
<xs:group name="group">
<xs:sequence>
<xs:element ref="PhoneNumber"/>
<xs:element ref="PhoneNymberType" />
</xs:sequence>
E fazer esse grupo necessário ou não