2012-06-16 1 views
1

XML:XML :: LibXML :: Schema не проверяет мой xml. Зачем?

<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> 
</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> 
    <xs:element name="impiegato" type ="zoo:Timpiegato"/> 
    <xs:element name="manager" type ="zoo:Tmanager"/> 
</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" default="-1"/> 
</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" default="-1"/> 
</xs:sequence> 
</xs:complexType> 

</xs:schema> 

код:

my $xmlschema = XML::LibXML::Schema->new(location => "../xml/worker.xsd"); 
if (eval { $xmlschema->validate($doc); } eq undef) { 
    # redirect 
} 

Я думаю, что проблема в этой части схемы:

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

потому как если я бегу

xmllint --schema worker.xsd workers.xml 

на терминале я получаю эту ошибку:

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

Есть ли альтернатива хз: последовательность, чтобы попытаться? Потому что элементы Impiegato и Managers не имеют порядка.

ответ

1

fix'd проблему меняющегося 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> 

Теперь у меня есть еще одна проблема (скорее всего на пространстве имен), задавая новый вопрос