Представлять отношения человека / представителя или автора / агента с RDFa, schema.org и FOAF
Я немного запутался, как смоделировать отношения писатель-агент, используя RDFa (Lite), schema.org и FOAF. Я даже не уверен, что мне нужен FOAF.
Допустим, я издаю книгу, я писатель и агент. Итак, у нас есть два человека, один - я, а другой - агент. Чтобы уточнить, я намерен связать агента как контактную точку для автора, одновременно указав, что автор - это я, тема страницы:
<!-- the agent representing me -->
<div resource="/Writecorp/Michael Stern" vocab="http://schema.org/" typeof="Person">
<span property="name">Michael Stern</span>
<div property="memberOf">
<div typeof="Organization">
<span property="name">Writecorp Inc. agency</span>
</div>
</div>
</div>
<!-- the writer, me -->
<div rel="me" vocab="http://schema.org/" typeof="Person">
<link rel="agent" property="contactPoint" href="/Writecorp/Michael Stern" />
<span property="name">H. P. Lovecraft</span>
</div>
<link>
Решение, которое я почерпнул из /questions/25604825/kak-ustanovit-otnosheniya-mezhdu-uzlami-rdfa-lite/25604845#25604845.
Когда я передаю это в RDFa 1.1 Distiller and Parser, он показывает следующий вывод:
@prefix ns1: <http://www.w3.org/ns/rdfa#> .
@prefix ns2: <http://schema.org/> .
<> ns2:me [ a ns2:Person;
ns2:contactPoint </Writecorp/Michael Stern>;
ns2:name "H. P. Lovecraft" ];
ns1:usesVocabulary ns2: .
</Writecorp/Michael Stern> a ns2:Person;
ns2:memberOf """
Writecorp Inc. agency
""";
ns2:name "Michael Stern" .
[] a ns2:Organization;
ns2:name "Writecorp Inc. agency" .
- Признал ли это
rel="me"
должным образом? Он показывает ns1: me, но я ничего не могу найти в упомянутом словаре пространства имен, schema.org. Должен ли я использовать префикс FOAF, а затем использоватьfoaf:me
? Я также не могу найти много примеров по этому поводу. - Как мне смоделировать агента как отношения contactPoint? Согласно schema.org и инструменту тестирования Google,
Person
не может бытьcontactPoint
,
Решение?
Одно решение, предложенное ниже, состоит в том, чтобы иметь ContactPoint
и Person
, но валидатору Google, похоже, это не очень нравится.
Другое возможное решение состоит в том, чтобы агент и писатель указывали на одно и то же ContactPoint
ресурс (см. /questions/9933597/predstavlyat-otnosheniya-cheloveka-predstavitelya-ili-avtora-agenta-s-rdfa-schemaorg-i-foaf/9933603#9933603).
Что касается rel="me"
Это произошло из примера микроформатов и невозможно с schema.org (пока, как утверждает @unor в его ответе) или с foaf.
/ edit 7-5-2015: я поднял проблему GitHub для этой проблемы. Я обновлю этот пост, когда узнаю больше...
2 ответа
В то время как agent
является свойством Schema.org, его домен Action
(что вы, кажется, не намерены). И это не свойство FOAF и не зарегистрированный тип ссылки (поэтому его нельзя использовать в HTML5). Так что я думаю, что вам нужно найти подходящее свойство вместо этого.
me
тип ссылки, а не свойство Schema.org или FOAF. Но как вы используете vocab
синтаксический анализатор RDFa предполагает, что это свойство из словаря по умолчанию (в вашем случае, Schema.org). Я не уверен, действительно ли вы намереваетесь использовать его в качестве типа ссылки (как вы используете RDFa-способ для элементов без ссылок).
(Если предполагается использование типов ссылок, возможное решение заключается в использовании prefix
вместо vocab
, Таким образом, нефиксированные значения rel
интерпретируются как типы ссылок, а префиксные значения - как свойства.)
Если использовать Schema.org, книга будет иметь тип Book
, Вы были бы author
этого Book
,
Вы должны проверить доступные свойства для Book
(если агент связан с вашей работой, а не с вашей личностью) или Person
(или же Organization
если это ваше дело) если Schema.org предлагает подходящее свойство для указания вашего агента. Ах, я пропустил, что агент должен быть ContactPoint
, Теперь я сомневаюсь, что Schema.org предполагал, что этот тип может также относиться к организациям или лицам, но я думаю, ничто не мешает вам заявить, что что-то является ContactPoint
и Organization
,
относительно resource
(или же about
): Да, обычно лучше предоставлять URI для ваших сущностей, а не использовать пустые узлы. Таким образом, вы и другие лица можете делать заявления об этих объектах в том же или другом документе.
Таким образом, в идеале вы должны дать каждому объекту URI (включая себя, отличающийся от URI документа).
Например, на веб-странице http://example.com/lovecraft
Вы могли бы иметь:
<body prefix="schema: http://schema.org/">
<div typeof="schema:Person" resource="#me"></div>
<div typeof="schema:Organization schema:ContactPoint" resource="#agent"></div>
<div typeof="schema:Book" resource="#book-1"></div>
</body>
Теперь ваш URI http://example.com/lovecraft#me
(это представляет вас, человека, а не страницу о вас), организация вашего агента имеет URI http://example.com/lovecraft#agent
, ваша книга имеет URI http://example.com/lovecraft#book-1
,
Это позволяет вам делать заявления об этом различными способами, например:
<body prefix="schema: http://schema.org/">
<div typeof="schema:Person" resource="#me">
<link property="schema:contactPoint" href="#agent" />
<link property="schema:author" href="#book-1" />
</div>
<div typeof="schema:Organization schema:ContactPoint" resource="#agent"></div>
<div typeof="schema:Book" resource="#book-1"></div>
</body>
Чтобы заявить, что страница (http://example.com/lovecraft
) о вас (http://example.com/lovecraft#me
), вы можете подождать Schema.org mainEntity
свойство (включено в следующую версию) и / или использовать Schema.org's about
собственность и / или использовать FOAF isPrimaryTopicOf
собственность
Один из вариантов заключается в том, чтобы агент и писатель указывали на одно и то же ContactPoint
ресурс.
Это, кажется, работает несколько. Это позволяет надлежащей уценке форматировать агента и его контактные данные, и в то же время писатель указывает на контактные данные агента. Тем не менее, это по-прежнему не относится к агенту должным образом в качестве представителя для автора (то есть не иметь дело со мной, но с моим агентом). И я не уверен, как машинные читатели справятся с этой ситуацией.
<!-- the agent representing me -->
<div resource="/Writecorp/MichaelStern" vocab="http://schema.org/" typeof="Person">
<span property="name">Michael Stern</span>
<link property="contactPoint" href="/Writecorp/MichaelStern#contact" />
<div resource="/Writecorp/MichaelStern#contact" vocab="http://schema.org/" typeof="ContactPoint">
<meta property="name" content="Michael Stern" />
<div>Phone:
<span property="telephone">(540) 961-4469</span>
</div>
<div>
<a property="email" href="mailto:michael.stern@writecorp.inc.agency.com">michael.stern@writecorp.inc.agency.com</a>
</div>
</div>
<div property="memberOf">
<div typeof="Organization">
<span property="name">Writecorp Inc. agency</span>
</div>
</div>
</div>
<!-- the writer, me -->
<div vocab="http://schema.org/" typeof="Person">
<link property="contactPoint" href="/Writecorp/MichaelStern#contact" />
<span property="name">H. P. Lovecraft</span>
</div>
Обратите внимание, что name
собственность на ContactPoint
является метатегом вместо обычного элемента span. Это необходимо для предотвращения вывода двойного имени, предоставляя читателям машины возможность по-прежнему заполнять свою модель данных именем контактной точки.
Выход черепахи в RDFa 1.1 Distiller and Parser:
@prefix ns1: <http://www.w3.org/ns/rdfa#> .
@prefix ns2: <http://schema.org/> .
<> ns1:usesVocabulary ns2: .
</Writecorp/MichaelStern> a ns2:Person;
ns2:contactPoint </Writecorp/MichaelStern#contact>;
ns2:memberOf """
Writecorp Inc. agency
""";
ns2:name "Michael Stern" .
</Writecorp/MichaelStern#contact> a ns2:ContactPoint;
ns2:email <mailto:michael.stern@writecorp.inc.agency.com>;
ns2:name "Michael Stern";
ns2:telephone "(540) 961-4469" .
[] a ns2:Person;
ns2:contactPoint </Writecorp/MichaelStern#contact>;
ns2:name "H. P. Lovecraft" .
[] a ns2:Organization;
ns2:name "Writecorp Inc. agency" .
/ edit 7-5-2015: я поднял проблему GitHub для этой проблемы. Я обновлю этот пост, когда узнаю больше...