2015-06-18 6 views
5

Desidero eseguire la convalida dello schema utilizzando un file XSD. Quando ho importare il file XSD a Eclipse, senza correre il classe di convalida, ho il seguente errore:src-resolve: Impossibile risolvere il nome "ds: Signature" in un componente "dichiarazione elemento"

src-resolve: Cannot resolve the name 'ds:Signature' to an 'element declaration' component

Sono genere di nuovo a XML vs processo di convalida XSD. Anche se ho cercato domande simili su google, non sono riuscito a capire cosa c'è che non va.

Il file XSD è la seguente:

<?xml version="1.0" encoding="UTF-8"?> 
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xerces="http://xerces.apache.org" 
     xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
     xmlns:abc="http://abc.123.com" targetNamespace="http://abc.123.com" 
     xmlns:xades141="http://uri.etsi.org/01903/v1.4.1#" elementFormDefault="qualified" 
     attributeFormDefault="unqualified"> 
     <xs:import namespace="http://uri.etsi.org/01903/v1.3.2#" schemaLocation="XAdES.xsd"/> 
     <xs:import namespace="http://uri.etsi.org/01903/v1.4.1#" schemaLocation="XAdESv141.xsd"/> 
     <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/> 
    <xs:complexType name="headerType"> 
     <xs:sequence> 
      <xs:element name="doorNumber" type="xs:int"/> 
      <xs:element ref="ds:Signature"/> 
     </xs:sequence> 
    </xs:complexType> 

Come dovrei modificare il XSD per correggere questo errore?

+0

Um ... Prendi il 'ds:' fuori dal 'ref', o aggiungi uno schema per' ds' come hai 'xs'. (Devi leggere in realtà sia il messaggio di errore che l'XSD. Tre righe in alto.) –

+0

forse l'elemento Signature non esiste nello schema "xmldsig-core-schema.xsd". si noti che xml è case sensitive. – Kachna

risposta

6

Se avete xmldsig-core-schema.xsd nella stessa directory del XSD, e se è la stessa come this XSD, allora non dovrebbe essere sempre un errore su un fallimento per risolvere ds:Signature.

Pertanto, ho il sospetto che l'importazione sta fallendo, e che ti manca o ignorare un avvertimento come la seguente:

[Warning] try.xsd:9:56: schema_reference.4: Failed to read schema document 'xmldsig-core-schema.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema> .

Prova questa XSD come un test; carica direttamente dal URL per xmldsig-core-schema.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:ds="http://www.w3.org/2000/09/xmldsig#" 
      xmlns:abc="http://abc.123.com" 
      targetNamespace="http://abc.123.com" 
      elementFormDefault="qualified" 
      attributeFormDefault="unqualified"> 
    <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" 
      schemaLocation="http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"/> 
    <xs:complexType name="headerType"> 
    <xs:sequence> 
     <xs:element name="doorNumber" type="xs:int"/> 
     <xs:element ref="ds:Signature"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Ho testato il XSD sopra e ha scoperto che elimina l'errore risoluzione che si stavano vedendo.

+1

l'aggiornamento della posizione dello schema delle firme con l'URL sembra funzionare. Non ho più l'errore. Grazie mille! – bsel

1

In alternativa è possibile memorizzare nella cache localmente la xmldsig-core-schema.xsd, metterlo nella stessa directory del vostro schema XSD, uno poi lasciate che il vostro originale

<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/> 

Questo risolverà il problema di importazione di un file dal sito W3C e risparmia tempo di esecuzione.

Problemi correlati