XML Schema:具有属性值的元素序列?

时间:2016-12-22 08:50:25

标签: xml xsd

真的在与xsd架构挣扎。我有一个xml片段,如下所示

<?xml version='1.0' encoding='UTF-8'?>
<testing version="0.1">
  <alarms>
    <alarm ID="1">
        <column name="TYPE">HIGH TEMP</column>
        <column name="DISPLAY">High temperature alarm</column>
        <column name="VALUE">245.66</column>
    </alarm>
    <alarm ID="2">
        <column name="TYPE">HUMIDITY</column>
        <column name="DISPLAY">Humidity alarm</column>
        <column name="VALUE">56.44</column>
    </alarm>
  </alarms>

我已经使用了一些在线工具为此生成xsd架构,但它们并不是我所希望的。 ID列应该是必需的,我不想使用全局变量?。

我还想对值进行限制(即验证为十进制)我该怎么做

这是我到目前为止,我不知道如何验证列元素

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="alarms">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="alarm" maxOccurs="unbounded" minOccurs="0">
     <xs:complexType>
       <xs:sequence>
         <xs:element name="column">
           <xs:complexType>
             <xs:simpleContent>
               <xs:extension base="xs:string">
                 <xs:attribute name="name" type="xs:string" />
               </xs:extension>
             </xs:simpleContent>
           </xs:complexType>
         </xs:element>
       </xs:sequence>
     </xs:complexType>
   </xs:element>
</xs:sequence>
</xs:complexType>

  

此致

1 个答案:

答案 0 :(得分:2)

首先,您需要“具有简单内容的复杂类型”。搜索该短语应该足以找到示例。这是我在这里找到的一个例子:

c# serialization - complex type containing simple content with attributes

<xsd:complexType name="AwkwardChild">
  <xsd:simpleContent>
    <xsd:extension base="tt:AwkwardChildType">
      <xsd:attribute name="id" type="xsd:ID"/>
    </xsd:extension>
  </xsd:simpleContent>
</xsd:complexType>

其次,使用XSD 1.0,如果两个兄弟元素具有相同的名称,则它们必须具有相同的类型:验证完全由元素名称驱动。因此,<column name="DISPLAY"><column name="VALUE">不能有不同的规则。为此,您需要XSD 1.1中的“条件类型分配”功能。