Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用xsd的子级中,将xml属性限制为仅等于特定值1次_Xml_Xsd - Fatal编程技术网

在使用xsd的子级中,将xml属性限制为仅等于特定值1次

在使用xsd的子级中,将xml属性限制为仅等于特定值1次,xml,xsd,Xml,Xsd,我想对.xsd模式中的属性实现一个限制 我有default属性(布尔值),它在所有子级中应该有正好1true值。属性不是必需的,匹配它的意思应该与falsevalue相同 有效: 一个 两个 三 有效: 一个 两个 三 无效: 一个 两个 三 无效:(默认值为true的元素不应至少为1) 一个 两个 三 那么问题是: 是否可以使用.xsd实现这样的限制 如果是,如何操作?如果您使用的是XML模式1.1,则可以通过XPath 2.0使用xs:assert如下(未测试): 如果您

我想对.xsd模式中的属性实现一个限制

我有
default
属性(布尔值),它在所有子级中应该有正好1
true
值。属性不是必需的,匹配它的意思应该与
false
value相同

有效:


一个
两个
三
有效:


一个
两个
三
无效:


一个
两个
三
无效:(默认值为true的元素不应至少为1)


一个
两个
三
那么问题是: 是否可以使用.xsd实现这样的限制


如果是,如何操作?

如果您使用的是XML模式1.1,则可以通过XPath 2.0使用xs:assert如下(未测试):



如果您使用的是XML Schema 1.0,您不能在模式中表达这样的约束,但可以在应用程序级别使用或检查它。

我认为您不能在纯XML Schema 1.0中表达这一点,您需要XML Schema 1.1断言或类似schematron的东西。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.1">
  <xs:element name="Parent">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Child" maxOccurs="unbounded">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="default" type="xs:boolean">
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:assert test="count('./Child[@default = true]') = 1"/>
    </xs:complexType>
  </xs:element>
</xs:schema>