2015-05-06 22 views
5

dayalı XSD özellik değerini sınırla ben XML bu var:başka özellik değeri

<Const Name="a" Value="1.0"/> 
<Const Name="b" Value="1"/> 
<Const Name="c" Value="A"/> 
<Const Name="d" Value="B"/> 

Şimdi sadece Ad = "b" Const için, Value olmalıdır 1, 2, 3 veya 4. Başka hiçbir değerlere izin verilir. Diğer Const, gösterildiği gibi başka değerler içerebilir. XSD'de bunu nasıl ifade edebilirim?

Şimdiye kadar bu var: Ben XSD 1.0 kullanmak

<xs:element name="Const"> 
    <xs:complexType> 
     <xs:attribute name="Value" type="xs:string" use="required"/> 
     <xs:attribute name="Name" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 

, öyle görünüyor: ... ne yazık ki ... ... VS2013 yüzden "Alternatif" Benim için çalışmıyor

cevap

11

Bu XSD 1.1 en Conditional Type Assignment kullanarak yapabilirsiniz: En ATYPE için

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
    elementFormDefault="qualified" 
    vc:minVersion="1.1"> 

    <xs:element name="Const"> 
    <xs:alternative test="@Name = 'a'" type="aType"/>   
    <xs:alternative     type="otherType"/> 
    </xs:element> 

    <xs:complexType name="aType"> 
    <xs:sequence/> 
     <xs:attribute name="Name" type="xs:string"/> 
     <xs:attribute name="Value"> 
     <xs:simpleType> 
      <xs:restriction base="xs:integer"> 
      <xs:minInclusive value="1"/> 
      <xs:maxInclusive value="4"/> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="otherType"> 
    <xs:sequence/> 
    <xs:attribute name="Name" type="xs:string"/> 
    <xs:attribute name="Value" type="xs:string"/> 
    </xs:complexType> 
</xs:schema> 
+0

Ben bu geldi: \t \t \t \t \t \t \t \t Erik

+1

Evet dayalı 'aType' Ular ifadeleri de mükemmel geçerlidir. – kjhughes

3

Örnek çözümü xs Ussing: bu sadece bir örnektir ve mayb olduğunu

<xs:element name="Const"> 
    <xs:complexType> 
     <xs:attribute name="Value" type="xs:string" use="required"/> 
     <xs:attribute name="Name" type="xs:string" use="required"/> 
     <xs:assert test="(@Name='b' and @Value=('1', '2', '3', '4')) 
      or 
      (@Name='a' and @Value=('1.0', '2.0', '3.0', '4.0')) 
      or 
      (@Name='c') 
      or 
      (@Name='d')"></xs:assert> 
    </xs:complexType> 
</xs:element> 

Not: Eğer XSD 1.1 kullandığınız varsayarak iddia e bunu değiştirmek zorundasın.

İlgili konular