Best Practice für Metadaten in einem HTML-Dokument?

74

Ich arbeite an einer groß angelegten, öffentlich zugänglichen Webanwendung mit hohem Volumen. Der erfolgreiche Betrieb der Anwendung ist für das Unternehmen sehr wichtig. Daher gibt es eine Reihe von MI-Tools, die dagegen ausgeführt werden.

Eines dieser MI-Tools betrachtet im Wesentlichen das HTML, das für jede Seitenanforderung an den Browser gesendet wird (ich habe es ziemlich vereinfacht, aber für den Zweck dieser Frage ist es ein Tool, das einige Analysen zum HTML-Code durchführt).

Damit dieses MI-Tool die benötigten Daten erhält, fügen wir Metadaten in das head-Element ein. Derzeit machen wir es als HTML-Kommentare:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <!-- details = 52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009] -->
    <!-- policy id = 1234567890 -->
    <!-- party id = 0987654321 -->
    <!-- email address = [email protected] -->
    <!-- error = 49 -->
    <!-- subsessionid = bffd5bc0-a03e-42e5-a531-50529dae57e3-->
    ...

Und das Tool sucht einfach nach einem bestimmten Metadatenkommentar mit einem regulären Ausdruck

Da es sich bei diesen Daten um Metadaten handelt, möchte ich sie in HTML-Metatags ändern, da sie sich semantisch korrekt anfühlen. Etwas wie das:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <meta name="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
    <meta name="policyId" content="1234567890" />
    <meta name="partyId" content="0987654321" />
    <meta name="emailAddress" content="[email protected]" />
    <meta name="error" content="49" />
    <meta name="subsessionid" content="bffd5bc0-a03e-42e5-a531-50529dae57e3" />
    ...

Das fühlt sich semantischer an und ich kann das MI-Tool problemlos zum Laufen bringen - nur ein Fall, in dem die regulären Ausdrücke geändert werden. Jetzt gibt es jedoch ein Problem mit dem w3c-Validator. Es wird nicht validiert, da die von mir verwendeten Metanamen nicht erkannt werden. Ich erhalte die Fehlermeldung "Ungültige Wertdetails für Attributnamen in Element-Meta: Schlüsselwortdetails sind nicht registriert." und es schlägt vor, dass ich diese Namenswerte im WHATWG-Wiki registriere.

Obwohl ich das tun könnte, fühlt es sich nicht richtig an. Einige meiner Meta-Tags sind 'generisch' (wie error und emailAddress), sodass ich wahrscheinlich einen bereits registrierten Namenswert finden und diesen verwenden könnte. Die meisten von ihnen sind jedoch branchenspezifisch / organisationsspezifisch. Es fühlt sich falsch an, einen öffentlichen Namenswert namens subsessionid oder partyId zu registrieren, da diese für meine Organisation und die Anwendung spezifisch sind.

Die Frage ist also: Was wird in diesem Fall als Best Practice angesehen? Soll ich sie als HTML-Kommentare hinterlassen? Sollte ich Meta-Tags wie oben verwenden und mir keine Sorgen machen, dass die w3c-Validierung fehlschlägt? (obwohl dies für die Organisation immer wichtiger wird) Sollte ich versuchen, meine Metanamenwerte im WHATWG-Wiki zu registrieren, aber wissen, dass sie nicht sehr allgemein sind? Oder gibt es eine andere Lösung?

Schätzen Sie Ihre Gedanken, Prost

Nathan


Bearbeitet, um die endgültige Lösung anzuzeigen:

Die vollständige Antwort lautet wie folgt. Es basiert auf der Antwort von Rich Bradshaws, daher ist seine Antwort die akzeptierte, aber der Vollständigkeit halber gehe ich folgendermaßen vor:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="">
<head>
    <meta name="application-name" content="Our app name" 
        data-details="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" 
        data-policyId="1234567890"
        data-partyId="0987654321"
        data-emailAddress="[email protected]"
        data-error="49"
        data-subsessionid="bffd5bc0-a03e-42e5-a531-50529dae57e3"
    />
    ...

Dies bestätigt, also alle Kästchen angekreuzt :)

Nathan Russell
quelle
3
Gemäß der Spezifikation unter whatwg.org/specs/web-apps/current-work/multipage/… dürfen die Datenattribute keine Großbuchstaben enthalten. Mit freundlichen Grüßen. Nicht, dass mich das persönlich beleidigt hätte.
Greg Maletic

Antworten:

42

Die W3C-Validierung ist bedeutungslos. HTML! = XML, daher gibt es kein Schema, um es zu validieren. Kein Browser wird ersticken, weil Sie ein Metaelement mit einem nicht registrierten Namen hinzugefügt haben. Wenn Sie wirklich besorgt sind, können Sie das Datenattribut für ein Metaelement wie das folgende verwenden:

<meta data-details="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" data-policyId="0123456789" />

Zumindest wissen Sie dann, dass keine zukünftige Spezifikation Ihren Daten einen Sinn geben wird.

Weitere Informationen finden Sie unter: http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#custom-data-attribute

