Проверка схемы XML игнорируется, если включена совместимость на уровне фрагментов? - PullRequest
5 голосов
/ 03 сентября 2010

Из моего пребывания с проверкой XML и схемы кажется, что, когда соответствие на уровне фрагмента включено для экземпляра XMLReader , источник XML перестает проверяться по любому включены схемы .

Однако я не могу проверить это из документации MSDN, так как в ней не описывается поведение схемы XSD в свете уровня соответствия.Кроме того, если я предполагаю, что эта проблема верна, я не могу найти обходной путь для этого.

Я хотел бы знать, как проверить фрагмент XML на схеме XSD.

В моем случае я проверяю на соответствие XHTML 1 Строгая схема .Поскольку устаревшие теги HTML, такие как

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

Пример кода типа сценария проверки, который я использую, см. Здесь .

1 Ответ

2 голосов
/ 03 сентября 2010

Я думаю, что нашел ответ в этой статье MSKB как ни странно под названием КАК: проверить фрагменты XML на схеме XML в Visual C # .NET В нижней части статьи говорится:

ПРИМЕЧАНИЕ. Только объявления типов и элементы верхнего уровня в XML схема проверяется на соответствие XML схемы. Подэлементы считаются местный и поэтому не может быть подтверждено. Для того, чтобы подтвердить подэлемент, объявить на высшем уровне элемент и сослаться на это.

Я считаю, что в этом абзаце есть ошибка, и намерение состоит в том, чтобы указать top-level elements in the XMLschema document/fragment are validated against an XML Schema

Поскольку образец кода Microsoft начинает свой фрагмент на верхнем уровне (а не произвольно внутри документа), он работает с проверкой. Однако в моем случае я использую конструкцию в середине документа.

Поправьте меня, если мое толкование неверно.


Обход / решение

Обходной путь для меня - вставить свои фрагменты в элемент верхнего уровня с целью проверки.

Другими словами, если я имею дело с фрагментом XHTML:

<div>MY FRAGMENT</div>

Я могу обернуть его для проверки на Соответствовать строгой схеме XHTML как:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML fragment enclosed, conforming to XHTML 1.0 Strict Template.</title>
</head>
<body>

    <div>MY FRAGMENT</div>

</body>
</html>

Это решение работает для меня, поэтому я буду использовать его в промежуточный период; Есть ли лучшее решение, я не уверен, пока.

...