当前位置: 首页 > 知识库问答 >
问题:

基于属性值的子元素是否需要XSD可选vs?

沃侯林
2023-03-14

我有一个这样的xml结构。我想做一个模式(XSD)验证,使

 <Request>
     <DataRequest Name="Bob"></DataRequest>
     <DataRequest Name="Rob"></DataRequest>  
     <DataRequest Name="Smith"></DataRequest>  
     <DataRequest Name="Andy"></DataRequest>  
 </Request>

我已经对可能的名称属性值进行了验证,但无法将某些值设置为可选值:

<xs:element maxOccurs="unbounded" name="DataRequest" >
  <xs:complexType>
    <xs:attribute name="Name"  use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="Bob" />
          <xs:enumeration value="Rob"/>
          <xs:enumeration value="Andy"/>
          <xs:enumeration value="Smith/>
        </xs:restriction>
      </xs:simpleType>
   </xs:attribute>
  </xs:complexType>
</xs:element>

共有1个答案

仇炜
2023-03-14
匿名用户

可选性不能依赖于XSD 1.0中的属性值,但如果重新设计XML,

<Request>
    <Bob></Bob>
    <Rob></Rob>  
    <Smith></Smith>  
    <Andy></Andy>  
</Request>

您可以在中简单地使用minOccurs=“0”来指定可以省略Bob和Rob:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:element name="Request">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Bob" minOccurs="0"/>
        <xs:element name="Rob" minOccurs="0"/>
        <xs:element name="Smith"/>
        <xs:element name="Andy"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

您可以使用xs: assert根据属性值指定可选性/需求性。

这里,我们断言其他枚举是必需的,留下Bob和Rob是可选的:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" 
           elementFormDefault="qualified"
           vc:minVersion="1.1">
  <xs:element name="Request">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="DataRequest" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="Name" use="required">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:enumeration value="Bob"/>
                  <xs:enumeration value="Rob"/>
                  <xs:enumeration value="Andy"/>
                  <xs:enumeration value="Smith"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:assert test="DataRequest[@Name='Smith']"/>
      <xs:assert test="DataRequest[@Name='Andy']"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

 类似资料:
  • 我对xslt有这个问题。样式表中有一个名为misctable的表,它被放在一个变量miscTables中。例如在节点 id="_384PLATE"具有值A1、A2、B1。当我标记并将其与xml进行比较时,我需要保存R[@i=2]/C/@i属性的值。在这种情况下,我需要得到值2,3,26 xml xslt 非常感谢。

  • 我正在使用Jackson的JsonNode解析json。我的json结构如下所示(设为变量rawJson): 在Java中: 如何通过过滤属性<code>name</code>来获得特定的JsonNode元素?如果我想得到<code>值</code>大于X的JsonNode元素,怎么样?我是否可以在不遍历<code>结果</code>变量的情况下完成这些操作?

  • 我如何使用“insref”和“pref”对下面的元素进行分组,我在xslt版本1中使用了生成密钥id。 期望的结果: 这是我所拥有的。我也在使用密钥生成函数。任何想法这个xslt有什么问题。至于计数,我正在考虑获得唯一的密钥计数。

  • 我正在编写XSD来验证XML,但在验证时出现了以下错误: 输出错误 使用XML架构验证当前文件: 错误:元素'{http://www.w3.org/2001/XMLSchema-instance}Gasto':不应使用此元素。预计为(加斯托) ...我不明白这个错误 以下是我的XML示例: 下面是我的XSD示例:

  • 我有以下XML。 我在http://chris.photobooks.com/xml/default.htm上查看了它,它显示xpath无效,不确定问题出在哪里。

  • 我需要接受元素的2个属性语法: 我创建了一个能够验证第80行的xsd: 要验证第70行,我可以执行以下操作: 1/如何合并这两个语法,以便验证第70行和第80行? 2/如何避免空的fsinfo标记? 3/"fsinfo"属性可以是任何顺序 重要的是,如果存在超过“line”和“注释”属性(例如“mount_dev”,则必须存在所有相关的必需参数。(第80行验证方案) 注意:我不能更改xml文件,因