你需要做的唯一一件事就是从FictionBookLang.xsd删除xmlns="http://www.w3.org/XML/1998/namespace"
,因为这是唯一的罪魁祸首:
设定的作者很可能想确保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是由处理器自动添加的,它应该是here列出的副本。
换句话说,通常FictionBookLand.xsd甚至不应该是编译的一部分。特别是,如果您将这些XSD与其他正确引用xml:lang属性的XSD组合在一起,那么您将得到重复的属性声明错误。
无论如何,如果你只删除所描述的属性,所有变得有效;从那里,你可以建立一个示例XML - XSDs很好。我已经生成的样本是巨大的,我只发布第一对几行...
<?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">
这个问题实际上与http://gribuser.ru/xml/fictionbook/2.0/xsd/FictionBookLang。 xsd。你会看到一个问题,只是试图在浏览器中显示它。 –
和FYI我发现这通过尝试使用.NET Framework类复制您的问题。 'Xml.Schema.XmlSchema.Read(XmlReader.Create(“http://gribuser.ru/xml/fictionbook/2.0/xsd/FictionBookLang.xsd”),Nothing)'重现错误。 –
我知道这是因为FictionBookLang.xsd,但仍然无法弄清楚如何解决它。 – thorn