2009-02-24 4 views
9

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

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

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

+0

Не понимаю, почему валидатор проверил бы DTD для пространства имен. В любом случае, браузер также не проверяет DTD, и я склонен полагать, что вы фактически не используете надлежащий XHTML, т. Е. Вы отправили заголовки Content-type: text/html для этой веб-страницы. Но я могу ошибаться. –

ответ

6

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

Normative Definition of XHTML 1.0

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

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

5

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

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

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

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

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

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

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

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

+0

Да, скрытие значений в атрибуте class является моим резервным решением, но, очевидно, оно не очень элегантно, и мне нужно что-то немного менее «грязное». Самое элегантное решение - это имена атрибутов, которые начинаются с данных, как вы упомянули, но на данный момент выглядит так, что я должен буду ждать этого :-) –

3

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

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

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

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

+0

http://www.alistapart.com/articles/customdtd/ Если вы запустите такой файл с помощью валидатора W3C, вы обнаружите, что он хорошо проверяет ... К сожалению, при отображении файла в браузере на экране появляется сообщение>>. У этой ошибки нет способа, поэтому такой подход справедлив. – davidcl

+0

В статье далее говорится: «Подход, который * работает * требует, чтобы вы получили DTH XHTML и добавили изменения в этот файл». Он работает для меня на валидаторе W3C, а также валидаторе WDG. – cjakeman

0

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

Смежные вопросы