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 :)
quelle
Antworten:
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
quelle
Beachten Sie, dass das Schlüsselwort
application-name
nur für Webanwendungen gilt , auch wenn Ihr Beispiel möglicherweise funktioniert .Für übliche Webseiten, die keine Webanwendungen sind oder wenn keine angegeben
application-name
werden sollen, siehe einige Alternativen:Verwenden von
data-*
Attributen in derhead
Kein
meta
Element 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
script
Element 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>
quelle
<meta itemprop="key" content="value" />
Vergessen Sie beim Ausprobieren der Methode nicht,itemscope
das 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!<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 verwendendata-
Attributen im Kopf ab, da der Zeichensatz innerhalb der ersten 512 Bytes des Dokuments liegen muss .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/
quelle
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.
quelle