在 perl 中使用多个 URI 解析 xml 名称空间时出现名称空间错误

Namespace error while parsing xml namespace with multiple URIs in perl

use XML::LibXML;

use strict;
use warnings;

my $parser = XML::LibXML->new();
my $xmldata = '<?xml version="1.0" encoding="utf-8"?><Research xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.rixml.org/2013/2/RIXML" xmlns:schemaLocation="http://www.rixml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd" xmlns:rixmldt="http://www.rixml.org/2013/2/RIXML-datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd" language="eng"></Research>';

my $respDom = $parser->parse_string($xmldata);
print $respDom;

这是我得到的错误。 XML::LibXML 不支持名称空间中的多个 URI 吗?

Error(s), warning(s):
:1: namespace error : xmlns:schemaLocation: 'http://www.rixml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd' is not a valid URI
ml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd"
                                                                                ^
:1: namespace error : xmlns:rixmldt: 'http://www.rixml.org/2013/2/RIXML-datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd' is not a valid URI
datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd"
                                                                                ^

XML 重新格式化

<?xml version="1.0" encoding="utf-8"?>
<Research
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.rixml.org/2013/2/RIXML"
    xmlns:schemaLocation="http://www.rixml.org/2013/2/RIXML http://www.rixml.org/assets/documents/schemas/RIXML-2_4.xsd"
    xmlns:rixmldt="http://www.rixml.org/2013/2/RIXML-datatypes http://www.rixml.org/assets/documents/schemas/RIXML-datatypes-2_4.xsd"
    language="eng">
</Research>

为 XML 1.0 命名空间名称提供多个 URI 是不合法的语法。很难想象你的意思

Namespaces in XML 1.0 (Third Edition) 这样说

The attribute's normalized value MUST be either a URI reference — the namespace name identifying the namespace — or an empty string