Python 在单个xmlns定义中使用XML-双URI,是否有效?

Python 在单个xmlns定义中使用XML-双URI,是否有效?,python,xml,xml-namespaces,elementtree,Python,Xml,Xml Namespaces,Elementtree,我有一些XML具有如下xmlns声明: <dc:record xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mods="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/

我有一些XML具有如下xmlns声明:

<dc:record xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mods="http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd">
如果我删除xmlns:mods声明中的两个URI中的一个,它的解析就可以了


因此,知道xmlns元素是用来帮助人工解析的,而不是专门用来延迟解析的,这是对XML的真正限制(在xmlns名称空间声明中只有一个URI),还是lxml-etree解析器过于热心地强制执行

我认为lxml.etree在这里做的事情是正确的

根据,名称空间声明属性的值必须是“引用(标识名称空间的名称空间名称)或空字符串”


您的示例具有属性值
”http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd“
,它不是有效的IRI(例如,冒号位于错误的位置)。

我认为lxml.etree在这里做的事情是正确的

根据,名称空间声明属性的值必须是“引用(标识名称空间的名称空间名称)或空字符串”


您的示例具有属性值
”http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd“
,它不是有效的IRI(例如冒号位于错误的位置)。

名称空间名称是否必须是有效的URI是一个棘手的问题。当然,你这里的东西是错的;但解析器是否“过于热心”则是另一回事

namespaces 1.1规范在第8节中说,“处理器必须报告违反命名空间良好格式的行为,但不需要检查命名空间名称是否合法。”


实际上,大多数解析器都不会进行这种检查,一旦大多数软件产品对在规范中强制执行某一规定持宽容态度,那么强制执行该规定的软件就开始不受用户欢迎。

名称空间名称是否必须是有效URI的问题是一个棘手的问题。当然,你这里的东西是错的;但解析器是否“过于热心”则是另一回事

namespaces 1.1规范在第8节中说,“处理器必须报告违反命名空间良好格式的行为,但不需要检查命名空间名称是否合法。”


实际上,大多数解析器都不会进行这种检查,一旦大多数软件产品对在规范中强制执行某一规定持宽容态度,那么强制执行该规定的软件就开始不受用户欢迎。

一个挑剔的问题:
xmlns
不是为人类设计的——它是实际的名称空间,名称空间必须是URI(可遵从或不可遵从). 这是人类的前缀。@FrancisAvila啊,很好,谢谢。考虑一下我的NIT,选择一个NITCOPY:<代码> XMLNS 不属于人类——它是实际的命名空间,命名空间必须是URI(可删除的或不可撤销的)。这是人类的前缀。@FrancisAvila啊,很好,谢谢。考虑一下我的缺点,我倾向于同意。我欣赏你的想法。获得外部/专家对这些事情的看法总是很有用的。谢谢,我倾向于同意。我欣赏你的想法。获得外部/专家对这些事情的看法总是很有用的。谢谢。回答得很好,谢谢。我想在这方面,两者都是正确的。解析器正在完成它的工作,并且声明(IRI的形式)符合通用约定。这是一个很好的答案,谢谢。我想在这方面,两者都是正确的。解析器正在完成它的工作,并且声明(IRI的形式化)符合通用约定。
lxml.etree.XMLSyntaxError: xmlns:mods: 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-0.xsd' is not a valid URI, line 6, column 63