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