HTML5 Microdata-itemref do innego itemscope (osoba pracuje dla Organizacji)

Strona internetowa organizacji, powiedzmy "Sun Industries", chciałaby dodać listę pracowników. Adres i dane kontaktowe organizacji są już obecne na stronie internetowej, ale lista pracowników byłaby gdzie indziej.

Więc mamy

<div id="organization" itemscope itemtype="http://schema.org/Organization">
  <span itemprop="name">Sun Industries</span>,
  <span itemprop="location" itemscope itemtype="http://schema.org/Place">
    <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
      <span itemprop="streetAddress">Technologies Street 42</span>,
      <span itemprop="addressLocality">Venustown</span>
      <span itemprop="postalCode">98765</span>
    </span>
  </span>
</div>

A później w kodzie HTML5 będziemy mieli

<div id="employee-1" itemscope itemtype="http://schema.org/Person">
  <span itemprop="name">John Doe</span>,
  <span itemprop="jobTitle">Sales Manager</span>
</div>

Jak połączyć dwa obiekty "organizacja " i" pracownik-1 " razem?

Próbowałem dodać następujące dziecko do " pracownik-1" obiekt

<meta itemprop="worksFor" itemscope itemtype="http://schema.org/Organization" itemref="organization">

Ale to nie zadziałało(przynajmniej nie w narzędziu do testowania danych strukturalnych Google).

Jak poprawnie używać właściwości microdata itemref w tym przypadku?

Dla jasności, próbowałem również:

  • dodaj itemprop="worksFor" do obiektu "organizacja".
  • Dodaj itemref="organization" do obiektu "pracownik".

Więc

<div id="organization" itemprop="worksFor" itemscope itemtype="http://schema.org/Organization">
  <span itemprop="name">Sun Industries</span>,
  ...
</div>
...
<div id="employee-1" itemscope itemtype="http://schema.org/Person" itemref="organization">
  <span itemprop="name">John Doe</span>,
  <span itemprop="jobTitle">Sales Manager</span>
</div>

Ale to dało mi Warning: Page contains property "worksfor" which is not part of the schema. dla przedmiotu "organizacja".

Author: Meteor, 2013-06-19

3 answers

Właściwie twój ostatni fragment kodu wygląda dobrze. Może z Yandex Validator wyjście będzie bardziej wyraźne

person
  itemType = http://schema.org/Person
  worksfor
    organization
      itemType = http://schema.org/Organization
      name = Sun Industries
  name = John Doe
  jobtitle = Sales Manager

Kilka innych przykładów.

<body>
  <div id="organization" itemscope itemtype="http://schema.org/Organization" itemref="employee-1">
    <span itemprop="name">Sun Industries</span>,
    <span itemprop="location" itemscope itemtype="http://schema.org/Place">
      <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
        <span itemprop="streetAddress">Technologies Street 42</span>,
        <span itemprop="addressLocality">Venustown</span>
        <span itemprop="postalCode">98765</span>
      </span>
    </span>
  </div>
  <div id="employee-1" itemprop="employee" itemscope itemtype="http://schema.org/Person">
    <span itemprop="name">John Doe</span>,
    <span itemprop="jobTitle">Sales Manager</span>
  </div>
</body>

Daje:

organization
  itemType = http://schema.org/Organization
  employee
    person
      itemType = http://schema.org/Person
      name = John Doe
      jobtitle = Sales Manager
  name = Sun Industries
  location
    place
      itemType = http://schema.org/Place
      address
        postaladdress
          itemType = http://schema.org/PostalAddress
          streetaddress = Technologies Street 42
          addresslocality = Venustown
          postalcode = 98765

Lub to

<body>
  <div id="employee-1" itemscope itemtype="http://schema.org/Person">
    <span itemprop="name">John Doe</span>,
    <span itemprop="jobTitle">Sales Manager</span>
    <meta itemprop="worksFor" itemscope itemtype="http://schema.org/Organization"  itemref="organization">
  </div>
  <div id="organization">
    <span itemprop="name">Sun Industries</span>,
    <span itemprop="location" itemscope itemtype="http://schema.org/Place">
      <span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
        <span itemprop="streetAddress">Technologies Street 42</span>,
        <span itemprop="addressLocality">Venustown</span>
        <span itemprop="postalCode">98765</span>
      </span>
    </span>
  </div>
