這是不可能的XSD 1.0,除非你使用的東西,如Schematron的(在頂部XSD 1.0)。
這些是您使用XSD 1.1的選項:斷言和類型選項。您在下面看到的是基於Xerces的XSD 1.1規範的實現進行測試。
(編輯,包括Michael Kay的變化在現實生活中,只能選擇一個。)
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xerces="http://xerces.apache.org">
<xsd:element name="Element">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Value" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="Key" type="xsd:string" use="required"/>
<xsd:attribute name="Value" type="xsd:string"/>
<xsd:assert test="(Value and not(@Value)) or (@Value and not(Value))" xerces:message="Choose your Value wisely, one only."/>
<xsd:assert test="exists(Value) != exists(@Value)" xerces:message="One way..."/>
<xsd:assert test="count((Value,@Value))=1" xerces:message="Another way..."/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Element1">
<xsd:alternative test="@Value" type="att"/>
<xsd:alternative test="not(@Value)" type="elt"/>
</xsd:element>
<xsd:complexType name="elt">
<xsd:sequence>
<xsd:element name="Value" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="Key" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="att">
<xsd:attribute name="Key" type="xsd:string" use="required"/>
<xsd:attribute name="Value" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>
這是不可能的XSD 1.0;如果您對XSD 1.1解決方案感興趣,請將您的問題標記爲XSD 1.1 –
@PetruGardea我想知道,我有什麼選擇。如果你知道,如何在XSD 1.1中解決這個問題,隨時寫一個答案。 – Spook