您唯一需要做的就是xmlns="http://www.w3.org/XML/1998/namespace"
从FictionBookLang.xsd中删除,因为这是唯一的罪魁祸首:
该集合的作者很可能希望确保 xml:lang 属性可供人们使用。这不是正确的方法,但它仍然可以在某些情况下工作。
通常这是以不同的方式完成的。如果您的 XSD 感知 XML 处理器是“智能的”,那么应该像这样进行这样的导入,即,而不是
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="FictionBookLang.xsd"/>
它应该是:
<xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
这称为悬空外部参考;“智能”XSD 处理器知道如何将位置解析为众所周知的命名空间(当然,http://www.w3.org/XML/1998/namespace就是其中之一)。
这是使用悬空导入后集合的样子;xml.xsd 是由处理器自动添加的,它应该是此处列出的副本的副本。
换句话说,通常 FictionBookLand.xsd 甚至不应该是编译的一部分。特别是,如果您将这些 XSD 与正确引用 xml:lang 属性的其他 XSD 组合在一起,那么您将收到重复的属性声明错误。
无论如何,如果您仅删除所描述的属性,则一切都有效;从那里,您可以构建一个示例 XML - XSD 否则很好。我生成的样本很大,我只发布前几行......
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<FictionBook xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:genre="http://www.gribuser.ru/xml/fictionbook/2.0/genres" xmlns="http://www.gribuser.ru/xml/fictionbook/2.0">
<stylesheet type="type1">stylesheet1</stylesheet>
<description>
<title-info>
<genre match="100">architecture</genre>
<author>
<first-name xml:lang="en">first-name1</first-name>
<middle-name xml:lang="en">middle-name1</middle-name>
<last-name xml:lang="en">last-name1</last-name>
<nickname xml:lang="en">nickname1</nickname>
<home-page>home-page1</home-page>
<home-page>home-page1</home-page>
<email>email1</email>
<email>email1</email>
</author>
<book-title xml:lang="en">book-title1</book-title>
<annotation id="ID1" xml:lang="en">