xml架构xsd:all和另一个元素

时间:2016-03-23 21:30:04

标签: xml xsd

我有3个元素都需要,但可以按任意顺序,然后一个元素是可选的,maxOccours无限制。如何写xsd?

<!-- pid is required, unique (positive) integer 
            (can be used as a key for persons);
            the name, surname, salary elts. can be ordered in any order -->
            <person pid="1">    
                <!-- name is required, non-empty string -->  
                <name>Pavel</name>   
                <!-- surname is required, non-empty string -->
                <surname>Novák</surname> 
                <!-- salary is required, positive number 
                 with 2 decimal places precision, e.g. 10000.50 -->
                <salary>200000.00</salary> 
                <!-- note optional element, repeatable, contains any string -->  
                <note>Poznámka</note>   
            </osoba> 

2 个答案:

答案 0 :(得分:0)

前三个元素对应一个&#34; all&#34;模型组,而整体设置是一个序列。

据我所知,XML Schema不允许嵌套&#34; all&#34;序列模型组内的模型组。

以下架构验证了一个超集,其中注释也可以在任何地方。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="person">
    <xs:complexType>
      <xs:all>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="surname" type="xs:string"/>
        <xs:element name="salary" type="xs:decimal"/>
        <xs:element name="note" type="xs:string" maxOccurs="unbounded"/>
      </xs:all>
      <xs:attribute name="pid" type="xs:integer" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

从那里,可以使用类型限制进一步微调字符串为非空和十进制值。

答案 1 :(得分:0)

我解决了这个选择(所有顺序)和序列内的序列的组合。