2014-01-29 106 views
0

我需要创建.xsd模式,并指定属性。我该怎么做?XSD属性指定

<?xml version="1.0" encoding="UTF-8"?> 
<ConfigData> 
    <GlobalSettings>  
     <Logging param="Off"/> <-- param can be only in 'On' or 'Off' statement --> 
    </GlobalSettings> 
</ConfigData> 

我创造了这样的事情,但它不`吨工作

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="ConfigData"> 
    <xs:complexType> 
     <xs:element name="GlobalSettings"> 
      <xs:complexType>    
      <xs:simpleType name="statement"> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="On"/> 
        <xs:enumeration value="Off"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <xs:element name="Logging"> 
       <xs:complexType> 
        <xs:extension base="xs:string"> 
         <xs:attribute name="param" type="statement" use="required"/> 
        </xs:extension> 
       </xs:complexType> 
      </xs:element> 
      </xs:complexType> 
     </xs:element> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

如果你得到这个接受它作为答案请问 – Naren

+0

你的问题的答案是否帮助你? –

回答

1
<price currency="euros">20000.00</price> 

限制货币属性,以下列操作之一:

euros 
pounds 
dollars 


<xs:simpleType name="curr"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="pounds" /> 
    <xs:enumeration value="euros" /> 
    <xs:enumeration value="dollars" /> 
    </xs:restriction> 
</xs:simpleType> 



<xs:element name="price"> 
     <xs:complexType> 
      <xs:extension base="xs:decimal"> 
       <xs:attribute name="currency" type="curr"/> 
      </xs:extension> 
     </xs:complexType> 
</xs:element> 
+0

属性是可选的,因此''也是有效的。为了防止这种情况,您可以在'

+0

我需要在哪里粘贴“simpleType”容器?我编辑的问题,以显示我做了什么,但它不正确 – user3248822

+0

你说得对吗? – Naren

0

如果你定义一个新的simpleType并且您想从其他位置引用它,则需要在顶层定义它,直接在<xs:schema>元素。

你的架构已经超出简单类型的其他问题:你不能定义另一<xs:element>直属<xs:complexType>,而首先需要说你是否要一个<xs:sequence><xs:choice><xs:all>。在你的情况下,结果是相同的,因为在GlobalSettings下只有一个<GlobalSettings>元素在<ConfigData>下,并且有一个<Logging>元素。所以我们来挑选<xs:sequence>

模式就变成了:

<xs:simpleType name="onOffType"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="On" /> 
     <xs:enumeration value="Off" /> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="ConfigData"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="GlobalSettings"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="Logging"> 
          <xs:complexType> 
           <xs:attribute name="param" type="onOffType" use="required" /> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

这将验证您输入的文件,并提出了一个验证错误,如果你的<Logging>元素的param属性的值大于其他任何东西