Как я могу использовать другие / более современные схемы проверки с .Net? - PullRequest
7 голосов
/ 28 февраля 2010

Я пытаюсь поработать с 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?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 01 марта 2010

Вы можете обойти проблему неоднозначности, установив для XmlSchemaSet.CompilationSettings.EnableUpaCheck значение false. UPA означает требование уникальной атрибуции частиц стандарта схемы XML, на которое вы ссылались.

0 голосов
/ 24 июля 2014

Я способствовал воскрешению схематрона ISO, реализованного в C #. Он доступен на github здесь .

...