2013-11-27 23 views
1

假設有這樣一個XML文檔:驗證對立足屬性不同範圍

<?xml version="1.0" encoding="utf-8"?> 
<Angles> 
    <angle unit="DEG">45</angle> 
    <angle unit="RAD">0,7854</angle> 
</Angles> 

是否有可能定義驗證對相應範圍的角度數的XSD架構? (即對於0度0-360度,對於0度-2π對於rad)。

回答

1

您可以定義degTyperadType是這樣的:

<xs:simpleType name="degType"> 
    <xs:restriction base="xs:unsignedShort"> 
    <xs:minInclusive value="0"/> 
    <xs:maxInclusive value="360"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:simpleType name="radType"> 
    <xs:restriction base="xs:decimal"> 
    <xs:minInclusive value="0"/> 
    <xs:maxInclusive value="6.28318530718"/> 
    </xs:restriction> 
</xs:simpleType> 

然後在XSD 1.1,您可以使用條件類型分配:

<xs:element name="angle" type="xs:anyType"> 
    <xs:alternative test="@unit='DEG'" type="degType"/> 
    <xs:alternative test="@unit='RAD'" type="radType"/> 
    <xs:alternative test="@unit" type="xs:error"/> 
    <xs:alternative type="xs:string"/> 
</xs:element> 

XSD 1.0,你可以

  • angleangle上使用xsi:type,它指的是degTyperadType
  • 使用不同的元素名稱(angleDeg/angleRad)。

每個操作的請求......

xsi:type技術的XSD 1.0的示例如下:

此XML文檔實例:

<?xml version="1.0" encoding="utf-8"?> 
<Angles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="try.xsd"> 
    <angle xsi:type="degType">45</angle> 
    <angle xsi:type="radType">0.7854</angle> 
</Angles> 

Val與此XSD 1.0架構成功idates:

<xs:schema version="1.0" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:simpleType name="degType"> 
    <xs:restriction base="xs:unsignedShort"> 
     <xs:minInclusive value="0"/> 
     <xs:maxInclusive value="360"/> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="radType"> 
    <xs:restriction base="xs:decimal"> 
     <xs:minInclusive value="0"/> 
     <xs:maxInclusive value="6.28318530718"/> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="Angles"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="angle" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

使用的Xerces2 Java的2.11.0。

+0

您能否提供XSD 1.0的選項一的例子? Visual Studio 2005 xsd編輯器抱怨說我不能在同一個作用域中聲明具有不同類型的相同名稱的元素 – sblandin

+0

@sblandin:當然,回答使用'xsi:type'技術更新示例。 – kjhughes