Fehlende Elemenn in RDFa
liebewinter
- meinung
- schema.org
Hallo, ich will eBooks auf meine Website anbite. Ich versuche mit RDFa Lite mache.Ich habe si geschriebe,
<main vocab="http://schema.org/" typeof="eBook">
<h2 class="title-book">Free Linux e-Books for Newbies and Administrators</h2>
<h1>Introduction to Linux </h1>
<h2>A Hands on Guide</h2>
<p><b>Author: </b> Machtelt Garrels</p>
<span typeof="Book" resource="http://en.tldp.org/LDP/intro-linux/html/index.html">
<meta property="name" content="Introduction to Linux - A Hands on Guide"/>
<meta property="author" typeof="Person" content="Machtelt Garrels"/>
<span property="about" content="textbook, English">
</span>
</span>
aber wenn test mit Testtool für strukturierte Daten, bekomme diese screenshot,
Es fehl mir ein Element, wie die andere screehot zeigt,
Kann Bitte jemand hilfe mit diese Probleme , Danke!
Hallo liebewinter,
<main vocab="http://schema.org/" typeof="eBook"> <h2 class="title-book">Free Linux e-Books for Newbies and Administrators</h2> <h1>Introduction to Linux </h1> <h2>A Hands on Guide</h2> <p><b>Author: </b> Machtelt Garrels</p> <span typeof="Book" resource="http://en.tldp.org/LDP/intro-linux/html/index.html"> <meta property="name" content="Introduction to Linux - A Hands on Guide"/> <meta property="author" typeof="Person" content="Machtelt Garrels"/> <span property="about" content="textbook, English"> </span> </span>
Es fehl mir ein Element, wie die andere screehot zeigt,
Welches Element fehlt denn?
Meiner Meinung nach dürfen meta-Elemente nur im head vorkommen.
Bis demnächst
Matthias
danke für deine antwort!
Welches Element fehlt denn?
Der Author...
Meiner Meinung nach dürfen meta-Elemente nur im head vorkommen.
Ich benuzte meta auf der Innere Seite, Beispiel wie have schema.org in meine seite,
<main vocab="http://schema.org">
<article typeof="NewsArticle">
<h1 property="headline name">How to change my Username in Linux</h1>
<link property="image" href="https://linuxusers.net/ubuntu/Photo/linux.png" />
<meta property="name" content="Linux username home folder" />
<meta property="mainEntityOfPage" content="http://google.com" />
<meta property="datePublished" content="2019-07-07" />
<span property="dateModified" content="2019-08-26">
<span property="publisher" typeof="Organization">
<meta property="name" content="https://linuxusers.net" />
<span property="logo" typeof="ImageObject">
<link property="contentUrl url" href="https://linuxusers.net/ubuntu/Photo/linux.png" title="How to change my Username in Linux"/>
</span>
</span>
</span>
<div property="text">How to change or rename the username and home folder in Linux, here I will explain how to rename the username, home folder name and login user name.
</div>
<span property="author" typeof="Person" >
<meta property="name" content="https://linuxusers.net" />
</span>
@@Matthias Apsel
Meiner Meinung nach dürfen meta-Elemente nur im head vorkommen.
Nein. Mit property
-Attribut (RDFa) bzw. itemprop
(Microdata 🤮) versehen dürfen meta
-Elemente auch im body
stehen.
LLAP 🖖
@@Gunnar Bittersmann
Mit
property
-Attribut (RDFa) bzw.itemprop
(Microdata 🤮) versehen dürfenmeta
-Elemente auch imbody
stehen.
Nützlich für Metainformationen, die dem Nutzer auf der Seite gar nicht ausgegeben werden (wie im Beispiel inLanguage
).
Oder für Metainformationen, die für Nutzer und RDF-Parser andere Werte haben, bspw. „in English“ vs. "en"
:
<p>
(in English)
<meta property="inLanguage" content="en"/>
</p>
Auch möglich:
<p property="inLanguage" content="en">
(in English)
</p>
AFAIS ist das content
-Attribut für beliebige Elemente aber nicht Bestandteil von RDFa Lite, sondern nur von der Vollversion. Es wird möglicherweise nicht von allen Parsern verstanden.
Ergänzung: Bei Daten/Uhrzeiten ist ein content
-Attribut nicht nötig. Dem Nutzer wird der Elementinhalt angezeigt; der RDF-Parser holt sich den Wert aus dem datetime
-Attribut:
<time property="dateCreated" datetime="2020-02-15">
15. Februar 2020
</time>
LLAP 🖖
(vocab="http://schema.org/" würde ich aber ganz oben beim html-Element unterbringen.)
ich have versuche ganz oben zu bringen <html vocab="http://schema.org/ lang="en">
aber bekomme Fehler..
Den Gedankenstrich habe ich in ein verstecktes Element gepackt, damit er im Wert für
name
vorhanden ist.
<header property="name">
<h1>Introduction to Linux</h1>
<span hidden="">–</span>
<p>A Hands on Guide</p>
</header>
Warum? ich nicht verstehe warum diese Gedankenstrich wird gegeben...
@@liebewinter
aber bekomme Fehler..
Aha.
Den Gedankenstrich habe ich in ein verstecktes Element gepackt, damit er im Wert für
name
vorhanden ist.<header property="name"> <h1>Introduction to Linux</h1> <span hidden="">–</span> <p>A Hands on Guide</p> </header>
Warum? ich nicht verstehe warum diese Gedankenstrich wird gegeben...
Ohne den Gedankenstrich im Markup wäre der Wert von name
ja Introduction to Linux A Hands on Guide
ohne Trenner. Das ist nicht das, was man möchte.
LLAP 🖖
Viele dank für deinen Erklärung!
@@liebewinter
<main vocab="http://schema.org/" typeof="eBook">
Es gibt in Schema.org keinen Typen eBook
, siehe subtypes of CreativeWork
.
(Kann es auch gar nicht geben; Typen fangen mit einem Großbuchstaben an.)
<h2 class="title-book">Free Linux e-Books for Newbies and Administrators</h2> <h1>Introduction to Linux </h1> <h2>A Hands on Guide</h2> <p><b>Author: </b> Machtelt Garrels</p> <span typeof="Book" resource="http://en.tldp.org/LDP/intro-linux/html/index.html"> <meta property="name" content="Introduction to Linux - A Hands on Guide"/> <meta property="author" typeof="Person" content="Machtelt Garrels"/> <span property="about" content="textbook, English"> </span> </span>
Das macht so gar keinen Sinn. RDFa ist dafür gedacht, im Markup bereits vorhandenen Inhalten eine Bedeutung zu geben, d.h. sie semantisch[1] auszuzeichnen.
Also eben nicht alles doppelt zu notieren (und zu pflegen!): einmal für die Ausgabe für den Nutzer und einmal für maschinelle Verarbeitung in meta
-Attributen. Wenn du das wollen würdest, wäre (eingebundenes) JSON-LD das Mittel der Wahl:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Book",
"@id": "http://en.tldp.org/LDP/intro-linux/html/index.html",
"name": "Introduction to Linux - A Hands on Guide",
"author": {
"@type:" "Person",
"name": "Machtelt Garrels"
}
}
</script>
Wie du siehst, sind das strukturierte Daten: Der Wert von author
ist ein Knoten (ein {}
-Block); die Eigenschaften darin (@type
und name
) beziehen auf den Knoten (den Autor), nicht auf das Ganze (das Buch).
Diese Struktur muss man auch gewährleisten, wenn man das in RDFa notiert – durch entsprechende Verschachtelung der HTML-Elemente:
<p property="author" typeof="Person">
<b>Author:</b>
<span property="name">Machtelt Garrels</span>
</p>
(Übers b
-Element für „Author“ könnte man auch streiten. Möglich wäre hier auch dl
mit (div
,) dt
und dd
zu verwenden. Und footer
statt p
, siehe Beispiel.)
Aber der Reihe nach. Das Außenrum war bis auf den Typen schon richtig:
<main typeof="Book" vocab="http://schema.org/">
Oder auch nicht. Eine Überschrift „Free Linux e-Books for Newbies and Administrators“ (das müsste dann die Hauptüberschrift sein, also h1
) und eine Überschrift „Introduction to Linux - A Hands on Guide“ (das müsste dann eine Unterüberschrift sein , also h2
)? Werden denn auf der Seite noch weitere Bücher vorgestellt?
Wenn ja, dann muss jedes Buch seinen eigenen Block mit typeof="Book"
bekommen:
<main vocab="http://schema.org/">
<h1>Free Linux e-Books for Newbies and Administrators</h1>
<section typeof="Book">
<h2>Introduction to Linux - A Hands on Guide</h2>
⋮
</section>
<section typeof="Book">
<h2>…</h2>
⋮
</section>
⋮
</main>
(vocab="http://schema.org/"
würde ich aber ganz oben beim html
-Element unterbringen.)
Wenn es nur um dieses eine Buch geht (wovon ich im Folgenden ausgehe), wäre „Introduction to Linux - A Hands on Guide“ die Hauptüberschrift h1
– und nicht h1
und h2
. Wenn du das aufteilen willst, dann so:
<h1>
<span class="title">Introduction to Linux</span>
<span class="subtitle">A Hands on Guide</span>
</h1>
oder
<header>
<h1>Introduction to Linux</h1>
<p>A Hands on Guide</p>
</header>
Mit RDFa:
<h1 property="name">
<span class="title">Introduction to Linux</span>
<span hidden="">–</span>
<span class="subtitle">A Hands on Guide</span>
</h1>
bzw.
<header property="name">
<h1>Introduction to Linux</h1>
<span hidden="">–</span>
<p>A Hands on Guide</p>
</header>
Den Gedankenstrich habe ich in ein verstecktes Element gepackt, damit er im Wert für name
vorhanden ist.
Apropos Strich: Ich würde sagen, da fehlt einer, es müsste „A Hands-on Guide“ heißen.
<span property="about" content="textbook, English">
about
hast du falsch verwendet. Zur Angabe der Sprache gibt es inLanguage
– als Wert bevorzugt den Sprachcode, also en
. Wenn diese Information nicht im auf der Seite ausgebenen Inhalt angeben ist, dann ist dafür ein meta
-Element angebracht.
Alles zusammen:
<main typeof="Book" vocab="http://schema.org/">
<h1 property="name">
<span class="title">Introduction to Linux</span>
<span hidden="">–</span>
<span class="subtitle">A Hands on Guide</span>
</h1>
<p property="author" typeof="Person">
<b>Author:</b>
<span property="name">Machtelt Garrels</span>
</p>
<meta property="inLanguage" content="en"/>
</main>
Wenn mehrere Bücher auf der Seite vorgestellt werden, muss das wie oben beschrieben abgewandelt werden.
aber wenn test mit Testtool für strukturierte Daten, bekomme diese screenshot,
Zum Testen gibt’s auch RDFa Play. Ergibt für das gezeigte Markup:
LLAP 🖖
womit nicht die Semantik bezogen auf die Dokumentstruktur gemeint ist ↩︎
Ich bin sehr dankbar für deine Bemühungen!
Wenn Test deine Beispiel mit search.google.com/structured-data bekomme gleiche Warnung, es fehlt ein Element, screenshot vom Test,
Wen test mit http://rdfa.info/play/, bekomme gleich Bild wie deine...
Entschuldigung ich habe besser deine kommentar gelese, du sagst hier warum..
Wie du siehst, sind das strukturierte Daten: Der Wert von author ist ein Knoten (ein {}-Block); die Eigenschaften darin (@type und name) beziehen auf den Knoten (den Autor), nicht auf das Ganze (das Buch).
@@Gunnar Bittersmann
siehe Beispiel
Der musikalischen Einlage vorausgegangen war passenderweise mein Vortrag (Video und Folien) über ebendieses Thema: semantische Auszeichnung der Bedeutung mit Schema.org und RDFa. Wie der Titel ja schon erahnen lässt: nuqjatlh (What does it mean?) 😆
LLAP 🖖
@@Gunnar Bittersmann
RDFa ist dafür gedacht, im Markup bereits vorhandenen Inhalten eine Bedeutung zu geben, d.h. sie semantisch auszuzeichnen.
Also eben nicht alles doppelt zu notieren (und zu pflegen!): einmal für die Ausgabe für den Nutzer und einmal für maschinelle Verarbeitung in
meta
-Attributen. Wenn du das wollen würdest, wäre (eingebundenes) JSON-LD das Mittel der Wahl:
JSON-LD dürfte auch Mittel der Wahl sein, wenn man eine Template-Engine verwendet. Dann kann man Dinge ja mehrfach im Markup notieren, pflegt sie aber trotzdem nur an einer Stelle.
Dann muss man sich nicht mit RDFa abmühen à la
<main typeof="Book" vocab="http://schema.org/">
<h1 property="name">
<span class="title">{{ title }}</span>
{% if subtitle %}
<span hidden="">–</span>
<span class="subtitle">{{ subtitle }}</span>
{% endif %}
</h1>
<p property="author" typeof="Person">
<b>Author:</b>
<span property="name">{{ author }}</span>
</p>
<meta property="inLanguage" content="{{ lang }}"/>
</main>
JSON-LD mag einfacher sein:
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Book",
"@id": "___TWIG0___",
"name": "___TWIG1______TWIG2___ – ___TWIG3______TWIG4___",
"author": {
"@type:" "Person",
"name": "___TWIG5___"
},
"inLanguage": "___TWIG6___"
}
</script>
⋮
<main>
<h1>
<span class="title">___TWIG7___</span>
___TWIG8___
<span hidden="">–</span>
<span class="subtitle">___TWIG9___</span>
___TWIG10___
</h1>
<p>
<b>Author:</b>
___TWIG11___
</p>
</main>
LLAP 🖖
Entschuldigung für die störung...
Jetzt versuche gleich mache wie mit dem Erste Buch,
<section class="a">
<h1 property="name">
<span class="title">Introduction to Linux</span>
<span hidden="">–</span>
<span class="subtitle">A Hands on Guide</span>
</h1>
<p property="author" typeof="Person">
<b>Author:</b>
<span property="name">Machtelt Garrels</span>
</p>
<meta property="inLanguage" content="en"/>
</section>
Auf der Zweite Buch,
<section typeof="Book" class="a" >
<h1 property="name">
<span class="title">The Linux Command Line</span>
</h1>
<p property="author" typeof="Person">
<p><b>Author: </b>
<span property="name">William Shotts</span>
</p>
<meta property="inLanguage" content="en"/>
aber bekomme diese sreenshot,
und sollte gleiche bekomme....
@@liebewinter
Du meinst, dass der Name des Autors fehlt?
<section typeof="Book" class="a" > <h1 property="name"> <span class="title">The Linux Command Line</span> </h1> <p property="author" typeof="Person"> <p><b>Author: </b> <span property="name">William Shotts</span> </p> <meta property="inLanguage" content="en"/>
Klar, das <span property="name">
-Element ist beim zweiten Buch ja auch kein Nachfahrenelement von <p property="author" typeof="Person">
.
LLAP 🖖
danke have ich nicht bemerke...😳