2012-03-09 13 views
8

Tôi đã tìm kiếm câu trả lời và không thể tìm thấy một:XSD chủ chốt/keyref hỗ trợ xác nhận IntelliSense trong Visual Studio 2010

  • Có một phím XSD/hỗ trợ xác nhận keyref qua Intellisense trong Visual Studio 2010?
  • Nếu có, cách làm cho nó hoạt động?
  • Nếu không, có cách nào (tích hợp sẵn) trong Visual Studio để thực hiện xác thực hợp lệ/tham chiếu trong XML có một lược đồ XSD không?

Cảm ơn!

CẬP NHẬT: Lưu ý rằng câu hỏi không phải là cách xác thực XML có tệp XSD. Tôi yêu cầu cụ thể về khóa /keyref intellisense/bất kỳ hỗ trợ nào trong Visual Studio, điều này dường như không được thêm vào chút nào.

+0

thể trùng lặp của [bạn có thể xác nhận xsd chống xml trong vs 2010?] (Http: //stackoverflow.com/questions/8988593/can-you-validate-xsd-against-xml-in-vs-2010) – DaveShaw

+2

Bạn đã bao giờ tìm thấy câu trả lời cho điều này chưa? Dường như để hỗ trợ điều này với XSD XSD sau khi tất cả ... –

+0

Không có câu trả lời nào được nêu ra, tôi nghĩ rằng càng nhiều người upvote này, không có câu trả lời. Không may. –

Trả lời

1

Chức năng hiện không được hỗ trợ trong VS2010, không phải trong VS2012 (theo hỗ trợ kỹ thuật MS).

Có thể họ sẽ hỗ trợ nó trong các phiên bản tương lai ...

2

Visual Studio 2012 bây giờ hỗ trợ xác nhận các trường hợp tài liệu XML phải chịu ràng buộc khoá/keyref như định nghĩa trong một sơ đồ tham chiếu.

Tuy nhiên, Visual Studio không đưa ra bất kỳ lỗi nào cho chính tài liệu lược đồ, khi tài liệu lược đồ đó sử dụng khóa/keyref không chính xác - cho dù tài liệu nào đó đáp ứng được lược đồ.

Cụ thể, yếu tố then chốt/keyref như đã định nghĩa trong lược đồ phải sử dụng namespace trong các báo cáo selector xpath, theo SO sau bài:

https://stackoverflow.com/a/4492004/344638

Để báo:

Hơn nữa - đây là một ràng buộc khóa - không nhận ra không gian tên mặc định. Bạn phải luôn luôn tiền tố mỗi phần của xpath chọn với tiền tố không gian tên của phần tử bạn đang tìm kiếm. Nếu bạn không có tiền tố không gian tên - khó khăn, bạn sẽ cần phải thêm tiền tố. Đây là giới hạn của tiêu chuẩn.

Bài đăng SO sau đây cung cấp ví dụ hoàn chỉnh về lược đồ sử dụng khóa/keyref, cá thể tài liệu XML và trình xác thực dựa trên C# theo cách thủ công. Giản đồ và trường hợp tài liệu XML xác nhận một cách chính xác trong Visual Studio - Visual Studio sẽ tạo ra lỗi nếu tài liệu vi phạm chế keyref/chìa khóa của schema:

https://stackoverflow.com/a/2866428/344638

0

Chỉ cần cố gắng trong VS 2013 và VS 2015. Họ đã làm xác thực khóa/khóa lại ngay bây giờ. Nó cho thấy cảnh báo ở cấp độ cha mẹ mặc dù.

Nhưng như @antiduh cho biết, họ vẫn không kiểm tra tệp xsd. Vì vậy, bạn thực sự cần phải đảm bảo khóa/khóa trong xsd là chính xác.

Mất nhiều giờ để tìm ra một mẫu đơn giản. Ngay cả sample on MSDN cũng không hoạt động. Tôi phải sửa đổi nó một chút.

Trước tiên, hãy đảm bảo bạn biết how to let Visual Studio validate an xml against an xsd of your choice.

Sau đó, sử dụng mẫu xsd và xml sau để xác thực khóa/khóa. Lưu ý rằng cảnh báo là đóng phần tử gốc, thay vì trên phần tử vi phạm quy tắc khóa/quy tắc.

Các tập tin XSD trông như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="namespace1" 
     xmlns:r="namespace1" 
     elementFormDefault="qualified"> 

    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="A" type="r:A" maxOccurs="unbounded"/> 
     <xs:element name="B" type="r:B"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:keyref name="dummy" refer="r:pNumKey"> 
     <xs:selector xpath="r:A/r:part"/> 
     <xs:field xpath="@ref-number"/> 
    </xs:keyref> 
    <xs:key name="pNumKey"> 
     <xs:selector xpath="r:B/r:part"/> 
     <xs:field xpath="@key-number"/> 
    </xs:key> 
    </xs:element> 

    <xs:complexType name="A"> 
    <xs:sequence> 
     <xs:element name="part" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="ref-number" type="xs:integer"/> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="B"> 
    <xs:sequence> 
     <xs:element name="part" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:simpleContent> 
      <xs:extension base="xs:string"> 
       <xs:attribute name="key-number" type="xs:integer"/> 
      </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 

</xs:schema> 

Và file xml trông như thế này:

<?xml version="1.0" encoding="utf-8" ?> 
<root xmlns="namespace1"> 
    <A> 
    <!-- if the ref-number is equal to one of the key-number, the validation will pass --> 
    <part ref-number="1"/> 
    </A> 
    <A> 
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error --> 
    <part ref-number="5"/> 
    </A> 
    <B> 
    <part key-number="1"/> 
    <part key-number="2"/> 
    <part key-number="3"/> 
    </B> 
</root><!--you will see warnings here-->