Rich Bradshaw
quelle
Vielen Dank, Rich. Ich werde eine kleine Variante Ihrer Antwort verwenden (ich werde sie gleich als Antwort veröffentlichen), aber ich habe Ihre Antwort als akzeptierte Antwort markiert, da es Ihre war, die mich in die Antwort verwies richtige Richtung :)
Nathan Russell
Meine endgültige Antwort wurde als Bearbeitung meiner ursprünglichen Frage veröffentlicht. Danke
Nathan Russell
34

Beachten Sie, dass das Schlüsselwort application-namenur für Webanwendungen gilt , auch wenn Ihr Beispiel möglicherweise funktioniert .

Für übliche Webseiten, die keine Webanwendungen sind oder wenn keine angegeben application-namewerden sollen, siehe einige Alternativen:

Verwenden von data-*Attributen in derhead

Kein metaElement erforderlich .

<!DOCTYPE html>
<html>
<head
    data-details="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" 
    data-policyId="1234567890"
    data-partyId="0987654321"
    data-emailAddress="[email protected]"
    data-error="49"
    data-subsessionid="bffd5bc0-a03e-42e5-a531-50529dae57e3">
</head>

Mikrodaten verwenden

Sie könnten ein Vokabular erstellen, dies ist jedoch für die lokale Verwendung nicht erforderlich .

<!DOCTYPE html>
<html>
<head itemscope>
  <meta itemprop="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />
  <meta itemprop="policyId" content="1234567890" />
  <meta itemprop="partyId" content="0987654321" />
  <link itemprop="emailAddress" href="mailto:[email protected]" /> <!-- or use a meta element if you don’t want to provide a full URI with "mailto:" scheme -->
  <meta itemprop="error" content="49" />
  <meta itemprop="subsessionid" content="bffd5bc0-a03e-42e5-a531-50529dae57e3" />
</head>

Verwenden von Daten in a script

Das scriptElement kann für Datenblöcke verwendet werden . Sie können jedes Format auswählen, das Ihren Anforderungen entspricht. Beispiel mit Klartext:

<!DOCTYPE html>
<html>
<head>
  <script type="text/plain">
    details = 52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]
    policyId = 1234567890
    partyId = 0987654321
    emailAddress = [email protected]
    error = 49
    subsessionid = bffd5bc0-a03e-42e5-a531-50529dae57e3
  </script>
</head>
unor
quelle
3
<meta itemprop="key" content="value" />Vergessen Sie beim Ausprobieren der Methode nicht, itemscopedas Head-Tag festzulegen. Andernfalls schlägt die Validierung im w3c-Validator fehl und gibt an, dass das Attribut itemprop angegeben wurde, das Element jedoch keine Eigenschaft eines Elements ist. Ich habe einige Zeit gebraucht, um das herauszufinden!
Louis Somers
Das Einfügen von Daten- * Attributen in das <head> -Element ist die sauberste Lösung
Velojet
2
Nur als Hinweis: Die Verwendung von <script>Tags ist sehr anfällig für XSS. Selbst wenn Sie Daten validieren, wird ein Angriffsvektor geöffnet. Im Allgemeinen müssten Sie Daten verschlüsseln, zu diesem Zeitpunkt ist es wahrscheinlich besser, ein Meta-Tag zu verwenden
Downgoat
3
Ich rate von data-Attributen im Kopf ab, da der Zeichensatz innerhalb der ersten 512 Bytes des Dokuments liegen muss .
Lucas Basquerotto
2

Was ist, wenn Sie versuchen, das Datenformat zu verwenden, um ihnen ein benutzerdefiniertes Attribut hinzuzufügen, z. B. Datentyp oder Datenname, und das Attribut "Realer Name" weglassen oder alles auf "abstrakt" oder so setzen (ich weiß nicht, ob der Validator dies wünscht) Probleme bei wiederholten Metanamen angeben):

<meta data-name="details" content="52:AS6[rxSdsMd4RgYXJgeabsRAVBZ:0406139009]" />

Sie können also auf diesen Datennamen verweisen, um mit Ihren Meta-Inhalten zu arbeiten ...

http://html5doctor.com/html5-custom-data-attributes/

Onheiron
quelle
0

Beide Optionen würden technisch funktionieren, obwohl die Lösung davon abhängen könnte, wie Ihre Organisation die Seitenüberprüfung beurteilt.

Wie Sie sagen, macht das Hinzufügen von Informationen zu benutzerdefinierten Metadaten-Tags Ihr Markup ungültig.

Für meine Organisation ist die Seitenvalidierung Teil der technischen Zugänglichkeit und wird als sehr wichtig angesehen. Es ist nicht zulässig, etwas zu tun, das die Validierung von Seiten verhindert.

Ich würde nicht versuchen, neue Metadatennamen und -werte zu registrieren, da diese für Ihre Organisation spezifisch sind und nicht für die öffentliche Verwendung bestimmt sind.

Ich würde diese Informationen wahrscheinlich als HTML-Kommentare hinterlassen, wenn dies bereits für Ihre Organisation funktioniert.

Stef Robinson
quelle