Неверное определение корневого элемента в схеме XML - PullRequest
3 голосов
/ 14 января 2010

Существует схема со следующим скучным корневым элементом:

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

Насколько мне известно, схема действительна, и Excel, например, считывает ее без проблем.

Однако, когда я пытаюсь проверить эту схему с помощью MSXML (v3 или v4 или v6), я получаю предметную ошибку. (Я создаю XMLSchemaCache, и при добавлении в него загруженной схемы возникает ошибка.)

От Google я узнал, что существует концептуальная проблема с механизмами MS XML, не соответствующими стандартам W3, и что необходимо использовать другое определение пространства имен. Однако я не смог найти ни более правильного определения, ни приличного объяснения проблемы. Я мог только найти много сообщений без ответов на форумах.

Может ли кто-нибудь так любезно объяснить этот вопрос немного глубже?

EDIT

Почему-то, несмотря на то, что я перебирал ссылки на проекты в версиях 3, 4 и 6, версия 3 использовалась все время. Переключатель силы на 4/6 решил это. Так что v3 не может разобрать схему, другие в порядке. Я верю, что это можно закрыть сейчас.

Ответы [ 4 ]

5 голосов
/ 14 января 2010

Хорошо, проблема была в том, что я использовал MSXML версии 3, не осознавая этого. Версии 4 и 6 работают нормально.

Пример кода можно найти здесь . И ребята здесь были не слишком полезны.

1 голос
/ 25 октября 2012

В дополнение к автоответу GSerg (кстати, это было полезно), я добавляю некоторую исходную информацию. Сначала мы получаем ясное объяснение в вики :

Различные версии MSXML поддерживают несколько разные наборы функций. Например, хотя MSXML 3.0 поддерживает только схемы XDR, он не поддерживает схемы XSD. MSXML 4.0, MSXML 5.0 и MSXML 6.0 поддерживают схемы XSD. Однако MSXML 6.0 не поддерживает схемы XDR

Тогда у нас есть Что нового в MSXML Страница MSDN, которая подтверждает введение xsd только в 4.0.

Наконец, в качестве общего совета у нас есть такая статья о msdn: Почему были удалены независимые от версии GUID и ProgIDs . Поэтому я думаю, что мы должны просто придерживаться 6.0.

0 голосов
/ 24 октября 2012

Я знаю, что это старый вопрос ... но я только что обнаружил, пытаясь решить эту проблему, что неправильное значение атрибута xmlns (namespace) также может вызвать ошибку.

Например, открывающий тег элемента схемы должен выглядеть следующим образом:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Но, если в значении есть опечатка, например, вам не хватает двоеточия:

<xsd:schema xmlns:xsd="http//www.w3.org/2001/XMLSchema">

вы получите ошибку «Неверное определение корневого элемента в схеме».

0 голосов
/ 04 мая 2012

Интересно знать, что MSXML версии 6 до сих пор генерирует эту ошибку в схемах XDR, поскольку ее поддержка была удалена, как я узнал здесь , дополнительная информация здесь .

...