</body>

To daje

person
  itemType = http://schema.org/Person
  name = John Doe
  jobtitle = Sales Manager
  worksfor
    organization
    itemType = http://schema.org/Organization
    name = Sun Industries
    location
      place      
        itemType = http://schema.org/Place
        address
          postaladdress
            itemType = http://schema.org/PostalAddress
            streetaddress = Technologies Street 42
            addresslocality = Venustown
            postalcode = 98765

Spec nie jest zbyt jasne o użyciu itemref ale przykład pomaga

<div itemscope id="amanda" itemref="a b"></div>
<p id="a">Name: <span itemprop="name">Amanda</span></p>
<div id="b" itemprop="band" itemscope itemref="c"></div>
<div id="c">
 <p>Band: <span itemprop="name">Jazz Band</span></p>
 <p>Size: <span itemprop="size">12</span> players</p>
</div>
 27
Author: ajax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-21 07:40:47

Twój ostatni przykład jest poprawny.
(Narzędzie testujące Google nie daje już wspomnianego błędu. Wtedy prawdopodobnie nie były na bieżąco z nowymi dodatkami do Schema.org słownictwo.)

Specyfikacja

Linki do Specyfikacji itemref:

Tl; dr :

  1. określasz itemref na element (z itemscope), do którego chcesz dodać właściwości.
  2. określasz id na elemencie (z itemprop), który chcesz dodać.

Przykłady

Minimalny przykład:

<div itemprop="worksFor" itemscope itemtype="http://schema.org/Organization" id="org">
  <!-- this property (worksFor) gets added to the Person item below -->
</div>

<div itemscope itemtype="http://schema.org/Person" itemref="org">
  <!-- looks for the element with the ID "org" -->
</div>

Jest to równoważne:

<div itemscope itemtype="http://schema.org/Person">

  <div itemprop="worksFor" itemscope itemtype="http://schema.org/Organization">
  </div>

</div>

Inne przykłady:

Aby pamiętać

  • Atrybut itemref może być używany tylko dla elementów w tym samym dokumencie.

  • Możesz odwoływać się do wielu elementów z jednego atrybutu itemref (oddziel tokeny ID znakami spacji).

  • Element odniesienia może być kontenerem dla wielu właściwości.

  • Musisz upewnić się, że wymienione elementy nie są potomkami elementu z itemscope, w przeciwnym razie ich właściwości będą dodawane do tego elementu również (ale można to obejść przez dodanie manekina itemscope).

 4
Author: unor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:32:35

Istnieją 2 sposoby łączenia danych schematu.

  1. itemid: Link 2 complete objects (ie Organisation & Person)
  2. itemref : Link 1 kompletny obiekt do 1 niekompletny obiekt (tj. artykuł i komentarze)

Pierwszy jest łatwy. Wystarczy dodać właściwość itemid do elementu, który chcesz połączyć i dodać link do innego elementu:

<div itemid='#org' itemscope itemType='http://schema.org/Organization'>
    <!-- ..... -->
</div>

<article itemscope itemType='http://schema.org/Article'>
    <link itemprop='publisher' href='#org'>
</article>

Drugi nie jest taki łatwy. Co jeśli komentarze do Twojego wpisu na blogu są gdzieś daleko. Jak łączysz je ze swoim postem na blogu? Możesz utworzyć pusty element o identyfikatorze, a następnie połączyć go z postem na blogu w następujący sposób:]}

<div id="comments" itemscope>
    <span itemprop="commentCount">0</span>
</div>

<div id="words" itemscope>
    <span itemprop="wordCount">0</span>
</div>

Nie musimy dawać komentarzy itemType. Wystarczy dodać itemscope. W ten sposób nie otrzymujemy błędów walidacji. Teraz możemy połączyć komentarze z powrotem do postu na blogu w następujący sposób:

<div itemscope itemtype="http://schema.org/BlogPosting" itemref="comments words">
    <!-- .... -->
</div>
Tada! Udało nam się nawet zaimportować wordCount.
 0
Author: Walter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 22:35:20