2010-10-27 7 views
2

J'ai une déclaration doctype comme vu dans les 2 premières lignes.Cette déclaration html est-elle répétitive

Sur la troisième ligne, la balise html contient également une déclaration xmlns et xml: lang et lang. L'un de ces xmlns, xml: lang ou lang est-il répétitif? Est-ce qu'ils dupliquent quelque chose du doctype. Je voudrais garder le doctype et supprimer toutes les déclarations sur la troisième ligne si elles sont répétitives.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

</html> 

Répondre

1

Ils ne sont pas répétitifs. L'espace de noms XML pour XHTML et la déclaration doctype ne sont pas identiques. Les attributs xml:lang et lang ne le sont pas non plus. Le XHTML 1.0 specification exige que tous ces éléments soient inclus.

la liste d'attributs de l'élément <html> comme décrit par le XHTML 1.0 Strict DTD est la suivante:

<!ATTLIST html 
    %i18n; 
    id   ID    #IMPLIED 
    xmlns  %URI;   #FIXED 'http://www.w3.org/1999/xhtml' 
    > 

(où %i18n est une entité interne qui représente les attributs de l'internationalisation xml:lang, lang et dir, voir ci-dessous)

Notez la quatrième ligne. Il est dit que xmlns est un attribut d'une valeur d'URI donnée, et a été corrigé à cet URL d'espace de noms. Cela signifie que si vous omettez l'attribut ou lui donnez un espace de noms différent, votre document est XHTML strict non valide.

L'entité %i18n correspond à ces attributs:

<!-- internationalization attributes 
    lang  language code (backwards compatible) 
    xml:lang language code (as per XML 1.0 spec) 
    dir   direction for weak/neutral text 
--> 
<!ENTITY % i18n 
"lang  %LanguageCode; #IMPLIED 
    xml:lang %LanguageCode; #IMPLIED 
    dir   (ltr|rtl)  #IMPLIED" 
    > 

L'attribut lang est pour la compatibilité ascendante (à savoir HTML ≤ 4.01), et xml:lang est décrit par XML 1.0 (donc l'espace de noms xml vu ici). Je ne suis pas trop sûr de la raison exacte pour laquelle xml:lang devrait précéder lang, mais il est logique étant donné que XHTML est simplement "reformulé" HTML en syntaxe XML (pour ainsi dire). L'attribut dir par défaut est ltr (texte de gauche à droite) s'il n'est pas spécifié, il ne s'agit donc pas d'un attribut obligatoire.

1

Pour se conformer à la norme stricte de XHTML comme DOCTYPE indique, vous devez spécifier l'attribut xmlns.

L'élément racine du document doit désigner l'espace de noms XHTML en utilisant l'attribut xmlns [XMLNAMES]. Le désignateur d'espace de noms pour XHTML est "http://www.w3.org/1999/xhtml".

Point de référence n ° 3 de http://www.w3.org/TR/xhtml11/conformance.html

+0

Et en effet, le point # 4 – developmentalinsanity

+1

Lien pour la spécification XHTML 1.0 est http://www.w3.org/TR/xhtml1/#docconf – BoltClock

1

Non, le doctype et l'espace de noms du document xml sont différents.

0

Non, il n'y a rien comme la duplication. Nous pouvons mentionner les attributs lang et xml:lang. La valeur de l'attribut xml:lang est prioritaire

xmlns doit être présent si le Doctype est en mode strict.

1

Si vous utilisez XHTML, alors (comme dans les autres commentaires ici) vous devez spécifier tout cela. Tout est requis pour que votre page soit conforme à la spécification (les pages XHTML échoueront si elles ne sont pas 100% conformes à la spécification).

Cependant, votre question indique que vous souhaitez simplifier votre code. En l'état actuel, en utilisant XHTML, vous ne pouvez pas. Mais si vous passez à la spécification HTML5, vous pouvez simplifier considérablement les choses.

HTML5 ne nécessite pas de doctype complexe et ne nécessite aucune déclaration d'espace de noms XML. Un document HTML5 ressemblerait à ceci:

<!DOCTYPE html> 
<html> 
.... 
</html> 

Je suis sûr que vous serez d'accord, c'est beaucoup plus simple et plus facile à lire. La bonne nouvelle est que vous pouvez le faire sans rien changer d'autre ou perdre aucune fonctionnalité. Tous les navigateurs actuels fonctionneront avec ce code, même s'ils ne sont pas explicitement compatibles avec HTML5.

Questions connexes