XSD схема не действительна? - PullRequest
0 голосов
/ 23 января 2010

Я скачал официальную "схему xsd" с http://www.w3.org/2001/XMLSchema.xsd.

Я сохранил его локально и попытался проверить с помощью этого кода:

var sc = XmlSchema.Read(new FileStream(@"c:\temp\xsd.xsd", FileMode.Open), validate);
sc.Compile(validate);

Не удалось, за исключением того, что не удалось найти DTD.

Вопрос № 1 : Почему схема xsd содержит определение, которое не может обрабатывать валидаторы xml?

Я удалил определение DTD из верхней части файла и получил (и многие другие) ошибки проверки:

"Restriction of 'anySimpleType' is not allowed."

Вопрос № 2 : Почему компиляция схемы xsd не удалась?

Я пробовал то же самое с XmlSchemaSet, используя set.Add (...) и , это работало .

Вопрос № 3 : В чем разница между проверкой XmlSchema и XmlSchemaSet?

Затем я создаю фиктивную схему, которая импортирует схему xsd с диска:

<s:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="c:\temp\xsd.xsd" />

Когда я добавляю эту схему в набор схем, она снова выходит из строя с теми же ошибками, что и выше.

Вопрос № 4 : Чем это отличается от непосредственного добавления схемы xsd (которая работала)?

1 Ответ

0 голосов
/ 23 января 2010

Вам понадобится пара других файлов, на которые ссылается схема:

XmlSchema.dtd и datatypes.dtd . После того, как вы загрузили их, вы можете проверить:

class Program
{
    static void Main()
    {
        var settings = new XmlReaderSettings();
        settings.ProhibitDtd = false;
        using (var reader = XmlReader.Create("XMLSchema.xsd", settings))
        {
            settings.Schemas.Add(XmlSchema.Read(reader, null));
        }

        using (var reader = XmlReader.Create("xsd.xsd", settings))
        {
            // This will throw if the XML file is not valid
            while (reader.Read()) ;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...