Проверка XHTML, настраиваемые пространства имен и атрибуты

У меня есть веб-сайт, который требует, чтобы клиент был действительным XHTML. Они проверяют это с помощью валидатора W3C.

Я хочу добавить свое собственное пространство имен и атрибуты, чтобы я мог делать такие вещи:

<div my:userid="123"> ... </div>

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

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:my="http://www.example.com/my">

Однако мой XHTML не прошел проверку. Проблема, по-видимому, заключается в том, что валидатор на самом деле не выходит и не проверяет мой пользовательский документ DTD для моего пользовательского пространства имен, он только проверяет XHTML на соответствие известным DTD. Кто-нибудь может пролить свет на то, как я могу решить эту проблему?


person Alex York    schedule 24.02.2009    source источник
comment
Я не понимаю, зачем валидатору проверять DTD для пространства имен. В любом случае, браузер также не проверяет DTD, и я склонен полагать, что вы на самом деле не используете правильный XHTML, то есть вы отправили заголовки Content-type: text/html для этой веб-страницы. Но я могу ошибаться.   -  person Ionuț G. Stan    schedule 24.02.2009


Ответы (4)


Для XHTML 1.0 вы ограничены элементами и атрибутами XHTML 1.0:

Нормативное определение XHTML 1.0

Эта версия XHTML обеспечивает определение строго соответствующих документов XHTML 1.0, которые ограничены элементами и атрибутами из пространств имен XML и XHTML 1.0.

Насколько я понимаю, XHTML 2.0 нацелен на предоставление основы для выполнения того, что вы хотите.

person kmkaplan    schedule 24.02.2009

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

Неа. Пользовательские пространства имен прекрасно правильно оформлены в XML, но «действительный» имеет конкретное значение, заключающееся в том, что каждый используемый элемент и атрибут объявляются в схеме документа. Эта схема может быть DTD, XML-схемой или чем-то еще, но вы должны ее объявить.

Таким образом, вы можете объявить свою собственную схему для добавления пользовательских атрибутов к языку, и модуляризация XHTML делает это очень простым. Вам нужно будет добавить ссылку на DTD в виде ‹!DOCTYPE> в прологе; просто установка URI пространства имен не дает обработчику XML никаких возможностей для поиска схемы самой по себе.

Но тогда то, что вы написали, это «действительный мой язык, который немного похож на XHTML», а не «действительный XHTML». Некоторые из этих «моих языков» хорошо известны, например «XHTML+MathML+SVG», но это все же не XHTML как таковой, и если ваш клиент твердо настроен на «валидный XHTML», вы не можете использовать ни один из них.

У вас также есть потенциальные проблемы с браузером, особенно с IE, который (до IE8) делает некоторые странные вещи с вызовами DOM семейства Element.*etAttribute*. И если вы на самом деле не обслуживаете документ как XML Content-Type (который IE также не может обработать), все ваши пространства имен в любом случае фактически не используют пространства имен.

В [X]HTML5 есть предложение разрешить пользовательские пользовательские атрибуты (в первую очередь для целей сценариев) входить в атрибуты, имена которых начинаются с «data-». Но в то же время обычный метод заключается в том, чтобы скрыть значения в другом атрибуте, например, в классе:

<div class="userid-123">...</div>

а затем извлеките данные, используя подходящую обработку строк над className в сценарии.

person bobince    schedule 24.02.2009
comment
Да, скрытие значений в атрибуте класса — это мое запасное решение, но, очевидно, это не очень элегантно, и я хотел чего-то менее грязного. Самым элегантным решением являются имена атрибутов, которые начинаются с данных, как вы упомянули, но, похоже, пока мне придется подождать этого :-) - person Alex York; 25.02.2009

У меня есть веб-сайт, который требует, чтобы клиент был действительным XHTML. Они проверяют это с помощью валидатора W3C.

У меня был некоторый успех с валидатором W3C, использующим не xmlns=, а стандартный XHTML DTD и добавление нескольких атрибутов в конце, как описано выше bobince. Я использую это для добавления атрибутов, используемых системой шаблонов PHPTAL, таких как

<html metal:define-macro="m">

Я согласен, что вам нужен не XHTML, а надмножество XHTML. Однако, если ваш клиент готов к тестированию, просто указав валидатору W3C ваш URL-адрес, тогда вперед. Для получения рекомендаций см. WDG.

person cjakeman    schedule 11.04.2009
comment
alistapart.com/articles/customdtd Если вы пропустите такой файл через валидатор W3C, вы обнаружил, что он прекрасно проверяется.... К сожалению, когда вы отображаете файл в браузере, на экране появляется ]›. Нет никакого способа обойти эту ошибку, поэтому этот подход является правильным. - person davidcl; 15.04.2009
comment
Но далее в статье говорится: «Подход, который действительно работает, требует, чтобы вы получили XHTML DTD и добавили свои модификации в этот файл. У меня это работает на валидаторе W3C, а также на валидаторе WDG. - person cjakeman; 17.04.2009

1.0 это не разрешено. Если вы действительно хотите это сделать, вы должны загрузить существующий dtd и сохранить его на своем сервере и определить частный вместо общедоступного. но проверка w3c не прошла, потому что она проверяет только оригинальную

person szenma    schedule 02.01.2011