เชื่อมโยง Microdata <div> หลาย ๆ ตัวเข้าด้วยกันไหม?


11

ฉันกำลังเพิ่มเครื่องหมายความหมายของ schema.org และต้องการเชื่อมโยงหลายรายการซึ่งอยู่ในส่วนต่าง ๆ ของหน้าเว็บเข้าด้วยกัน

สิ่งนี้ใช้ได้เมื่อฉันระบุว่าเป็นผู้ปกครอง / ลูก:

<div itemscope itemtype="http://schema.org/ExerciseAction">
  <span itemprop="distance">11 km</span>
  <div itemprop="event" itemscope itemtype="http://schema.org/Event">
      <span itemprop="name">first event</span>
      <span itemprop="startDate">2001-01-01</span>
  </div>
</div>

อย่างไรก็ตามฉันไม่ทราบวิธีเชื่อมโยงเมื่อคั่นด้วยภูเขา HTML:

<div itemscope itemtype="http://schema.org/Event">
      <span itemprop="name">some event</span>
      <span itemprop="startDate">2002-02-02</span>
</div>

<!-- 
   ....
   zillion other HTML stuff
   ...
 -->

<div itemscope itemtype="http://schema.org/ExerciseAction">
      <span itemprop="distance">22 km</span>
</div>

ฉันเดาว่าฉันควรใช้ "itemref" หรือบางอย่างเพื่อเชื่อมโยงขอบเขตที่เกี่ยวข้อง แต่ฉันไม่สามารถใช้งานได้ การดูคำถามที่คล้ายกันไม่ได้ช่วยในกรณีนี้

อัปเดต: โปรดทราบว่าฉันกำลังมองหาโซลูชันที่ทำงานผ่านการอ้างอิงบางประเภทโดยเฉพาะและไม่สามารถใช้งานได้กับการซ้อนประเภทใด ๆ นอกจากนี้การสั่งซื้อตัวอย่างที่สอง (ไม่ทำงาน) จะต้องคงอยู่เหมือนเดิม (กิจกรรมแรก, การออกกำลังกายที่สอง) (มีสาเหตุหลายประการที่นอกเหนือการควบคุมของฉัน)

โดยเฉพาะ "มันใช้งานได้" ถูกกำหนดให้เป็นเครื่องมือตัวอย่างข้อมูลของ Googleอย่างน้อยที่สุดซึ่งแสดงว่ารายการนั้นเชื่อมโยงกัน (เช่นเดียวกับตัวอย่างการทำงานแรก)

คำตอบ:


9

คุณสามารถใช้itemrefคุณสมบัติ

จากข้อมูลจำเพาะMicrodata ( W3C Working Group Note ):

  • 4.2 ไวยากรณ์พื้นฐาน :

    คุณสมบัติที่ไม่ใช่ลูกหลานขององค์ประกอบที่มีitemscopeคุณสมบัติสามารถเชื่อมโยงกับรายการโดยใช้itemrefแอตทริบิวต์ แอ็ตทริบิวต์นี้ใช้รายการ ID ขององค์ประกอบในการรวบรวมข้อมูลเพิ่มเติมจากการรวบรวมข้อมูลลูก ๆ ขององค์ประกอบด้วยitemscopeแอตทริบิวต์

  • 5.2 รายการitemref ::

    องค์ประกอบที่มีitemscopeแอตทริบิวต์อาจมีการitemrefระบุแอตทริบิวต์เพื่อให้รายการองค์ประกอบเพิ่มเติมเพื่อรวบรวมข้อมูลเพื่อค้นหาคู่ค่าชื่อของรายการ


แก้ไข : สิ่งนี้ควรทำงานตามข้อกำหนดที่ระบุไว้ในคำถาม:

<div itemprop="event" itemscope itemtype="http://schema.org/Event" id="event001">
  <span itemprop="name">first event</span>
  <span itemprop="startDate">2001-01-01</span>
</div>

<!-- zillion other HTML stuff -->

<div itemscope itemtype="http://schema.org/ExerciseAction" itemref="event001">
  <span itemprop="distance" id="entfernung">11 km</span>
</div>

แก้ไข 2 (ตามข้อกำหนดเพิ่มเติม ): หากองค์ประกอบพาเรนต์ระบุรายการอื่น (เช่นWebPageบนbody) การแก้ปัญหาด้านบนไม่ทำงานเนื่องจากeventคุณสมบัติจะใช้กับWebPageซึ่งจะไม่ถูกต้อง

ไม่มีวิธีแก้ปัญหาที่เรียบร้อยสำหรับเรื่องนี้

การแก้ไขน่าเกลียดจะเพิ่มรายการอื่น (กับitemscope) แต่ไม่มีชนิดใด ๆ (ไม่itemtype) Eventเป็นผู้ปกครองของ ด้วยวิธีนี้eventคุณสมบัติจะใช้กับรายการที่ไม่มีการพิมพ์WebPageนี้ไม่ใช่

