2010-02-28 60 views
7

Tôi đang cố gắng thực hiện một số công việc với C# và XML trong một ứng dụng đa nền tảng (hầu hết phát triển trong MonoDevelop trên Linux, nhưng hầu hết người dùng sẽ sử dụng WinForms front-end mà tôi tạo trong Visual Studio). Mono đang hành xử như tôi mong đợi, nhưng. Net không phải là và vì vậy tôi đang tìm kiếm các lựa chọn và lựa chọn thay thế.Tôi làm cách nào để sử dụng xác thực lược đồ hiện đại/khác với .Net?

Các lược đồ có các phần tử tùy chọn khác nhau, theo sau là phần tử "xs: any". Điều này hoạt động hoàn toàn tốt trong Mono, nhưng không phải trong .Net của Microsoft vì nó phàn nàn rằng sự xuất hiện của phần tử tùy chọn là mơ hồ giữa định nghĩa thực tế của nó trong lược đồ và "xs: any". Từ một chút đọc lên, nó dường như là một vấn đề đã được giải quyết trong các phiên bản sau của định nghĩa Schema của W3C. Rõ ràng Mono đã được cập nhật, nhưng Microsoft đang tụt dốc.

Các tùy chọn tôi có thể thấy là:

1) Sử dụng RelaxNG - tiếc là liên kết từ trang web chính vào thư mục C# thực hiện là bị hỏng. Nó là một phần của Mono, nhưng đó không phải là nhiều trợ giúp khi chạy trên MS '.Net. Cách duy nhất tôi có thể thấy để làm điều đó là nhân đôi và xây dựng lại Mono's version làm DLL của riêng tôi

2) Sử dụng Schematron - Tôi tìm thấy nó như là một gợi ý về tạo XML tương thích ngược và tiến, nhưng nó giống như một trình xác nhận định dạng hơn ngôn ngữ lược đồ 'chuẩn'. Tôi không hoàn toàn chắc chắn nơi thực hiện là - tất cả tôi có thể tìm thấy là một trình xác nhận dòng lệnh.

3) Đảm bảo rằng việc triển khai MS .Net sử dụng tiêu chuẩn lược đồ cập nhật mà Mono sử dụng - Tôi thậm chí không biết nếu điều này là có thể.

4) Gắn bó với các lược đồ xấu và đặt "xs: any" trong phần tử "extensions" tùy chọn - nó không có lý do chính đáng nào ngoài khung chính thức .Net không bị lẫn lộn, nhưng nó hoạt động.

Mã này nhằm vào .Net 2.0, nhưng tôi đã cài đặt 3.5 trên máy tính của mình. Tôi cũng đang làm việc với Mono 2.4, MonoDevelop 2.2 và Visual Studio Express 2005.

Có bất kỳ 1-3 nào có thể hoặc tôi bị mắc kẹt với 4?

Cảm ơn.

+0

Vui lòng cung cấp liên kết cho biết quy tắc UPA đã thay đổi. Đây sẽ là nơi bạn nói W3C đã cập nhật phiên bản lược đồ. –

+1

Tôi nghĩ rằng điều này được giải quyết trong bản thảo làm việc mới nhất (http://www.w3.org/TR/xmlschema11-1/#sec-cos-nonambig), mà không loại bỏ ràng buộc UPA nhưng đưa ra một trường hợp đặc biệt về cách thức để xử lý xung đột giữa phần tử và ký tự đại diện. Vì đây là một bản nháp, người ta không thể gây lỗi cho Microsoft. Có lẽ nó không phải là Mono là nhiều hơn đến nay mà là họ đã không thực hiện kiểm tra UPA? Cá nhân, tôi sẽ không khuyên bạn nên thiết kế các ứng dụng dựa trên một đặc tả dự thảo, nhưng đó là lên đến OP ... –

+0

@binarycoder: cảm ơn. Tôi đã không nghe nói về điều này, do đó, chắc chắn nó không phải là một phần của bất kỳ spec cuối cùng. –

Trả lời

4

Bạn có thể làm việc xung quanh vấn đề mơ hồ bằng cách đặt XmlSchemaSet.CompilationSettings.EnableUpaCheck thành sai. UPA là viết tắt của yêu cầu phân bổ duy nhất Particle của tiêu chuẩn lược đồ XML mà bạn tham chiếu.

+1

Nói cách khác, xác thực lược đồ Microsoft đang cho bạn biết về một vấn đề với lược đồ của bạn - nó không rõ ràng. –

+1

Phải, đây chắc chắn là một vấn đề với lược đồ theo tiêu chuẩn hiện hành. Điều này được nới lỏng trong Lược đồ XML 1.1, với báo trước rằng nó chỉ là trạng thái "bản thảo làm việc". –

+0

@binarycoder: và vấn đề là ở cấp bản thảo làm việc, và vì nó là một phiên bản khác của tiêu chuẩn, nên không chắc Mono đang triển khai phiên bản sau của tiêu chuẩn và Microsoft đang ở đằng sau. –

0

Tôi đã đóng góp vào sự phục sinh của một sơ đồ ISO được thực hiện trong C#. Nó có sẵn trên github here.

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