проблема с получением объявленных пространств имен для работы - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь получить пространства имен, записанные во внешнем css (на самом деле два отдельных файла). Когда я запускаю файл в своем браузере, он не будет использовать объявленные пространства имен. Я думаю, что файл вызывает файл CSS, но он не применяет стиль пространства имен

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml version="1.0" encoding="utf-8"?>


<html xmlns:act="http://www.superstarmovies.com/actors" 
  xmlns:mov="http://www.superstarmovies.com/movies"
  xmlns="http://www.w3.org/1999/xhtml" >

<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
<title>Superstar Movies: Stars of the Month</title>
<link rel="stylesheet" href="movies.css"  type="text/css" ?>
<link rel="stylesheet" href="actors.css" type="text/css" ?>
<link rel="stylesheet" href="superstar.css" type="text/css" />
</head>

<body>
<div id="heading"><img src="logo.gif" alt="Superstar Movies" /></div>

<div id="main">
<h1>Stars of the Month</h1>
<h3>Movies by Our Featured Stars!</h3>
<act:actors>

    <act:actor>
        <act:name>Halle Berry</act:name>
    <act:date>August 14, 1966</act:date>
    <act:birthplace>Cleveland, Ohio</act:birthplace>
          <mov:movie genre="action" star="Halle Berry">
        <mov:name>Catwoman</mov:name>
    <mov:date>(2004)</mov:date>
    <mov:length>104 minutes</mov:length>
    </mov:movie>

    <mov:movie genre="horror" star="Halle Berry">
        <mov:name>Gothika</mov:name>
    <mov:date>(2003)</mov:date>
    <mov:length>98 minutes</mov:length>
    </mov:movie>

    <mov:movie genre="drama" star="Halle Berry">
        <mov:name>Monster&apos;s Ball</mov:name>
    <mov:date>(2001)</mov:date>
    <mov:length>111 minutes</mov:length>
    </mov:movie>

    <mov:movie genre="fantasy" star="Halle Berry">
        <mov:name>X-Men</mov:name>
    <mov:date>(2000)</mov:date>
    <mov:length>104 minutes</mov:length>
    </mov:movie>

    <mov:movie genre="romance" star="Halle Berry">
        <mov:name>Jungle Fever</mov:name>
    <mov:date>(1991)</mov:date>
    <mov:length>132 minutes</mov:length>
    </mov:movie>
    </act:actor>

    <act:actor>
    <act:name>Tom Hanks</act:name>
    <act:date>July 9, 1956</act:date>
    <act:birthplace>Concord, California</act:birthplace>

<mov:movie genre="drama" star="Tom Hanks">
    <mov:name>Catch Me If You Can</mov:name>
<mov:date>(2002)</mov:date>
<mov:length>141 minutes</mov:length>
</mov:movie>

<mov:movie genre="adventure" star="Tom Hanks">
    <mov:name>Cast Away</mov:name>
<mov:date>(2000)</mov:date>
<mov:length>143 minutes</mov:length>
</mov:movie>

<mov:movie genre="action" star="Tom Hanks">
    <mov:name>Saving Private Ryan</mov:name>
<mov:date>(1998)</mov:date>
<mov:length>170 minutes</mov:length>
</mov:movie>

<mov:movie genre="adventure" star="Tom Hanks">
    <mov:name>Apollo 13</mov:name>
<mov:date>(1995)</mov:date>
<mov:length>140 minutes</mov:length>
</mov:movie>

<mov:movie genre="comedy" star="Tom Hanks">
    <mov:name>Forrest Gump</mov:name>
<mov:date>(1994)</mov:date>
<mov:length>142 minutes</mov:length>
</mov:movie>

<mov:movie genre="drama" star="Tom Hanks">
    <mov:name>Philadelphia</mov:name>
<mov:date>(1993)</mov:date>
<mov:length>125 minutes</mov:length>
</mov:movie>

<mov:movie genre="comedy" star="Tom Hanks">
    <mov:name>Big</mov:name>
<mov:date>(1988)</mov:date>
<mov:length>104 minutes</mov:length>
</mov:movie>
    </act:actor>

</act:actors>
</div>

 <address>
Superstar Movies &#183; 123 Moviestar Lane &#183; Hollywood, FL 12345
</address>

</body>

</html>

CSS

 @namespace act "http://www.superstarmovies.com/actors";

act|actor        {display: block; font-family: Arial, Helvetica, sans-serif;
          margin-bottom: 20pt}

act|name, act|date   {display: block}

act|name         {font-size: 14pt; color: DarkRed; font-style: bold}

act|date, act|birthplace   {display: inline; font-style: italic; color: DarkRed}

act|birthplace         {padding-left: 0.5em}

@namespace mov "http://www.superstarmovies.com/movies";

mov|movie        {display:block; font-family: Arial, Helvetica, sans-serif}

mov|name, mov|date, mov|length  {display: inline}

mov|name         {font-style: bold; color:#003;}

mov|length       {font-style: italics; padding-left: 0.5em}

Мысли

1 Ответ

5 голосов
/ 29 февраля 2012

В вашем XHTML:

  1. Ваша разметка неправильно сформирована:

    • Сначала должно быть ваше объявление XML, а затем объявление doctype:

      <?xml version="1.0" encoding="utf-8"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      
    • Некоторые из ваших тегов <link /> не закрыты должным образом, они должны быть:

      <link rel="stylesheet" href="movies.css"  type="text/css" />
      <link rel="stylesheet" href="actors.css" type="text/css" />
      
  2. Ваша страница должна обслуживаться сервером как application/xhtml+xml. Типичные серверы не знают, что вы обслуживаете XHTML, поэтому они отправляют их как text/html. Браузеры не смогут обрабатывать text/html файлы как XML, поэтому они не будут применять CSS к вашим пользовательским элементам XML.

    Если вы работаете с PHP, просто добавьте это в самый верх вашего XHTML-файла:

    <?php header('Content-Type: application/xhtml+xml'); ?>
    

    Или в ASP добавьте:

    <% Response.ContentType = "application/xhtml+xml"; %>
    

    У вас также должен быть сопутствующий метатег, но для проверки вашей страницы нет необходимости, и браузеры все равно его игнорируют:

    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
    

    Краткий урок истории о том, как UA понимают XHTML как суп с тегом HTML, можно найти в этом ответе , чтобы лучше понять это.

В вашем CSS:

  1. Это font-weight: bold, а не font-style: bold.

  2. Это font-style: italic, а не font-style: italics.

  3. Убедитесь, что ваши @namespace операторы размещены в начале ваших таблиц стилей. Из spec :

    Любые @namespace правила должны следовать всем правилам @charset и @import и предшествовать всем другим игнорируемым at-правилам и наборам правил в таблице стилей.


Но с учетом всего вышесказанного, почему вы не помещаете своих актеров и фильмы в их собственные файлы XML, а затем преобразуете их с помощью XSLT в знакомый, настоящий XHTML ?

...