Я пытаюсь сделать некоторую работу с C#, и XML в межплатформенном приложении (большая часть разработки находится в MonoDevelop на Linux, но большинство пользователей закончит тем, что использовало фронтенд WinForms, который я делаю в Visual Studio). Моно ведет себя, как я ожидал бы, но .NET не и таким образом, я ищу опции и альтернативы.
Схемам следовал за различными дополнительными элементами "xs:any" элемент. Это работает превосходное в Моно, но не в .NET Microsoft, поскольку он жалуется, что возникновение дополнительного элемента неоднозначно между его фактическим определением в схеме и "xs:any". От небольшого количества чтения, это, кажется, проблема, которая была разрешена в более поздних версиях определения Схемы W3C. Очевидно Моно был усовершенствован, но Microsoft отстает.
Опции, которые я вижу:
1) Используйте RelaxNG - к сожалению, связь от основного сайта до реализации C# разорвана. Это - часть Моно, но это не много справки при работе .NET MS. Единственный путь I видит, чтобы сделать это, должен копировать и восстановить версию Mono как мой собственный DLL
2) Используйте Schematron - я нашел его как предложение при создании обратного и прямо совместимого XML, но это больше походит на блок проверки допустимости формата, чем 'стандартный' язык схемы. Я не совсем уверен, где реализация - все, что я могу найти, блок проверки допустимости командной строки.
3) Удостоверьтесь, что реализация .NET MS использует обновленный стандарт схемы, который Моно использование также - я даже не знаю, возможно ли это.
4) Палка с ужасными схемами и помещенным "xs:any" в дополнительном элементе "расширений" - это вкладывает, это ни на каком серьезном основании кроме официальной платформы .NET не запутывается, но это работает.
Код нацелен на.Net 2.0, но у меня есть 3,5 установленных на моей машине. Я также работаю с Моно 2.4, MonoDevelop 2.2 и Visual Studio Express 2005.
Действительно ли какой-либо из 1-3 возможен, или застревает я с 4?
Спасибо.
Вы можете обойти проблему неоднозначности, установив для XmlSchemaSet.CompilationSettings.EnableUpaCheck
значение false. UPA
означает требование уникальной атрибуции частиц стандарта XML-схемы, на которое вы ссылались.