问题描述
我尝试使用 XSD 文件验证我的 XML 文件,但收到以下错误消息:
I tried validating my XML file with a XSD file but I get the following error message:
[错误]:cvc-complex-type.2.3:元素段落"不能有字符 [children],因为类型的内容类型是 element-only
这(如果我理解正确的话)意味着复杂类型不能将简单和复杂类型元素的组合作为子元素.
Which (if i am understanding it correctly) means a complex type cannot have a combination of simple and complex typed elements as children.
但是我该如何解决这个问题?我还是个新手,所以解决方案可能很简单?
But how do I fix this? I'm still kinda new to this, so the solution could be simple?
我的代码如下所示:
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="biography">
<xs:complexType>
<xs:sequence>
<xs:element name="paragraph" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element name="first_name" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="last_name" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="emphasize" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
<xs:element name="profession" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
<xs:element name="date" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="month" type="xs:string"></xs:element>
<xs:element name="day" type="xs:int"></xs:element>
<xs:element name="year" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="definition" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="term" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML:
<biography>
<paragraph>
<name><first_name>Alex</first_name> <last_name>Turing</last_name></name>
was one of the first people to truly deserve the name <emphasize>computer
scientist</emphasize>. Although his contributions to the fields are too
numerous to lst, his best-known are the famous <emphasize>Turing
Test</emphasize> and <emphasize>Turing Machine</emphasize>.
</paragraph>
<definition>The <term>Turing Test</term> is to this day the standard test
for determining whether a computer is truly intelligent. This test yet
has to be passed.</definition>
<definition>A <term>Turing Machine</term> is an abstract finite state
automaton with infinite memory that can be proven equivalent to any other
finite state automaton with arbitrarily large memory. Thus what is true
for one Turing machine is true for all Turing machines no matter how
implemented.</definition>
<paragraph>
<name><last_name>Turing</last_name></name> was also an accomplished
<profession>mathematician</profession> and
<profession>cryptographer</profession>. His assistance was crucial in
helping the Allies decode the German Enigma cipher. He committed suicide
on <date><month>June</month> <day>7</day>, <year>1954</year></date>
after being convicted of homosexuality and forced to take female hormone
injections.
</paragraph>
</biography>
推荐答案
这正是混合内容的目的:
This is precisely the purpose of mixed content:
<xs:element name="paragraph" maxOccurs="unbounded">
<xs:complexType mixed="true">
还有:
<xs:element name="definition" maxOccurs="unbounded">
<xs:complexType mixed="true">
请注意,鉴于您的 XML,您可能还希望 paragraph
和 definition
位于 xs:choice macOccurs="unbounded"
中.
Note that you also probably want paragraph
and definition
to be in a xs:choice macOccurs="unbounded"
given your XML.
这是您的 XSD 更新了所需的所有更改,以便您的 XML 有效:
Here's your XSD updated with all changes needed so that your XML will be valid:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="biography">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="paragraph">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element name="first_name" type="xs:string" minOccurs="0"></xs:element>
<xs:element name="last_name" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="emphasize" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
<xs:element name="profession" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
<xs:element name="date" minOccurs="0">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="month" type="xs:string"></xs:element>
<xs:element name="day" type="xs:int"></xs:element>
<xs:element name="year" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="definition">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="term" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
这篇关于元素不能有字符 [children],因为该类型的内容类型是 element-only的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!