Liên kết một số Microdata <div> s riêng biệt với nhau?


11

Tôi đang thêm các đánh dấu ngữ nghĩa lược đồ.org và muốn liên kết một vài trong số đó ở các phần khá khác nhau của trang web với nhau.

Điều này hoạt động khi tôi chỉ định chúng là cha mẹ / con:

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

Tuy nhiên, tôi không biết cách liên kết chúng khi chúng bị ngăn cách bởi hàng núi 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>

Tôi đoán tôi nên sử dụng "itemref" hoặc một cái gì đó để liên kết các phạm vi liên quan, nhưng tôi không thể làm cho nó hoạt động. Nhìn vào những câu hỏi tương tự không giúp ích gì trong trường hợp này.

CẬP NHẬT: lưu ý rằng tôi đặc biệt tìm kiếm giải pháp hoạt động thông qua một số loại tham chiếu và KHÔNG làm việc thông qua việc lồng bất kỳ loại nào. Ngoài ra, thứ tự của ví dụ thứ hai (không hoạt động) phải giữ nguyên (Sự kiện đầu tiên, Tập thể dục thứ hai). (Có một số lý do cho việc đó nằm ngoài tầm kiểm soát của tôi).

Cụ thể, "nó hoạt động" được định nghĩa là ít nhất là công cụ đoạn trích phong phú của google cho thấy các mục được liên kết với nhau (giống như ví dụ hoạt động đầu tiên đó)

Câu trả lời:


9

Bạn có thể sử dụng itemrefthuộc tính.

Từ thông số Microdata ( Lưu ý nhóm làm việc W3C ):

  • 4.2 Cú pháp cơ bản :

    Các thuộc tính không phải là hậu duệ của phần tử với itemscopethuộc tính có thể được liên kết với mục bằng itemrefthuộc tính. Thuộc tính này lấy danh sách ID của các phần tử để thu thập dữ liệu ngoài việc thu thập dữ liệu con của phần tử với itemscopethuộc tính.

  • 5.2 Mụcitemref ::

    Các phần tử có itemscopethuộc tính có thể có một itemrefthuộc tính được chỉ định, để đưa ra danh sách các phần tử bổ sung cần thu thập thông tin để tìm các cặp giá trị tên của mục.


EDIT : Điều này sẽ hoạt động theo các yêu cầu được đề cập trong câu hỏi:

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

EDIT 2 (theo yêu cầu bổ sung ): Nếu một phần tử cha chỉ định một mục khác (ví dụ: a WebPagetrên body), giải pháp trên không hoạt động vì khi đó thuộc eventtính cũng sẽ áp dụng cho WebPage, điều này sẽ không đúng.

Không có giải pháp gọn gàng cho việc này.

Một sửa chữa xấu xí sẽ được thêm một mục khác (với itemscope) nhưng không có bất kỳ loại (không có itemtype) nào là cha mẹ của Event. Bằng cách đó, eventtài sản sẽ áp dụng cho mặt hàng chưa được đánh dấu này, không phải 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>

Bạn có thể đưa ra một ví dụ sẽ làm việc ở trên? Tôi đã cố gắng trong nhiều giờ và không quản lý để làm cho nó hoạt động (xác thực nó trên công cụ đoạn trích google phong phú ). Tất cả những gì tôi có thể làm là làm cho nó bao gồm một số cặp name = value khác được sao chép trong một vật phẩm khác và có cùng tên - như đã đề cập trong câu hỏi tương tự ; nhưng tôi đã không quản lý để bao gồm một vật phẩm khác - đó là câu hỏi)
Matija Nalis

@MatijaNalis: Tôi đã thêm đoạn trích vào câu trả lời của mình.
unor

Cảm ơn, đó gần như chính xác là những gì tôi đang tìm kiếm! Nó liên kết chúng lại với nhau như mong muốn trong ví dụ HTML độc lập được đơn giản hóa đó. Thật không may, công cụ đoạn mã google phong phú đưa ra một lỗi ở ví dụ phức tạp hơn với "Lỗi: Trang chứa thuộc tính" sự kiện "không phải là một phần của lược đồ." (toàn bộ trang có divs mẹ hơn, một trong những vấn đề là ví dụ schema.org/Webpage )
Matija NALIS

Bất kỳ ý tưởng làm thế nào để khắc phục điều đó? Xóa itemprop = "event" khỏi
lược đồ.org / Event

