2016-03-30 11 views
6

Sto provando a utilizzare xmllint per verificare il mio lavoro durante lo sviluppo di uno schema XSD i.e. XML Schema di base. Tuttavia mi sta dando un erroreErrore di convalida xmllint "Nessun DTD trovato" durante l'utilizzo di XSD

Convalida non riuscita: nessuna DTD trovata.

Cosa sto sbagliando?

mio comando xmllint:

xmllint --noout --valid --schema simple.xsd lucas-basic.xml 
lucas-basic.xml:5: validity error : Validation failed: no DTD found ! 
     > 
     ^
lucas-basic.xml validates 

test file XSD:

<?xml version = "1.0" encoding = "UTF-8"?> 
<!--Generated by XML Authority. Conforms to w3c http://www.w3.org/2001/XMLSchema--> 
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"> 
     <xsd:element name = "vehicles"> 
       <xsd:complexType> 
         <xsd:sequence> 
           <xsd:element name = "nickname" type = "xsd:string" maxOccurs = "unbounded"/> 
         </xsd:sequence> 
       </xsd:complexType> 
     </xsd:element> 

test file XML:

<?xml version="1.0"?> 
<vehicles 
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation = "http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd" 
     > 
     <nickname>Bog Hopper</nickname> 
     <nickname>Wee Beastie</nickname> 
     <nickname>Count Zero</nickname> 
</vehicles> 

L'URL a xsi: noNamespaceSchemaLocation fa restituire il XSD sopra. Inoltre, ho scaricato il file xsd e l'ho inserito nella directory corrente come misura aggiuntiva, ma questo non sembrava aver cambiato nulla.

+0

Ora che funziona, dovrei commentare che l'utilizzo di un file locale o la specifica di uno schema remoto funziona altrettanto bene, ad es. --schema simple.xsd OR --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd – Tristan

risposta

10

--valid è per DTD, non XSD.

Questo funziona per voi, invece:

xmllint --noout --schema http://lucas.ucs.ed.ac.uk/xml-schema/xmlns/simple.xsd lucas-basic.xml 
+0

Sembra funzionare grazie! Significa che un documento scritto usando un XSD piuttosto che un DTD non è tecnicamente un XML valido? – Tristan

+3

Haha, no, significa che la scelta dei nomi degli switch da riga di comando era imperfetta. – kjhughes

-1

Il tentativo OP e risposta accettata "convalidare" la XSD testando contro un file di esempio. Per convalidare il file XSD contro la specifica XSD, il comando può essere utilizzato:

xmllint --noout --schema http://www.w3.org/2001/XMLSchema.xsd my_schema.xsd 

... e per v1.1 lo schema è https://www.w3.org/2009/XMLSchema/XMLSchema.xsd

NOTA: lo schema v1.0 ha alcune qualifiche in cima allo schema della struttura normativa, quindi è possibile che venga utilizzato un altro file, ma questo ha funzionato bene per me.

Problemi correlati