<body itemscope itemtype="http://schema.org/WebPage">

  <div itemscope> <!-- dummy item -->
    <div itemprop="event" itemscope itemtype="http://schema.org/Event" id="event001">
      <span itemprop="name">first event</span>
      <span itemprop="startDate">2001-01-01</span>
    </div>
  </div>

  <!-- zillion other HTML stuff -->

  <div itemscope itemtype="http://schema.org/ExerciseAction" itemref="event001">
    <span itemprop="distance" id="entfernung">11 km</span>
  </div>

</body>

คุณสามารถยกตัวอย่างที่จะได้รับด้านบนหรือไม่ ฉันได้พยายามสำหรับชั่วโมงและไม่ได้จัดการที่จะได้ไปทำงาน (การตรวจสอบบนเช่นgoogle เครื่องมือเกร็ดเล็กเกร็ดน้อยที่อุดมไปด้วย ) ทั้งหมดที่ฉันสามารถทำคือการทำให้มันรวมหลายคู่ชื่อ = ค่าอื่น ๆ ที่มีการทำซ้ำใน itemscope อื่นและมีชื่อเดียวกัน - เป็นที่กล่าวถึงในคำถามที่คล้ายกัน ; แต่ฉันไม่ได้จัดการที่จะรวม itemscope อื่น - ซึ่งเป็นคำถาม)
Matija Nalis

@MatijaNalis: ฉันได้เพิ่มตัวอย่างในคำตอบของฉัน
UNOR

ขอบคุณนั่นเป็นสิ่งที่ฉันกำลังมองหา! มันจะเชื่อมโยงมันเข้าด้วยกันตามที่ต้องการในตัวอย่าง HTML แบบสแตนด์อโลนที่ทำให้ง่ายขึ้น น่าเสียดายที่เครื่องมือข้อมูลโค้ด Google richมีข้อผิดพลาดในตัวอย่างที่ซับซ้อนกว่าด้วย "ข้อผิดพลาด: หน้ามีคุณสมบัติ" เหตุการณ์ "ซึ่งไม่ได้เป็นส่วนหนึ่งของสคีมา" (ทั้งหน้ามี div parent มากกว่าตัวที่เป็นปัญหาอยู่ตัวอย่างเช่นschema.org/Webpage )
Matija Nalis

ความคิดใดที่จะแก้ไขได้อย่างไร การลบitemprop = "event"ออกจาก schema.org/Event ไม่ได้ช่วยเพราะจะไม่เชื่อมโยง itemscopes ด้วยกันดังนั้น ...
Matija Nalis

@MatijaNalis: ฉันเพิ่มตัวอย่างอื่น แต่สิ่งนี้อาจไม่สามารถแก้ไขปัญหานี้ได้ ฉันเดาว่าคุณจะต้องแยกWebPageมาร์กอัปหลักและใช้ที่itemrefนั่นด้วยเพื่อที่จะไม่รวมประเภทไอเท็ม (ไม่เกี่ยวข้อง) เป็นรายการย่อย น่าจะเป็นคำถามอื่น
unor

1

หากฉันเข้าใจคำถามของคุณถูกต้องอย่าปิด div นั้น

<div itemscope itemtype="http://schema.org/Event">
  <span itemprop="name">some event</span>
  <span itemprop="startDate">2002-02-02</span>


<!-- ....zillion other HTML stuff... -->

    <div itemscope itemtype="http://schema.org/ExerciseAction">
      <span itemprop="distance">22 km</span>
    </div>
</div>

ตราบใดที่ไม่พบแท็กที่ตรงกันอะไรก็ตามที่อยู่ภายใน div เริ่มต้นนั้นจะยังถือว่าเป็นส่วนหนึ่งของ div เริ่มต้นนั้นในกรณีนั้นเหตุการณ์


น่าเสียดายที่ฉันไม่สามารถใช้การซ้อนใด ๆ (ในโครงการดั้งเดิมที่ซับซ้อนกว่าเดิมพวกมันอยู่ในเทมเพลตย่อยที่แตกต่างกันซึ่งแต่ละอันต้องปิดโครงสร้าง HTML) หรือเปลี่ยนลำดับ (แสดงเหตุผลเหนือสิ่งอื่น) ฉันได้อัปเดตคำถามเพื่อให้ความกระจ่าง นอกจากนี้โปรดทราบว่าคำตอบของคุณจะไม่ผ่านการตรวจสอบเนื่องจาก ExerciseAction ไม่สามารถเป็นกิจกรรมลูกได้ (ย้อนกลับเท่านั้นที่เป็นไปได้) และดังนั้นจึงไม่จำเป็นต้องมีรายการ item เพื่อเชื่อมโยงเข้าด้วยกัน
Matija Nalis

