2009-03-26 43 views
24

Tôi có tệp .xsd mà tôi sử dụng để tạo mã bằng công cụ xsd.exe từ Visual Studio. Một số thành viên của lớp là Hướng dẫn và công cụ xsd.exe đưa ra 2 cảnh báo:Cách chính xác để sử dụng loại Guid trong tệp XSD là gì?

Không gian tên 'http://microsoft.com/wsdl/types/' không có sẵn để được tham chiếu trong lược đồ này. Loại 'http://microsoft.com/wsdl/types/:guid' không được khai báo.

Loại hướng dẫn được nhận dạng vì tệp C# được tạo là hợp lệ và hoạt động. Bất cứ ai cũng biết cách loại bỏ những cảnh báo đó?

Cú pháp chính xác cho XSD được xác thực VÀ các thành viên lớp học được tạo ra như System.Guid là gì?

Trả lời

40

Cảm ơn tất cả các bạn, tôi thấy làm thế nào để loại bỏ các cảnh báo.

sysrqb cho biết, không gian tên wsdl đã bị xóa hoặc chưa từng tồn tại. Dường như công cụ xsd.exe biết định nghĩa Guid bên trong, nhưng nó không thể xác nhận hợp lệ lược đồ xsd.

boj được chỉ ra, cách duy nhất để xác thực giản đồ với Hướng dẫn trong đó, là (lại) xác định loại đó trong lược đồ. Bí quyết ở đây là thêm loại Guid vào cùng một không gian tên "http://microsoft.com/wsdl/types". Bằng cách này, xsd.exe sẽ làm hiệp hội thích hợp giữa http://microsoft.com/wsdl/types:Guid và System.Guid

tôi đã thực hiện một tập tin XSD mới cho các loại guid:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://microsoft.com/wsdl/types/" > 
    <xs:simpleType name="guid"> 
     <xs:annotation> 
      <xs:documentation xml:lang="en"> 
       The representation of a GUID, generally the id of an element. 
      </xs:documentation> 
     </xs:annotation> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

Sau đó, tôi chạy xsd.exe với cả tôi tệp xsd gốc và tệp xsd mới này:

xsd.exe myschema.xsd guid.xsd /c 
+2

Tôi đã phải sử dụng '' '' '' ngoài '' 'xmlns: wsdl = "http://microsoft.com/wsdl/types/" '' 'trong lược đồ của tôi để làm cho nó xác nhận. – Sense545

+0

Tôi nhấn 'Lỗi: Loại tham chiếu {http://microsoft.com/wsdl/types/}guid không được tìm thấy' đang cố gắng sử dụng scalaxb.org/online để tạo một nhóm .Net thành walal thành scala. tôi chỉ cần thêm xsd trong câu trả lời này vào giải pháp và nó tạo ra tất cả các lớp scala tốt. cảm ơn! – simbo1905

1

Dường như trang tiện ích mở rộng không gian tên wsdl đã bị xóa, do đó, nó không thể tìm thấy thông tin loại mà bạn cần.

3

lời trích dẫn từ here:

XmlSchema guidSchema = new XmlSchema(); 
    guidSchema.TargetNamespace = "http://microsoft.com/wsdl/types/"; 

    XmlSchemaSimpleTypeRestriction guidRestriction = new XmlSchemaSimpleTypeRestriction(); 
    guidRestriction.BaseTypeName = new XmlQualifiedName("string", XmlSchema.Namespace); 

    XmlSchemaPatternFacet guidPattern = new XmlSchemaPatternFacet(); 
    guidPattern.Value = @"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"; 
    guidRestriction.Facets.Add(guidPattern); 

    XmlSchemaSimpleType guidType = new XmlSchemaSimpleType(); 
    guidType.Name = "guid"; 
    guidType.Content = guidRestriction; 
    guidSchema.Items.Add(guidType); 

    schemaSet.Add(guidSchema); 

    XmlSchema speakerSchema = new XmlSchema(); 
    speakerSchema.TargetNamespace = "http://www.microsoft.com/events/teched2005/"; 

    // ... 

    XmlSchemaElement idElement = new XmlSchemaElement(); 
    idElement.Name = "ID"; 

    // Here's where the magic happens... 

    idElement.SchemaTypeName = new XmlQualifiedName("guid", "http://microsoft.com/wsdl/types/"); 
+1

Cảm ơn bạn, như tôi hiểu, tôi phải cuộn lên lược đồ riêng của mình cho loại Guid để nhân rộng không gian tên wsdl. Tuy nhiên, đây là mã C#, làm thế nào để tôi đặt nó vào tệp XSD của tôi để xsd.exe có thể đọc nó? – erbi

+0

Tôi nghĩ, bạn không thể mở rộng xsd.exe theo cách này. Nhưng có thể bạn có thể tạo lược đồ với .NET, không có xsd.exe dựa trên đoạn mã này. Hoặc, các lựa chọn thay thế xsd.exe khác: http://www.hitsw.com/xml_utilites/ Tôi sẽ google để hoàn thành triển khai .NET. – boj

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