Как игнорировать html в элементе xml при проверке с помощью relaxng compact
Как я могу иметь шаблон, который игнорирует HTML внутри элемента, а не валидатор пытается его проверить
<stuff>
<data>
this is some text <b>with the odd</b> bit of html<p>and unclosed tags
</data>
</stuff>
Это не верно, но я пробовал такие вещи, как
datatypes xs = "http://www.w3.org/2001/XMLSchema-datatypes"
start = stuff
stuff = element stuff
{
element data { * }
}
2 ответа
Вы не можете разрешить произвольный неизмененный HTML в XML. Либо экранируйте отдельные специальные символы ( каковы официальные зарезервированные символы XML?), Либо инкапсулируйте HTML в контейнере CDATA ( возможно ли вставить содержимое HTML в документ XML?).
Вы не сможете проверить XML-документ с плохо сформированным HTML-кодом, поскольку из-за отсутствия правильности такие документы не являются XML-документами. Но если на самом деле вы получаете ввод XML, то вы, безусловно, можете определить data
разрешить любые правильно сформированные элементы HTML или любой правильно сформированный XML.
Разрешение любого правильно сформированного XML является самым простым. Мы определяем шаблон, который означает "любой правильно сформированный XML здесь": любые встреченные элементы проверяются с использованием того же шаблона, рекурсивно:
wellformed-xml = (text
| element * { wellformed-xml }
)*
Теперь определите data
элемент для использования этого шаблона:
stuff = element stuff {
element data { wellformed-xml }
}
Если вы действительно хотите убедиться, что это просто HTML, вам нужен класс имен, более строгий, чем "*". Я заселил его b
, i
, p
, span
, а также div
и оставьте это в качестве упражнения для добавления других элементов, которые вы хотите.
start = stuff
stuff =
element stuff {
element data { wellformed-html }
}
wellformed-html =
(text
| element b | div | i | p | span { wellformed-html }
)*
Если вы хотите иметь возможность поддерживать ввод XHTML, вам нужно использовать ссылку на пространство имен; опять же упражнение для читателя.