@MatijaNalis: Tôi đã thêm một đoạn mã khác, nhưng điều này có lẽ không khắc phục được vấn đề này. Tôi đoán bạn cũng sẽ phải tách biệt WebPageđánh dấu cha mẹ và sử dụng itemrefở đó, để nó không bao gồm các loại mặt hàng (không liên quan) khi còn nhỏ. Có lẽ nên là một câu hỏi khác.
unor

1

Nếu tôi hiểu chính xác câu hỏi của bạn, đừng đóng 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>

Miễn là không tìm thấy thẻ phù hợp, bất cứ thứ gì bên trong div ban đầu đó vẫn sẽ được coi là một phần của div ban đầu đó, trong trường hợp đó, là một Sự kiện.


Thật không may, tôi không thể sử dụng lồng bất kỳ loại nào (trong dự án ban đầu, phức tạp hơn nhiều, chúng ở các mẫu phụ khá khác nhau, trong đó mỗi mẫu phải được đóng cấu trúc HTML), cũng không thay đổi thứ tự (lý do hiển thị trong số những thứ khác). Tôi đã cập nhật câu hỏi để làm rõ điều đó. Ngoài ra, lưu ý rằng câu trả lời của bạn sẽ không được xác thực vì Tập thể không thể là sự kiện con (chỉ có thể đảo ngược) và do đó, nó không bắt buộc phải có liên kết với nhau.
Matija Nalis

@MatijaNalis Lý do duy nhất nó không xác thực là vì tôi đã sao chép văn bản bạn cung cấp trong câu hỏi của bạn. Lỗi xảy ra vì sự kiện này được thiết lập để bắt đầu trong quá khứ, 2002/02/02. Khi cập nhật đến một ngày trong tương lai, nó hoạt động. Ngoài ra, tôi biết rằng bạn hiện đã cập nhật câu hỏi của mình cho thấy rằng bạn không muốn lồng bất kỳ loại nào, nhưng chỉ để cho bạn biết, miễn là phần thứ hai của dữ liệu bạn nhập cho "Sự kiện" ban đầu không nằm trong " Tập thể dục "div, nó vẫn sẽ hoạt động. Ví dụ: di chuyển "startDate" từ câu trả lời của tôi sang sau khi đóng div "Tập thể dục" và nó vẫn hoạt động.
riseagainst

1

@Guisasso đúng là bạn không đóng phần tử. Nhưng trên một lưu ý khác, bạn không bị hạn chế sử dụng lược đồ chỉ trong các phần tử DIV và sử dụng các nhịp như nó gợi ý (chỉ là ví dụ). Nếu toàn bộ trang là về các nội dung liên quan đến sự kiện và điều này trên toàn trang thì có thể có ý nghĩa hơn khi sử dụng phần tử cơ thể có nghĩa là mẫu của bạn nếu bạn có một giao dịch tự động mở lược đồ và đóng. Bằng cách này, bài viết của bạn chỉ cần điền nội dung đó trong khi mẫu đặt nó.

Ví dụ:

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

Hoặc bạn có thể sử dụng nó trong MAINhoặc ARTICLEphần tử nếu bạn đang sử dụng HTML5.


xem bình luận cho Guisasso, câu trả lời của bạn không hoạt động vì nhiều lý do tương tự. Tôi đã cập nhật câu hỏi để làm rõ nhu cầu của mình.
Matija Nalis

1

Tôi cũng đã chạy tới additionalType bất động sản, có thể được sử dụng như sau

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

trong khi điều đó giúp giải quyết vấn đề chính của tôi (không thể sắp xếp lại mối quan hệ cha mẹ con của EventAction / Sự kiện), thì nó không giúp ích gì cho vấn đề khác (không thể lồng các div đó) và nó là một loại bùn (không tạo ra cùng ngữ nghĩa như ví dụ làm việc ban đầu). Tuy nhiên, nó rất hữu ích vì nó cho phép liên kết các loại vật phẩm của lược đồ.org không có các yếu tố dự định để liên kết, vì vậy bạn có thể liên kết ví dụ Sách với SportsEvent hoặc bất cứ thứ gì.

Tôi đang tự trả lời mình ở đây chỉ trong trường hợp nó giúp người khác gặp vấn đề tương tự, vì nó không thực sự giúp tôi (mặc dù đó có thể là phương án cuối cùng nếu không có gì tốt hơn)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.