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

Lesezeit: 7 Minuten

Benutzer-Avatar
Nathan Russel

Ich arbeite an einer groß angelegten, hochvolumigen, öffentlich zugänglichen Webanwendung. Der erfolgreiche Betrieb der Anwendung ist für das Unternehmen sehr wichtig, und daher gibt es eine Reihe von MI-Tools, die dagegen laufen.

Eines dieser MI-Tools untersucht 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 des HTML 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 Metadaten-Kommentar mit einer Regex

Da es sich bei diesen Daten um Metadaten handelt, möchte ich sie in HTML-Meta-Tags ä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 dazu bringen, damit zu arbeiten – nur ein Fall, in dem die regulären Ausdrücke geändert werden müssen. Allerdings gibt es jetzt 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 Attributname auf Elementmeta: Schlüsselwortdetails sind nicht registriert.“ und es schlägt vor, dass ich diese Namenswerte im WHATWG-Wiki registriere.

Obwohl ich das könnte, fühlt es sich nicht richtig an. Einige meiner Meta-Tags sind „allgemein“ (z. B. Fehler und E-Mail-Adresse), sodass ich wahrscheinlich einen bereits registrierten Namenswert finden und diesen verwenden könnte. Die meisten von ihnen sind jedoch branchen-/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 gilt in diesem Fall als Best Practice? 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 das für die Organisation immer wichtiger wird) Sollte ich versuchen, meine Meta-Namenswerte im WHATWG-Wiki zu registrieren, obwohl ich weiß, dass sie nicht sehr allgemein sind? Oder gibt es eine andere Lösung?

Schätze deine Gedanken, Prost

Nathan


Bearbeitet, um die endgültige Lösung zu zeigen:

Die vollständige Antwort, mit der ich gehe, lautet wie folgt. Es basiert auf Rich Bradshaws Antwort, also ist seine die akzeptierte, aber der Vollständigkeit halber gehe ich mit:

<!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 sind alle Kästchen angekreuzt 🙂

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

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

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

Für weitere Informationen lesen Sie: http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#custom-data-attribute

  • Danke, Rich – ich werde mit einer leichten Variante Ihrer Antwort fortfahren (ich werde sie gleich als Antwort posten), aber ich habe Ihre Antwort als akzeptierte Antwort markiert, da Ihre Antwort mich darauf hingewiesen hat richtige Richtung 🙂

    – Nathan Russel

    10. Mai 2012 um 13:11 Uhr

  • Meine letzte Antwort wurde als Bearbeitung meiner ursprünglichen Frage gepostet. Vielen Dank

    – Nathan Russel

    10. Mai 2012 um 13:17 Uhr

Benutzer-Avatar
unoder

Auch wenn Ihr Beispiel funktioniert, beachten Sie, dass das Schlüsselwort application-name ist für Web Applikationen nur.

Für übliche Webseiten, die keine Webanwendungen sind, oder wenn nein application-name angegeben werden, siehe einige Alternativen:

Verwenden data-* Attribute in der head

Keine Notwendigkeit für ein meta Element.

<!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>

Verwendung von Mikrodaten

Sie könnten ein Vokabular erstellen, aber das ist 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="https://stackoverflow.com/questions/10533764/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 script Element kann für Datenbausteine ​​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>

  • Beim Ausprobieren der <meta itemprop="key" content="value" /> Methode, nicht vergessen einzustellen itemscope im Head-Tag. Andernfalls schlägt die Validierung auf dem w3c-Validierer fehl, der besagt: “Das itemprop-Attribut wurde angegeben, aber das Element ist keine Eigenschaft eines Elements.”. Ich habe einige Zeit gebraucht, um das herauszufinden!

    – Louis Somers

    22. Juli 2014 um 21:40 Uhr

  • Das Einfügen von data-*-Attributen in das -Element ist bei weitem die sauberste Lösung

    – Velojet

    9. Februar 2018 um 2:57 Uhr

  • Nur als Hinweis: Verwenden <script> Tags sind sehr anfällig für XSS. Selbst wenn Sie Daten validieren, öffnet dies einen Angriffsvektor. Im Allgemeinen müssten Sie Daten codieren, wobei es an diesem Punkt wahrscheinlich besser ist, ein Meta-Tag zu verwenden

    – Ziegenbock

    16. Oktober 2018 um 1:32 Uhr

  • Ich rate davon ab data- Attribute im Kopf, weil der Zeichensatz muss sich innerhalb der ersten 512 Bytes des Dokuments befinden.

    – Lukas Basquerotto

    5. Dezember 2019 um 12:50 Uhr


Was ist, wenn Sie versuchen, das Datenformat zu verwenden, um ihnen ein benutzerdefiniertes Attribut hinzuzufügen, so etwas wie Datentyp oder Datenname, und das Attribut des echten Namens weglassen oder vielleicht alles auf “abstrakt” oder so setzen (ich weiß nicht, ob der Validator das tut Probleme bei wiederholten Metanamen geben):

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

Sie könnten also auf diesen Datennamen verweisen, um mit Ihrem Meta-Zeug zu arbeiten …

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

Beide Optionen würden technisch funktionieren, obwohl die Lösung davon abhängen könnte, wie Ihre Organisation über die Seitenvalidierung denkt.

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

Für meine Organisation ist die Seitenvalidierung Teil der technischen Barrierefreiheit und wird als sehr wichtig angesehen. Alles, was die Validierung von Seiten verhindern würde, wäre nicht erlaubt.

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

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

1316060cookie-checkBest Practice für Metadaten in einem HTML-Dokument?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy