2015-06-18 17 views
5

Tôi muốn xác thực lược đồ bằng cách sử dụng tệp XSD. Khi tôi nhập tệp XSD vào Eclipse, mà không cần chạy lớp xác thực, tôi có lỗi sau:src-resolve: Không thể phân giải tên 'ds: Signature' thành thành phần 'khai báo phần tử'

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

Tôi mới dùng quy trình xác thực XML và XSD. Mặc dù tôi đã tìm kiếm các câu hỏi tương tự trên google, tôi không thể tìm ra điều gì sai ở đây.

Các tập tin XSD là như sau:

<?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> 

Làm thế nào tôi nên sửa đổi XSD để sửa lỗi này?

+0

Um ... Lấy 'ds:' ra khỏi 'ref' hoặc thêm giản đồ cho' ds' khi bạn có 'xs'. (Bạn phải thực sự đọc cả thông báo lỗi và XSD. Ba dòng lên từ phía dưới.) –

+0

có lẽ là phần tử Signature không tồn tại trong lược đồ "xmldsig-core-schema.xsd". chú ý rằng xml phân biệt chữ hoa chữ thường. – Kachna

Trả lời

6

Nếu bạn có xmldsig-core-schema.xsd trong cùng thư mục với XSD của bạn, và nếu nó cũng giống như this XSD, sau đó bạn không nên nhận được một lỗi về thất bại trong việc giải quyết ds:Signature.

Vì vậy, tôi nghi ngờ rằng lần nhập của bạn thất bại, và bạn đang thiếu hoặc phớt lờ lời cảnh báo như sau:

[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> .

Hãy thử XSD này như một thử nghiệm; nó tải trực tiếp từ địa chỉ URL cho 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> 

Tôi đã thử nghiệm XSD trên và thấy rằng nó giúp loại bỏ các lỗi độ phân giải mà bạn đang nhìn thấy.

+1

cập nhật vị trí lược đồ chữ ký với URL có vẻ hoạt động. Tôi không còn gặp lỗi nữa. Cảm ơn bạn rất nhiều! – bsel

1

Là một thay thế bạn có thể cache tại địa phương các xmldsig-core-schema.xsd, đặt nó trong cùng thư mục của giản đồ XSD của bạn, một sau đó cho phép bạn gốc

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

này sẽ giải quyết vấn đề của bạn nhập khẩu một tập tin từ trang web W3C và tiết kiệm thời gian thực hiện.

Các vấn đề liên quan