xs:extension 导致我的元素停止强制执行其类型

The xs:extension causes my element to stop enforcing its type

我在 XSD 文件“strict”中有一个简单元素,它只接受布尔值,但是当我使用 xs:extension 时,不再强制执行该类型。

此处声明为无属性:

<xs:element name="strict" type="xs:boolean"/>

并且 xml 得到正确执行。即:

<strict>false</strict> <!-- succeeds -->
<strict>XXXXX</strict> <!-- fails    -->

并具有属性:

<xs:element name="strict"> <!-- purposely needed to remove type from this line -->
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:boolean"> <!-- the base is the same as the previous type -->
                <xs:attribute ref="operation"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

那么我这里故意做的坏事就不再强制执行了。

<strict operation="none">XXXXX</strict> <!-- succeeds...         -->
<strict operation="none">false</strict> <!-- succeeds as well... -->

我注意到,当我使用 xs:extension 时,我无法再将 type 放入我的 xs:element 并且我认为 base="xs:boolean" 会覆盖我那里, 但事实并非如此。

我的最终目标:允许 xs:element 中的属性并强制执行数据类型

注意: 我正在使用 IntelliJ XML/XSD 功能来帮助指导我,方法是使用它的内部 lint 引擎来突出显示错误。所以这可能是 IntelliJ 在到期时给出错误(或不给出错误)?非常怀疑,因为我觉得这是 XML 的一个非常基本的方面。

参考:

更新: 在@kjhughes 的帮助下 - 确定这可能是一个 IntellJ 错误。 https://youtrack.jetbrains.com/issue/IDEA-257186

你的 XSD 声明是声明 strict 元素应该有一个属性的正确方法(虽然你没有包含它的声明,所以我们无法验证它的正确性)并且有内容输入 xs:boolean.

另请参阅:

你认为这个 XML

是正确的
<strict operation="none">XXXXX</strict>

应该会失败。我已经通过一个完整的例子验证它确实失败了:

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
  <xs:element name="strict">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:boolean">
          <xs:attribute name="operation" type="xs:string"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
</xs:schema>

如果以上内容在您的验证设置中适用,请怀疑您遗漏了关于 XSD 缺失部分的错误(例如 ref="operation")。如果上述方法不起作用,请怀疑该工具或其配置。