2010-03-25 54 views
4

我有以下架構,我用它來確保一個人的PhoneNumberPhoneNumberType(家庭,工作等)不超過10個字符。但是,我想改進此架構,因此如果未提供PhoneNumber,則不需要PhoneNumberType,但如果提供PhoneNumber,則需要PhoneNumberType。有沒有辦法在XML Schema 1.0中做到這一點?XML模式限制一個字段基於另一個

我知道這可以在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> 

回答

0

在我看來,這是一個 「有」 關係。

如果你有一個PhoneNumber元素,那麼它應該有一個PhoneNumberType類型的屬性。我建議您將PhoneNumber變成一個複雜的元素,並使PhoneNumberType成爲它的必需屬性,而不是混淆驗證和限制。

+0

我不能改變的XML文檔的結構,因爲它來自外部來源。 –

0

可能爲時已晚,但你可以把它們組這樣

<xs:group name="group"> 
<xs:sequence> 
    <xs:element ref="PhoneNumber"/> 
    <xs:element ref="PhoneNymberType" /> 
</xs:sequence> 

並進行所需的這組或不

相關問題