首页 > 解决方案 > XSD 架构错误 - cvc-complex-type.2.4b:不允许元素:元素设置组中的设置值

问题描述

我的 XSD 架构有问题。我不断收到标题中提到的错误。我不明白为什么它说某个元素不允许在另一个元素中使用。它不会抱怨,'accessrights'但它会抱怨'settingvalue'它们两者基本相同(只是一些基本元素;字符串和布尔值)。

有人知道它为什么抱怨吗?我正在使用Apache XMLBeans 3.0.1(来自 Windows 10 CMD)来尝试验证架构。

完整的 XSD 架构文件。

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

<!-- Define the simple elements -->
<xs:element name="creationtime" type="xs:string"/>
<xs:element name="customerkey" type="xs:string"/>
<xs:element name="dependency" type="xs:string"/>
<xs:element name="description" type="xs:string"/>
<xs:element name="enable" type="xs:boolean"/>
<xs:element name="group_id" type="xs:string"/>
<xs:element name="groupname" type="xs:string"/>
<xs:element name="iamid" type="xs:string"/>
<xs:element name="id" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="readonly" type="xs:boolean"/>
<xs:element name="settingscategory" type="xs:string"/>
<xs:element name="show" type="xs:boolean"/>
<xs:element name="specification_id" type="xs:string"/>
<xs:element name="value" type="xs:string"/>
<xs:element name="valuepack" type="xs:string"/>

<!-- Define the 'accessrights' element -->
<xs:element name="accessrights">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="id"/>
   <xs:element ref="show"/>
   <xs:element ref="readonly"/>
   <xs:element ref="enable"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<!-- Define the 'settingvalue' element -->
<xs:element name="settingvalue">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="id"/>
   <xs:element ref="specification_id"/>
   <xs:element ref="value"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<!-- Define the 'settingsgroup' element -->
<xs:element name="settingsgroup">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="group_id"/>
   <xs:element ref="groupname"/>
   <xs:element ref="accessrights" minOccurs="0"/>
   <xs:element ref="settingvalue"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<!-- Define the 'settings' element -->
<xs:element name="settings">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="id"/>
   <xs:element ref="settingscategory"/>
   <xs:element ref="name"/>
   <xs:element ref="settingsgroup" maxOccurs="unbounded"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<!-- Define the 'license' element -->
<xs:element name="license">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="id"/>
   <xs:element ref="dependency" minOccurs="0" maxOccurs="unbounded"/>
   <xs:element ref="name"/>
   <xs:element ref="creationtime" minOccurs="0"/>
   <xs:element ref="valuepack" minOccurs="0"/>
   <xs:element ref="iamid" minOccurs="0"/>
   <xs:element ref="customerkey" minOccurs="0"/>
   <xs:element ref="description" minOccurs="0"/>
   <xs:element ref="settings"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

</xs:schema>

符合模式的 XML 的示例可能如下所示

<license>
    <id>IDString</id>
    <dependency>IDStringOfOtherLicense</dependency>
    <name>LicenseName</name>
    <creationtime>2016-08-17 10:05:00</creationtime>
    <customerkey>googlemaybe</customerkey>
    <description>importantDetails</description>
    <settings>
        <id>IDString</id>
        <settingscategory>license</settingscategory>
        <name>SettingName</name>
        <settingsgroup>
            <group_id>groupIDString</group_id>
            <groupname>oldstuff</groupname>
            <settingvalue>
                <id>IDString</id>
                <specification_id>specIDString</specification_id>
                <value>true</value>
            </settingvalue>
        </settingsgroup>
    </settings>
</license>

标签: xmlapachevalidationxsdxmlbeans

解决方案


推荐阅读