XML文档赢得';t验证到XSD
我正在尝试学习XML,我在网上找到了一个XML模式,并尝试制作了一个实例文档。由于某种我无法理解的原因,我的文档无法验证到模式。有人能指出我的错误吗 错误消息:原因:第2行错误:cvc elt。1:找不到 元素“movies”的声明 文档:XML文档赢得';t验证到XSD,xml,xsd,xml-validation,Xml,Xsd,Xml Validation,我正在尝试学习XML,我在网上找到了一个XML模式,并尝试制作了一个实例文档。由于某种我无法理解的原因,我的文档无法验证到模式。有人能指出我的错误吗 错误消息:原因:第2行错误:cvc elt。1:找不到 元素“movies”的声明 文档: <movies> <movie> <title>The Revenant</title> <length>120</length>
<movies>
<movie>
<title>The Revenant</title>
<length>120</length>
<year>2015</year>
<cast>
<role ref="Lead">
</role>
</cast>
</movie>
<person id="Leo">
<name>Leonardo DiCaprio</name>
<birth>1982-12-13</birth>
</person>
</movies>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://movies.example"
targetNamespace="http://movies.example"
elementFormDefault="qualified">
<element name="movies">
<complexType>
<sequence>
<element ref="m:movie" minOccurs="0" maxOccurs="unbounded"/>
<element ref="m:person" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<unique name="movies-unique">
<selector xpath="m:movie"/>
<field xpath="m:title"/>
<field xpath="m:year"/>
</unique>
<key name="cast-key">
<selector xpath="m:person|m:star"/>
<field xpath="@id"/>
</key>
<keyref refer="m:cast-key" name="cast-keyref">
<selector xpath=".//m:role"/>
<field xpath="@ref"/>
</keyref>
</element>
<element name="movie">
<complexType>
<sequence>
<element name="title" type="string"/>
<element name="length" type="nonNegativeInteger"/>
<element name="year" type="gYear"/>
<element name="cast">
<complexType>
<sequence maxOccurs="unbounded">
<element name="role">
<complexType mixed="true">
<attribute name="ref" type="NCName"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
<element name="person" type="m:personType"/>
<complexType name="personType">
<sequence>
<element name="name" type="string"/>
<element name="birth" type="date"/>
</sequence>
<attribute name="id" type="NCName"/>
</complexType>
<element name="star" substitutionGroup="m:person">
<complexType>
<complexContent>
<extension base="m:personType">
<sequence maxOccurs="unbounded">
<element name="award" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
</element>
</schema>
复仇者
120
2015
莱昂纳多·迪卡普里奥
1982-12-13
模式:
<movies>
<movie>
<title>The Revenant</title>
<length>120</length>
<year>2015</year>
<cast>
<role ref="Lead">
</role>
</cast>
</movie>
<person id="Leo">
<name>Leonardo DiCaprio</name>
<birth>1982-12-13</birth>
</person>
</movies>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://movies.example"
targetNamespace="http://movies.example"
elementFormDefault="qualified">
<element name="movies">
<complexType>
<sequence>
<element ref="m:movie" minOccurs="0" maxOccurs="unbounded"/>
<element ref="m:person" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<unique name="movies-unique">
<selector xpath="m:movie"/>
<field xpath="m:title"/>
<field xpath="m:year"/>
</unique>
<key name="cast-key">
<selector xpath="m:person|m:star"/>
<field xpath="@id"/>
</key>
<keyref refer="m:cast-key" name="cast-keyref">
<selector xpath=".//m:role"/>
<field xpath="@ref"/>
</keyref>
</element>
<element name="movie">
<complexType>
<sequence>
<element name="title" type="string"/>
<element name="length" type="nonNegativeInteger"/>
<element name="year" type="gYear"/>
<element name="cast">
<complexType>
<sequence maxOccurs="unbounded">
<element name="role">
<complexType mixed="true">
<attribute name="ref" type="NCName"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
<element name="person" type="m:personType"/>
<complexType name="personType">
<sequence>
<element name="name" type="string"/>
<element name="birth" type="date"/>
</sequence>
<attribute name="id" type="NCName"/>
</complexType>
<element name="star" substitutionGroup="m:person">
<complexType>
<complexContent>
<extension base="m:personType">
<sequence maxOccurs="unbounded">
<element name="award" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
</element>
</schema>
以下更新的XML将针对您的XSD成功验证:
<movies xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://movies.example"
xsi:schemaLocation="http://movies.example try.xsd">
<movie>
<title>The Revenant</title>
<length>120</length>
<year>2015</year>
<cast>
<role ref="Leo"/>
</cast>
</movie>
<person id="Leo">
<name>Leonardo DiCaprio</name>
<birth>1982-12-13</birth>
</person>
</movies>
复仇者
120
2015
莱昂纳多·迪卡普里奥
1982-12-13
需要更新:
<movies>
<movie>
<title>The Revenant</title>
<length>120</length>
<year>2015</year>
<cast>
<role ref="Lead">
</role>
</cast>
</movie>
<person id="Leo">
<name>Leonardo DiCaprio</name>
<birth>1982-12-13</birth>
</person>
</movies>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:m="http://movies.example"
targetNamespace="http://movies.example"
elementFormDefault="qualified">
<element name="movies">
<complexType>
<sequence>
<element ref="m:movie" minOccurs="0" maxOccurs="unbounded"/>
<element ref="m:person" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<unique name="movies-unique">
<selector xpath="m:movie"/>
<field xpath="m:title"/>
<field xpath="m:year"/>
</unique>
<key name="cast-key">
<selector xpath="m:person|m:star"/>
<field xpath="@id"/>
</key>
<keyref refer="m:cast-key" name="cast-keyref">
<selector xpath=".//m:role"/>
<field xpath="@ref"/>
</keyref>
</element>
<element name="movie">
<complexType>
<sequence>
<element name="title" type="string"/>
<element name="length" type="nonNegativeInteger"/>
<element name="year" type="gYear"/>
<element name="cast">
<complexType>
<sequence maxOccurs="unbounded">
<element name="role">
<complexType mixed="true">
<attribute name="ref" type="NCName"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
<element name="person" type="m:personType"/>
<complexType name="personType">
<sequence>
<element name="name" type="string"/>
<element name="birth" type="date"/>
</sequence>
<attribute name="id" type="NCName"/>
</complexType>
<element name="star" substitutionGroup="m:person">
<complexType>
<complexContent>
<extension base="m:personType">
<sequence maxOccurs="unbounded">
<element name="award" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
</element>
</schema>
xmlns=”http://movies.example“
)以匹配
XSD的targetNamespace
role/@ref
值更改为“Leo”
,以满足cast keyref
键
XSD的约束值得注意的是,xsi:schemaLocation属性通常不是必需的,尽管XMLSpy和其他工具经常插入它。唯一需要的更改是添加默认命名空间声明:
<movies xmlns="http://movies.example">
<movie>
<title>The Revenant</title>
<length>120</length>
<year>2015</year>
<cast>
<role ref="Leo"/>
</cast>
</movie>
<person id="Leo">
<name>Leonardo DiCaprio</name>
<birth>1982-12-13</birth>
</person>
</movies>
复仇者
120
2015
莱昂纳多·迪卡普里奥
1982-12-13
(为了让OP的XML工具开心,xsi:schemaLocation可能仍然是必需的)(a)没有人说需要xsi:schemaLocation
;(b) 您关于“唯一需要的更改是添加默认名称空间声明”的陈述是不正确的;如我所知,需要进行两次更新。