Come escludere un valore di censimento nel file XML utilizzando XSD?
-
22-09-2019 - |
Domanda
E 'possibile specificare il valore di un tag o un attributo non dovrebbe essere come some_value ?
Ho un requisito strana, dove il XSD non è a conoscenza dei valori di essere inviato ad esso. Il valore di quel particolare tag può essere una stringa con qualsiasi valore tranne un valore (diciamo data_migration
).
Il mittente deve essere confermato con l'errore, se tale valore particolare viene inviato.
E 'possibile specificare questa restrizione?
Soluzione
Non sono un esperto espressione regolare, ma questo simpleType rende tutto a cominciare data_migration
valido.
<xs:simpleType name="notDataMigration">
<xs:restriction base="xs:string">
<xs:pattern value="^(?!data_migration).*" />
</xs:restriction>
</xs:simpleType>
Altri suggerimenti
Non so se si può escludere in modo specifico un valore. Non sono sicuro se questo aiuta, ma è possibile creare due enumerazioni separati e quindi creare l'unione delle enumerazioni.
<xsd:simpleType name="IncludedEnumType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="pending" />
<xsd:enumeration value="in_process" />
<xsd:enumeration value="failed" />
<xsd:enumeration value="unknown" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ExcludedEnumType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="data_migration" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="CombinedEnumType">
<xsd:union memberTypes="IncludedEnumType ExcludedEnumType" />
</xsd:simpleType>
Si potrebbe utilizzare sia IncludedEnumType
o CombinedEnumType
se necessario. Utilizzando il IncludedEnumType
sarebbe ovviamente esclusi i valori in ExcludedEnumType
.
Questo approccio utilizza Soluzione 2 da questo da IBM .
Utilizzare le espressioni regolari per specificare un modello o come nel suo caso ciò che un modello non dovrebbe contenere.