Ваша схема выглядит хорошо. Обратите внимание, что значение по умолчанию для xs: any / @ processContents является строгим, что означает, что ваши элементы XHTML также будут проверены, поэтому вам потребуется также схема XHTML и импорт ее из вашей схемы. Вы можете использовать processContents = "lax" внутри xs: any, чтобы указать, что проверка будет применяться только при наличии схемы для этих элементов.
Ваша проблема в том случае, если вы должны указать пространство имен для элемента XHTML. Вы можете объявить пространство имен XHTML в качестве пространства имен по умолчанию для каждого элемента, например
<p xmlns="http://www.w3.org/1999/xhtml">this is a test</p>
или вы можете объявить его связанным с префиксом, например, h, а затем использовать этот префикс для квалификации ваших элементов XHTML:
<description xmlns:h="http://www.w3.org/1999/xhtml">
<h:p>this is a test</h:p>
<h:p>this is a <b>bold</b> test</h:p>
<h:h1>Those were the tests</h:h1>
</description>
DTD не осведомлены о пространстве имен, и там объявления пространства имен являются просто атрибутами, поэтому можно объявить фиксированный атрибут xmlns для элемента, чтобы автоматически поместить его в определенное пространство имен. Схемы XML поддерживают пространство имен, и вы не можете иметь объявление пространства имен в качестве фиксированного атрибута.