@MatijaNalis เหตุผลเดียวที่ไม่สามารถตรวจสอบได้เพราะฉันคัดลอกข้อความที่คุณให้ไว้ในคำถามของคุณ ข้อผิดพลาดเกิดขึ้นเนื่องจากเหตุการณ์ถูกตั้งค่าให้เริ่มในอดีต 2002-02-02 เมื่ออัปเดตเป็นวันที่ในอนาคตมันจะทำงาน นอกจากนี้ฉันรู้ว่าตอนนี้คุณได้อัปเดตคำถามของคุณโดยแสดงว่าคุณไม่ต้องการซ้อนข้อมูลใด ๆ แต่เพียงแจ้งให้คุณทราบตราบใดที่ส่วนที่สองของข้อมูลที่คุณป้อนสำหรับ "เหตุการณ์" ต้นฉบับไม่ได้อยู่ใน " การออกกำลังกายการกระทำ "div มันจะยังคงทำงาน ตัวอย่างเช่นย้าย "startDate" จากคำตอบของฉันไปหลังจาก div "ปิดการออกกำลังกาย" และมันจะยังคงทำงาน
เพิ่มขึ้น

1

@Guisasso ถูกต้องคุณเพียงแค่ไม่ปิดองค์ประกอบ แต่ในอีกหมายเหตุคุณไม่ได้ จำกัด การใช้สคีมาเพียงแค่ในองค์ประกอบ DIV และการใช้ช่วงตามที่แนะนำ (ตัวอย่างเท่านั้น) หากทั้งหน้าเป็นเรื่องเกี่ยวกับสิ่งที่เกี่ยวข้องกับเหตุการณ์และมีอยู่ทั่วไซต์ก็อาจเหมาะสมกว่าที่จะใช้องค์ประกอบของร่างกายซึ่งหมายถึงเทมเพลตของคุณหากคุณมีข้อตกลงหนึ่งที่เกี่ยวข้องกับการเปิดสคีมาและการปิดโดยอัตโนมัติ วิธีที่บทความของคุณเติมเนื้อหานั้นในขณะที่เทมเพลตตั้งค่าไว้

ตัวอย่างเช่น:

<body itemscope itemtype="http://schema.org/Event">
   <article>
       <h1 itemprop="name">Some Event</h1>
       <span itemprop="startDate">2002-02-02</span>
       <p itemprop="description">I am the super awesome event infromation</p>
       <div itemscope itemtype="http://schema.org/ExerciseAction">
           <span itemprop="distance">22 km</span>
       </div>
   </article>
</body>

หรือคุณสามารถใช้มันในองค์ประกอบMAINหรือARTICLEถ้าคุณใช้ HTML5


เห็นความคิดเห็นต่อ Guisasso คำตอบของคุณไม่ทำงานด้วยเหตุผลเดียวกันมากมาย ฉันได้อัปเดตคำถามเพื่อชี้แจงความต้องการของฉัน
Matija Nalis

1

ฉันยังเรียกใช้ไปยังคุณสมบัติประเภทเพิ่มเติมซึ่งสามารถใช้ดังนี้

<div itemscope itemtype="http://schema.org/Event">
      <span itemprop="name">some event</span>
      <span itemprop="startDate">2002-02-02</span>


<!-- 
   ....
   zillion other HTML stuff
   ...
 -->

  <div itemprop="additionalType" itemscope itemtype="http://schema.org/ExerciseAction">
      <span itemprop="distance">22 km</span>
  </div>
</div>

ในขณะที่ช่วยในเรื่องหลักของฉัน (ไม่สามารถจัดลำดับความสัมพันธ์ใหม่ของการออกกำลังกาย ExerciseAction / ผู้ปกครองเด็ก) มันไม่ได้ช่วยปัญหาอื่น ๆ (ไม่สามารถซ้อน div เหล่านั้น) และมันก็เป็นประเภท kludgy ความหมายเช่นเดียวกับตัวอย่างการทำงานดั้งเดิม) อย่างไรก็ตามมันมีประโยชน์เพราะช่วยให้สามารถเชื่อมโยงรายการ schema.org ซึ่งไม่มีองค์ประกอบที่ต้องการสำหรับการเชื่อมโยงดังนั้นคุณสามารถเชื่อมโยงเช่น Book to SportsEvent หรืออะไรก็ได้

ฉันตอบตัวเองที่นี่ในกรณีที่มันช่วยคนอื่นด้วยปัญหาที่คล้ายกันเพราะมันไม่ได้ช่วยฉันจริงๆ (แม้ว่ามันอาจจะเป็นรีสอร์ทสุดท้ายหากไม่มีอะไรดีขึ้น)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.