如何为复杂类型元素设置默认/固定值?

时间:2014-05-09 10:22:52

标签: xml xsd

<xsd:element name="category">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute default="http://schemas.xmlsoap.org/soap/actor/next" ref="soapenv:actor" use="optional"/>
          <xsd:attribute ref="soapenv:mustUnderstand" use="optional"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
</xsd:element>

元素名称是“category”,我希望它始终默认为值“ABC”

上面的定义在Soap UI中生成如下元素:

<urn:category soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="?">?</urn:category> 

我需要的是元素应该生成为

<urn:category soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="?">ABC</urn:category> 

为实现这一目标,我尝试了

  1. <xsd:element name="category" fixed="ABC">
  2. <xsd:element name="category" default="ABC">
  3. 以上都不能生成值为

    的元素

    我在这里做错了吗?请帮忙。

    感谢。

    我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

从XSD的角度来看,您尝试指定默认值或固定值的方法是正确的方法,它们似乎对我很好。也就是说,如果我创建一个包含您提供的元素声明的模式文档,并在fixed="ABC"元素上使用附加属性xsd:element,那么文档<category>ABC</category>对模式和文档有效<category>abc</category>不是,并且引发了关于价值与所需价值不匹配的投诉&#39; ABC&#39;。

要明确地说,这是我使用的完整架构文档:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soapenv="http://example.com/soapenv"
  elementFormDefault="qualified">

  <xsd:import namespace="http://example.com/soapenv"
  schemaLocation="complex-default.2.xsd"/>

  <xsd:element name="category" fixed="ABC">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attribute 
            default="http://schemas.xmlsoap.org/soap/actor/next"
            ref="soapenv:actor" 
            use="optional"/>
          <xsd:attribute ref="soapenv:mustUnderstand" 
            use="optional"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>

请注意,soapenv前缀的命名空间名称是我编写的名称;该命名空间引用的模式文档complex-default.2.xsd是一个简单的占位符,旨在提供模式片段中使用的命名空间中两个属性的无约束定义:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://example.com/soapenv"
           elementFormDefault="qualified"> 
  <xs:attribute name="actor" type="xs:anyURI"/>
  <xs:attribute name="mustUnderstand" type="xs:boolean"/>
</xs:schema>

问题可能在于您的SOAP工具,而不在于您的XSD架构文档。