xml.writer - зачем использовать пространства имен XHTML? - PullRequest
1 голос
/ 04 декабря 2009

Когда я узнал о том, как написать документ XHTML с помощью средства записи XML на C #, один ответ в моей теме сказал, что мне нужно использовать пространство имен XHTML:

const string XHTMLNS = "http://www.w3.org/1999/xhtml";
    writer.WriteStartElement("html", XHTMLNS);
    writer.WriteStartElement("head", XHTMLNS);

Я им не пользуюсь (у меня просто "html"), и он работает хорошо. Я использую этот тип документа:

writer.WriteDocType("html","-//W3C//DTD XHTML 1.0 Transitional//EN","http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd",null);

Итак, я не понимаю, почему бы не использовать только WriteStartElement ("html"), это работает. Кроме того, что является преимуществом использования WriteStartElement ("html", XHTMLNS)? Спасибо!

1 Ответ

1 голос
/ 05 декабря 2009

Без использования версий пространства имен вы создаете поток XML, который не является допустимым XHTML.

Это становится проблемой, если и только если этот вывод отправляется потребителю этого потока, который ожидает получить действительный XHTML. Это может быть браузер или другой пользовательский агент, которому говорят, что он ожидает XHTML с помощью типа содержимого «application / xhtml + xml», или это может быть другой тип потребителя. Например, если вы и я согласны поделиться некоторыми данными, и мы решим, что вы отправите их мне как XHTML, тогда я разумно ожидаю, что вы отправите полностью действительный XHTML, и если вы не использовали форму пространства имен тогда вы не сможете выполнить соглашение.

Это становится более важным, если учесть, что элементы из разных пространств имен могут быть смешаны вместе в одном потоке XML. Поэтому, возможно, XHTML составляет только один или несколько разделов более крупного XML-документа с большим количеством элементов из других пространств имен. Затем, чтобы иметь возможность правильно обрабатывать документ, потребитель должен уметь правильно распознавать разделы XHTML, и способ сделать это - использовать пространство имен.

Как часто отмечается в ответах XHTML о SO, по умолчанию ваш сгенерированный XHTML будет отправлен в браузер с типом содержимого "text / html", поэтому браузер не ожидает корректный XHTML или даже правильно сформированный XML, но HTML вместо этого. HTML не использует пространства имен XML, поэтому, если он является единственным потребителем для вашего сгенерированного вывода, то нет смысла использовать версии методов «Запись» с пространством имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...