如何为根元素定义必需的属性?

时间:2016-03-11 17:24:32

标签: xml xsd xsd-validation xml-validation

我无法找到如何为元素shop-offer添加必需属性。我试图放置

<xs:attribute name="id" type="xs:integer" use="required"/>

在架构根目录中以及元素的<xs:complexType>中,但它不起作用。我总是收到这里不允许的错误。

那我怎么能这样做呢?

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="shop-offer">

    <xs:complexType mixed="true">

      <xs:sequence>
        <xs:choice maxOccurs="unbounded">
          <xs:element name="tool">
            <xs:complexType>
              <xs:attribute name="id" type="xs:integer" use="required"/>      
            </xs:complexType>       
          </xs:element>     
          <xs:element name="widget">
            <xs:complexType>
              <xs:attribute name="id" type="xs:integer" use="required"/>      
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>

  </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:0)

您的xs:attribute声明没有问题,但他们的展示位置需要在idtool元素上显示widget个属性。

如果您还希望id根元素上需要shop-offer,则您必须在xs:complexType内放置另一个xs:sequenceshop-offer之后) <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="shop-offer"> <xs:complexType mixed="true"> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="tool"> <xs:complexType> <xs:attribute name="id" type="xs:integer" use="required"/> </xs:complexType> </xs:element> <xs:element name="widget"> <xs:complexType> <xs:attribute name="id" type="xs:integer" use="required"/> </xs:complexType> </xs:element> </xs:choice> </xs:sequence> <!-- This @id is for the shop-offer root element --> <xs:attribute name="id" type="xs:integer" use="required"/> </xs:complexType> </xs:element> </xs:schema>

此XSD,

<shop-offer id="1">
  <tool id="2"/>
</shop-offer>

将成功验证此XML

mixed="true"
根据要求

注意:您确定要<shop-offer id="1"> Text here. <tool id="2"/> And more text here. </shop-offer> ,这将允许此XML有效,

function [z] = testCat(x,y)
z=strcat(x,y);
end

也许并不理想。