liebewinter: Fehlende Elemenn in RDFa

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,

 Test von structured-data

Es fehl mir ein Element, wie die andere screehot zeigt,

 Test von structured-data, der fehlende element

Kann Bitte jemand hilfe mit diese Probleme , Danke!

akzeptierte Antworten

  1. 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>
    

     Test von structured-data

    Es fehl mir ein Element, wie die andere screehot zeigt,

     Test von structured-data, der fehlende element

    Welches Element fehlt denn?

    Meiner Meinung nach dürfen meta-Elemente nur im head vorkommen.

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
    1. 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>
      
    2. @@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 🖖

      --
      Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
      1. @@Gunnar Bittersmann

        Mit property-Attribut (RDFa) bzw. itemprop (Microdata 🤮) versehen dürfen meta-Elemente auch im body 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 🖖

        --
        Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
        1. (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...

          1. @@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 🖖

            --
            Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
            1. Viele dank für deinen Erklärung!

  2. @@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:

    RDF-Graph

    LLAP 🖖

    --
    Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.

    1. womit nicht die Semantik bezogen auf die Dokumentstruktur gemeint ist ↩︎

    1. 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,

      zeigt test von search.google.com/structured-data

      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).

    2. @@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 🖖

      --
      Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
    3. @@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": "{{ id }}",
        "name": "{{ title }}{% if subtitle %}  {{ subtitle }}{% endif %}",
        "author": {
          "@type:" "Person",
          "name": "{{ author }}"
        },
        "inLanguage": "{{ lang }}"
      }
      </script><main>
        <h1>
          <span class="title">{{ title }}</span>
      {% if subtitle %}
          <span hidden=""></span>
          <span class="subtitle">{{ subtitle }}</span>
      {% endif %}
        </h1>
        <p>
          <b>Author:</b>
          {{ author }}
        </p>
      </main>
      

      LLAP 🖖

      --
      Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
      1. 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,

        screenshot was ich bekomme

        und sollte gleiche bekomme....

        1. @@liebewinter

          screenshot was ich bekomme

          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 🖖

          --
          Wenn der Faschismus wiederkommt, wird er nicht sagen: Hallo, ich bin der Faschismus! Sondern er wird sagen: Ich nehme die Wahl an.
          1. danke have ich nicht bemerke...😳