xml - 无法使用 XML 架构和 Perl (XML::LibXML) 验证 XML

标签 xml perl xsd xml-libxml

xml:

<?xml version="1.0"?>
<workers xmlns="http://www.zoo.com" 
         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
     xs:schemaLocation="http://www.zoo.com worker.xsd">
<impiegato>
    <username>mario</username>
    <password>de2f15d014d40b93578d255e6221fd60</password>
    <nome>Mario</nome>
    <sesso>F</sesso>
    <eta>23</eta>
</impiegato>
<impiegato>
    <username>maria</username>
    <password>maria</password>
    <nome>Mariaaa</nome>
    <sesso>F</sesso>
    <eta>443</eta>
</impiegato>
<impiegato>
    <username>mirco</username>
    <password>mirco</password>
    <nome>Mirco</nome>
    <sesso>F</sesso>
    <eta>27</eta>
</impiegato>
<impiegato>
    <username>martina</username>
    <password>martina</password>
    <nome>Martina</nome>
    <sesso>M</sesso>
    <eta>26</eta>
</impiegato>
<manager>
    <username>marco</username>
    <password>marco</password>
    <nome>Marco</nome>
    <sesso>M</sesso>
    <eta>25</eta>
</manager>
<manager>
    <username>giovanna</username>
    <password>zxVcGz0BPdHkY</password>
    <nome>Giovanna</nome>
    <sesso>F</sesso>
    <eta>24</eta>
</manager>
<manager>
<username>lucanervi</username>
    <password>zxePlNSDQjsxg</password>
    <nome>Luca Nervi</nome>
    <sesso>M</sesso>
    <eta>23</eta>
</manager>
</workers>

XML 模式:

<?xml version="1.0"?>
<xs:schema
 xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns:zoo="http://www.zoo.com"
 targetNamespace="http://www.zoo.com"
 elementFormDefault="qualified">

<xs:element name="workers" type="zoo:Tworkers"/>

<xs:complexType name="Tworkers">
<xs:sequence  maxOccurs="unbounded">
    <xs:element name="impiegato" type ="zoo:Timpiegato" minOccurs="0" />
    <xs:element name="manager" type ="zoo:Tmanager" minOccurs="0"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="Timpiegato">
<xs:sequence>
    <xs:element name="username" type ="xs:string"/>
    <xs:element name="password" type ="xs:string"/>
    <xs:element name="nome" type ="xs:string"/>
    <xs:element name="sesso" type ="xs:string"/>
    <xs:element name="eta" type ="xs:integer"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="Tmanager">
  <xs:sequence>
    <xs:element name="username" type ="xs:string"/>
    <xs:element name="password" type ="xs:string"/>
    <xs:element name="nome" type ="xs:string"/>
    <xs:element name="sesso" type ="xs:string"/>
    <xs:element name="eta" type ="xs:integer"/>
  </xs:sequence>
</xs:complexType>

</xs:schema>

当我使用 XML::LibXML::Schema 验证 xml 时,我得到:

../xml/workers.xml:0: Schemas validity error : Element 'impiegato': This element is not expected. Expected is one of ( {http://www.zoo.com}impiegato, {http://www.zoo.com}manager ).

Perl 代码:

my $parser = XML::LibXML->new;
my $doc = $parser->parse_file("../xml/workers.xml");
my $xmlschema = XML::LibXML::Schema->new( location => "../xml/worker.xsd" );
$xmlschema->validate($doc);

我认为这是命名空间的问题,但不知道该怎么办。

附录:

我试图从 XML 架构中删除 elementFormDefault="qualified"属性。现在我有相反的错误:

../xml/workers.xml:0: Schemas validity error : Element '{http://www.zoo.com}impiegato':
This element is not expected. Expected is one of ( impiegato, manager ).

最佳答案

用 Saxon 验证这一点,它对我有用。我认为您运行验证的方式一定有误。

关于xml - 无法使用 XML 架构和 Perl (XML::LibXML) 验证 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11064258/

相关文章:

html - XSLT 按属性值排序

JAVA SAX解析成hash map并打印出来

mysql - 为什么 DBD::mysql 在 Perl Package Manager 4.19 Perl Version 5.20 中不退出?

perl - 如何在读取而不是写入深度散列中不存在的键时让 Perl 死掉?

linux - 是否有用于将 xml 模式转换为 linux 数据库模式的开源工具?

.net - XSLT 转换日期时间到日期格式

xml - xml中的 'base'属性是什么?

xml - 如何编辑 xsl 文件,以便它根据某些检查加载不同的模板?

ios - 用于在 iOS 中解析的 JSON 和 XML 包装器

perl 排序问题