Проверка XHTML, пользовательские пространства имен и атрибуты - PullRequest
9 голосов
/ 24 февраля 2009

У меня есть веб-сайт, который требует, чтобы клиент был действительным 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. Кто-нибудь может пролить свет на то, как я могу решить эту проблему?

Ответы [ 4 ]

6 голосов
/ 24 февраля 2009

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

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

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

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

5 голосов
/ 24 февраля 2009

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

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

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

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

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

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

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

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

3 голосов
/ 12 апреля 2009

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

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

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

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

0 голосов
/ 02 января 2011

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

...