为什么Visual Studio不喜欢这个XML模式?(前缀''无法映射到为"xml"或"xmlns"保留的命名空间名称)

tho*_*rn̈ 8 xsd xml-namespaces visual-studio visual-studio-2012 fb2

FictionBook(也称为FB2)是一种基于XML的电子书格式.它的架构可以在这里找到:

http://gribuser.ru/xml/fictionbook/2.0/xsd/

但是,当我下载此架构并尝试在Visual Studio 2012中打开它时,我遇到了一堆错误,第一个错误是:前缀''无法映射到为"xml"或"xmlns"保留的命名空间名称.第5行,第118位.E:\ dev\fb2\FictionBook2.xsd.

架构真的无效吗?如果是这样,很多软件如何使用它来验证FB2文件?是否有一种简单的方法来修改架构以使VS快乐?

Pet*_*dea 5

你唯一需要做的就是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"/>
Run Code Online (Sandbox Code Playgroud)

它应该是:

<xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
Run Code Online (Sandbox Code Playgroud)

这被称为悬空外部参考; "智能"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">
Run Code Online (Sandbox Code Playgroud)