hcard-parsing-fr

Jump to: navigation, search

parsage hCard

par Tantek Çelik

(traduction en cours Christophe Ducamp)

introduction

Quand j'ai initialement conçu hCard, il était clair pour moi de savoir comment parser sans ambiguïté tant l'existence de hCards dans du (X)HTML arbitraire (et n'importe où ce pouvait être embarqué dans du (X)HTML arbitraire, par ex. RSS, Atom, "XML générique") que les propriétés et valeurs de hCard.

J'ai travaillé directement avec Brian Suda pour saisir ces idées dans une implémentation, et Brian a écrit X2V, un script XSLT qui convertit les hCards en vCards, démontrant ainsi simultanément la parsabilité des hCards et l'utilité immédiate du contenu hCard interopérant avec les applications existantes massivement répandues de vCard.

Je vais maintenant documenter ces idées directement sur cette page, de façon à ce que des implémentations supplémentaires puissent être construites à partir de ces concepts élémentaires, plutôt que d'avoir à faire du reverse engineering sur X2V.

Contents


étendue

Bien que cette page soit écrite spécifiquement pour expliquer comment parser hCard, les concepts et algorithmes contenus à l'intérieur servent comme exemple pour la façon dont d'autres microformats composés vont se faire parser.

Gestion URL

Un parseur hCard peut commencer par un URL à récupérer.

Si l'URL manque d'un identifiant de fragment, alors le parseur devrait parser la ressource complète retrouvée pour les hCards.

Si l'URL a un identitfiant de fragment, alors le parseur ne devrait parser que le noeud indiqué par l'identifiant de fragment et ses descendants, chercher des hCards, démarrer avec le noeud indiqué, qui peut lui-même être une simple hCard.


nom de classe racine

Chaque microformat composé commence par un élément racine avec un nom de classe relativement unique. Par cela, je veux dire un nom de classe qui n'est pas simplement un mot commun, et qui devra être peu probablement être utilisé à l'extérieur du contexte du microformat. En choisissant un tel nom de classe racine, le microformat évite (pour toutes les intentions pratiques) de rentrer en conflit avec des noms de classe existants qui peuvent exister dans le contexte (X)HTML. Ceci est essentiel pour permettre à de tels microformats composés d'être embarqués dans le contenu actuel, existant, tout comme le contenu futur.

Heureusement ce n'est pas un nouveau problème à résoudre. Les noms d'objets racine choisis pour la vCard (RFC 2426) et iCalendar (RFC 2445) ont eu de la même manière à éviter de telles collisions et l'ont fait en choisissant des noms qui devraient peu probablement être introduits à l'intérieur d'un objet contexte MIME. Le principe de réutilisation dicte le fait que nous devrions réutiliser les noms pour ces objets racine dans ces RFCs plutôt que d'inventer les nôtres. Compte tenu de la même sémantique, un design devrait réutiliser les noms, plutôt que d'inventer un second nom pour la même sémantique (une erreur commune de design produite dans des environnements qui requièrent des espaces-noms).

Dans la spécification vCard, les noms ne sont pas sensibles à la casse du aux (manques) d'exigences de leur contexte. Les noms de classes (X)HTML sont sensibles à la casse par ces spécifications. De ce fait, nous sommes obligés de choisir une casse canonique pour les noms de classe équivalents des noms d'objets, et des noms de propriétés de vCard. Toutes les bas de casse sont choisies pour suivre le réglage précédent (c'est à dire le modèle reuse) par le XHTML, ce qui devait de la même manière canoniser la casse de l'élément et les noms d'attributs que cela prenait du HTML4, qui lui-même était insensible à la casse du fait de son contexte (SGML). En outre, les raisons d'éviter le mélange de casse (par ex. la casse chatmot) dans le contexte de noms de classes peuvent être trouvées dans l'article A Touch of Class, spécifiquement, la section titrée Class sensitivity.

Par conséquent, le nom de classe racine d'un hCard est "vcard".

trouver des hCards

Un document (X)HTML indique qu'il peut contenir des hCards en référençant le profil XMDP de hCard. Voir XMDP pour plus de détails.

Un parseur trouve des hCards dans un contexte (X)HTML en cherchant des éléments avec le nom de classe racine vcard tout simplement comme le fait le [sélecteur de classe CSS suivant :

 .vcard

Par exemple, la déclaration de règle de style CSS suivante fixe l'arrière-plan de toutes les hCards en vert :

 .vcard { background: green; }

Notez que l'attribut de classe (X)HTML est un espace séparé par des noms de classe.

de ce fait tout ce qui suit sont des éléments racines valides hCard :

Une fois l'élément racine d'une hCard trouvé, cet élément-là et tous ses descendants sont tout ce qui est exigé pour parser la hCard.

Par conséquent, il est possible pour une hCard bien formée d'être extraite à partir d'un contexte général non bien-formé, si le parseur a la capacité de trouver des éléments par nom de classe dans ce contexte non bien-formé.

propriétés hCard

La liste complète des noms de classe pour les propriétés hCard est documentée sur la page hCard profile.

parsage compatible avant

Au moment de parser les contenus d'une hCard, tous les noms de classe non reconnus doivent être ignorés.

De la même manière, les valeurs non reconnues pour les propriétés de hCard doivent être aussi ignorées.

trouver des propriétés hCard

Pour parser une hCard pour une propriété hCard (par ex. "fn"), le parseur cherche simplement le premier élément avec ce nom de classe à l'intérieur de hCard.

Ceci peut être aussi exprimé comme le premier élément qui correspond à ce sélecteur CSS :

.vcard .fn

Quelques propriétés, comme "fn", ne devraient seulement apparaître qu'une fois, et par conséquent le parseur arrête de chercher la propriété après qu'il ait trouvé une occurence. Les occurences supplémentaires sont ignorées.

D'autres propriétés comme "adr", "email", "url", "tel", etc., peuvent (et le font souvent) apparaître plus d'une fois, et par conséquent le parseur continue à regarder chaque occurence dans les contenus du hCard.

parser les propriétés et valeurs de hCard

Une fois qu'un élément pour une propriété est trouvé, les contenus de l'élément sont utilisés pour la valeur.

Il y a plusieurs exceptions pour concilier le XHTML sémantique et plus d'équivalents sémantiques.

propriété email

Pour la propriété "email" en particulier, quand l'élément est :

propriété tel

Pour la propriété "tel" en particulier, quand l'élément est :

propriétés du type URL ou URI

Pour les propriétés qui peuvent prendre un type URL ou les parseurs URI DOIVENT gérer les URLs/URIs relatives et les normaliser selon leurs URLs/URIs absolus respectifs, en suivant les règles de langage du document conteneur pour résoudre les URLs/URIs relatifs (par ex. <base> pour le HTML, xml:base pour XML).

properties de type URL ou URI ou UID

Pour les propriétés qui peuvent prendre les types URL, URI, ou UID, quand l'élément pour cette propriété est :

propriétés pas du type URL ou URI ou UID

Pour les propriétés avec des valeurs qui ne SONT PAS du type URL, URI, ou UID, quand l'élément pour une propriété est :

toutes les propriétés

Pour toutes les propriétés, quand l'élément pour une propriété est :

Pour toutes les propriétés, si l'élément pour une propriété a un enfant ou plus avec un nom de classe "value", alors concaténez les valeurs de noeud pour tous ces éléments enfants avec le nom de classe "value' dans l'ordre du document, et utilisez cette concaténation comme la valeur de la propriété.

gestion espace blanc

Les parseurs hCard devraient gérer le parsage selon les règles de gestion d'espace blanc, avec les deux additions suivantes :

  1. gestion <pre>. Tout contenu parsé en tant que partie d'une propriété hCard qui est à l'intérieur d'un élément <pre> doit préserver tous les espaces-blancs selon les règles de préservation des espaces-blancs.
  2. gestion de <br />. Toute occurence d'un <br /> à l'intérieur de(s) élément(s) pour une valeur doit être traitée comme un retour-chariot (\n) dans l'endroit respectif dans la valeur.

sous-propriétés hCard

Il y a quelques propriétés hCard dont les valeurs elles-même ont une structure (comme des valeurs type structurées) et sont composées de plusieurs morceaux, dont nous faisons référence à des sous-propriétés.

Par exemple, la propriété "n" comporte les sous-propriétés "family-name", "given-name", "additional-name", "honorific-prefix" et "honorific-suffix".

c'est à dire à partir de la section 3.1.2 de la RFC 2426, modifiée pour inclure Ph.D.

N:Public;John;Quinlan;Mr.;Esq.,Ph.D.

Dans hCard cette propriété "n" serait marquée comme :

<span class="n">
 <span class="honorific-prefix">Mr.</span>
 <span class="given-name">John</span>
 <span class="additional-name">Quinlan</span>
 <span class="family-name">Public</span>,
 <span class="honorific-suffix">Esq.</span>,
 <span class="honorific-suffix">Ph.D.</span>
</span>

qui pourrait être aussi restituée comme :

Mr. John Quinlan Public, Esq., Ph.D.

paramètres propriétés hCard

Quelques propriétés hCard ont un paramètre ou plus, plus souvent "type", avec un ensemble numéroté de valeurs. Nous représentons la value spécifique du paramètre comme un nom de classe sur un élément à l'intérieur de l'élément représentant la propriété.

Par exemple, la propriété "adr" a un paramtère type qui prend les valeurs : "dom", "intl", "post", "parcel", "home", "work", "pref".

Le paramètre "type" est traité comme une sous-propriété.

Pour encoder le "type" d'une propriété "adr", un élément imbriqué avec class="type" est utilisé pour baliser le paramètre type.

Exemple avec la propriété "tel" avec une valeur de type "work" :

<span class="tel">
 <span class="type">work</span>: 
 <span class="value">+1.123.456.7890</span>
</span>

extraction Value

Notez l'élément avec class="value" utilisé dans l'exemple au-dessus.

Parfois, seule une partie d'un élément qui est l'équivalent pour une propriété devrait être utilisée pour la valeur de la propriété. Ceci arrive typiquement quand une propriété a un sous-type, comme TEL. Pour ce but, le nom de classe spécial "value" est introduit pour extraire le sous-ensemble de l'élément qui est la valeur de la propriété.

Additions Proposées

Ce sont des additions proposées pour le parsage de hCard. Les implémentations PEUVENT suivre ces conventions afin de gagner en expérience d'implémentation et DEVRAIENT rendre compte des résultats.

gestion élément DEL

Au moment de traiter avec un document HTML qui est encodé hCard, le parseur DEVRAIT honorer l'élément <del>.

Il existe ici deux possibilités (adopter les deux peut être possible) :

1. Sautez toutes les occurences des éléments <del> et leurs contenus entièrement dans les contenus d'une propriété.

2. Si l'élément <del> est utilisé pour une propriété en elle-même, il pourrait être utile comme un moyen de communication de mettre une pierre tombale / rendre obsolète cette valeur particulière de propriété, et de fait alors qu'un parseur en train de convertir vers une vCard DEVRAIT simplement faire ce qui est indiqué dans (1), les applications qui ont directement parsé hCard (plutôt que de seulement supporter vCard) POURRAIENT traiter de telles occurences d'éléments <del> comme un moyen d'ôter l'information obsolète (avec la confirmation de l'utilisateur bien sûr) d'un stockage local de l'information contact.

Mise en Forme Texte Simple du HTML Structurel/Sémantique

Il existe plusieurs éléments structurels/sémantiques dans le HTML qui ont un stylisme utile par défaut qui pourrait être converti en ASCII (plein texte) équivalents à un moyen basse résolution de communiquer cette structure. Notez que <br /> et <pre> sont déjà gérés dans la section titrée ci-dessus Gestion des espaces blancs.

Au moment de parser la propriété DESCRIPTION, convertissez hiérarchiquement les tags HMTL suivants dans leurs équivalents stylisés en plein texte.

Plus d'éléments stimulants

Usage de styles informatiques CSS au lieu de styles par défaut HTML

Plutôt que d'assumer la présentation par défaut pour ces éléments, et utiliser ça pour la base d'une mise en forme en plein-texte, un parseur pourrait utiliser l'équivalent des propriétés respectives équivalentes de style par la machine et les utiliser à la place. Néanmoins, obliger un parseur hCard à implémenter aussi les Feuilles de Styles en Cascade (par ex. CSS1) est hors du champ de la réflexion. Quelques environnements (par ex un navigateur DOM) peuvent déjà fournir cette information et dans ce cas, il peut être facile pour un parseur hCard (par ex. un parseur client javascript) d'utiliser les propriétés informatiques de mise en style. Par ex. au lieu des éléments ci-dessus, les styles suivis par la machine pourraient être utilisés :

Ceci est assez de travail supplémentaire sur lequel je ne suis pas certain que cela vaille la peine de passer du temps et de documenter plus d'équivalents. Les données au-dessus sont suffisantes pour illustrer la possibilité.

Problématiques étonnantes

Problématiques 3

Il pourrait être valable de considérer la définition du parsage en terme de DOM, de façon que cela s'applique au HTML et XHTML également sans ambiguïté.

Problématiques Résolues

Cette section est informative.

Les problématiques suivantes ont été explorées et résolues.

Résolue le 16 septembre 2005

PROBLEMATIQUE 1

Devrions-nous produire les noms de sous-propriété pluriel en versions singulières et simplement permettre plusieurs instances ? par ex. le préfixe singulier honorifique ferait plus de sens s'il était classé tel quel, et la liste implicite par la valeur pour les "honorific-suffix" pourrait être produite de façon plus explicite (et de ce fait plus facilement parsable par une machine) :

<span class="n">
 <span class="honorific-prefix">Mr.</span>
 <span class="given-name">John</span>
 <span class="additional-names">Quinlan</span>
 <span class="family-name">Public</span>,
 <span class="honorific-suffix">Esq.</span>,
 <span class="honorific-suffix">Ph.D.</span>
</span>

RESOLUTION : Adopter des noms de classe singuliers équivalents pour une propriété plurielle et des noms de sous-propriété.


PROBLEMATIQUE 2

Restreindre les valeurs de sous-propriétés "type" à être exprimées en noms de classe semble moins qu'idéal. Cela prend un morceau d'information qui est très souvent visible dans le contenu et le force à être invisible.

Voici un exemple d'un morceau important d'information sur une page web :

http://www.patchlink.com/company/contact.html

Maiilng Address
3370 N. Hayden Road, #123-175
Scottsdale, AZ 85251-6632

Physical Address
8515 E Anderson
Scottsdale, AZ 85255

Notez que le type d'information pour chaque "adr" est explicite dans le contenu. Ce contenu pourrait être balisé comme ceci :

<div class="adr">
<abbr style="display:block" class="type" title="postal,parcel">Adresse Postale</abbr>
<div class="street-address">3370 N. Hayden Road, #123-175</div>
<span class="locality">Scottsdale</span>, <span class="region">AZ</span>
<span class="postal-code">85251-6632</span>
</div>
<div class="adr">
<abbr style="display:block" class="type" title="work,pref">Adresse Physique</abbr>
<div class="street-address">8515 E Anderson</div>
<span class="locality">Scottsdale</span>, <span class="region">AZ</span> 
<span class="postal-code">85255</span>
</div>

RESOLUTION : Le paramètre "type" DOIT être balisé quand le contenu est disponible (comme dans les deux exemples au-dessus). Nous laissons tomber le modèle de nom de classe type-value-as-another.

En outre, parce qu'il y a quelques problèmes potentiels avec le paramètre "type" pour les propriétés TEL et EMAIL. Parce qu'il n'y a pas de sous-propriétés définies (à la différence du post-code de l'ADR, locality, etc) la valeur-noeud complète de TEL est prise comme la valeur. Par exemple :

<span class="tel">+1.123.456.7890 <abbr class="type" title="work">(work)</abbr></span>

serait représenté dans la vCard comme :

TEL;TYPE=work:+123.456.7890 (work)

Nous introduisons une autre sous-propriété class="value" pour permettre l'extraction d'une valeur d'un élément ou pour une propriété.

<span class="tel"><span class="value">+1.123.456.7890</span> <abbr class="type" title="work">(work)</abbr></span>

Alors les parseurs auraient d'abord besoin de chercher class="value" et de prendre la valeur noeud de cela si elle existe plutôt que than class="tel".

Si un ou plusieurs éléments enfants avec le nom de classe de "value" sont présents dans l'élément pour une propriété, alors concaténez les valeurs noeuds de ces éléments enfants (dans l'ordre trouvé) et utilisez ça comme la valeur de la propriété. Ceci serait avant la valeur noeud de l'élément pour une propriété elle-même.

Références

Références Normatives

Références Informatives

Pages Apparentées

La spécification hCard est un chantier en cours. Au fur et à mesure que des aspects supplémentaires sont discutés, compris et écrits, ils seront rajoutés. Ces idées, problématiques et questions sont maintenues sur des pages distinctes.

hcard-parsing-fr was last modified: Saturday, January 3rd, 2009

Views