错误 s4s-att-not-allowed:属性 'type' 不能出现在元素 'element' 中
ERROR s4s-att-not-allowed: Attribute 'type' cannot appear in element 'element'
我有一个 XML 文件需要阅读,它看起来类似于:
<container time="">
<level1 id="1:0:0" name="Some Name">level1 Description
<level2 id="1:1:0" name="Some Name">level2 Description
<level3 id="1:1:1" name="Some Name">level3 Description</level3>
<level3 id="1:1:2" name="Some Name">level3 Description</level3>
</level2>
</level1>
在构建时,我使用 xjc
为我生成 类。
<javac includeantruntime="false" srcdir="${build.dir}/configuration_src"
destdir="${build.dir}/generated_jars"
classpathref="example.jars"
debug="on">
<include name="**"/>
</javac>
我 运行 遇到的问题是 <level1>
有一个描述,但它也有 0 to many
<level2>
。如何设置我的模式以便处理描述?
<xs:schema targetNamespace="http://example.com/container" xmlns="http://example.com/container" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="container">
<xs:complexType>
<xs:sequence>
<xs:element ref="level1" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="level1">
<xs:complexType>
<xs:sequence>
<xs:element ref="level2" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level2">
<xs:complexType>
<xs:sequence>
<xs:element ref="level3" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level3">
<xs:complexType>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
例如,当我尝试将 type="xs:string"
添加到我的任何 <xs:element>
时
<xs:element ref="level1" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
抱怨[ERROR] s4s-att-not-allowed: Attribute 'type' cannot appear in element 'element'.
错误是不能在同一个 <xs:element>
元素上使用 @ref 和 @type。
一个<xs:element>
既可以是一个元素声明,在这种情况下它有一个@name属性,也可以有一个@type属性;或者它是对元素声明的引用,在这种情况下它有一个@ref 属性但没有@type。类型属于元素声明;如果您指的是在别处声明的元素,则类型与该元素声明一起使用,而不是与引用一起使用。
level3 元素是一个具有简单内容的复杂类型。你声明它的方式通常是
<xs:element name="level3">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
level1和level2的内容比较难。它们同时具有文本节点和元素节点子节点。您可以在 XSD 中描述这一点的唯一方法是使用 "mixed content" 类型,但混合内容类型主要是为叙述性文本文档设计的,它们不能限制文本的位置或形式。它可能看起来像这样:
<xs:element name="level2">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="level3" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
我有一个 XML 文件需要阅读,它看起来类似于:
<container time="">
<level1 id="1:0:0" name="Some Name">level1 Description
<level2 id="1:1:0" name="Some Name">level2 Description
<level3 id="1:1:1" name="Some Name">level3 Description</level3>
<level3 id="1:1:2" name="Some Name">level3 Description</level3>
</level2>
</level1>
在构建时,我使用 xjc
为我生成 类。
<javac includeantruntime="false" srcdir="${build.dir}/configuration_src"
destdir="${build.dir}/generated_jars"
classpathref="example.jars"
debug="on">
<include name="**"/>
</javac>
我 运行 遇到的问题是 <level1>
有一个描述,但它也有 0 to many
<level2>
。如何设置我的模式以便处理描述?
<xs:schema targetNamespace="http://example.com/container" xmlns="http://example.com/container" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="container">
<xs:complexType>
<xs:sequence>
<xs:element ref="level1" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="level1">
<xs:complexType>
<xs:sequence>
<xs:element ref="level2" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level2">
<xs:complexType>
<xs:sequence>
<xs:element ref="level3" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="level3">
<xs:complexType>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>
例如,当我尝试将 type="xs:string"
添加到我的任何 <xs:element>
时
<xs:element ref="level1" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
抱怨[ERROR] s4s-att-not-allowed: Attribute 'type' cannot appear in element 'element'.
错误是不能在同一个 <xs:element>
元素上使用 @ref 和 @type。
一个<xs:element>
既可以是一个元素声明,在这种情况下它有一个@name属性,也可以有一个@type属性;或者它是对元素声明的引用,在这种情况下它有一个@ref 属性但没有@type。类型属于元素声明;如果您指的是在别处声明的元素,则类型与该元素声明一起使用,而不是与引用一起使用。
level3 元素是一个具有简单内容的复杂类型。你声明它的方式通常是
<xs:element name="level3">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
level1和level2的内容比较难。它们同时具有文本节点和元素节点子节点。您可以在 XSD 中描述这一点的唯一方法是使用 "mixed content" 类型,但混合内容类型主要是为叙述性文本文档设计的,它们不能限制文本的位置或形式。它可能看起来像这样:
<xs:element name="level2">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="level3" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"></xs:attribute>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType>
</xs:element>