Представлять отношения человека/представителя или писателя/агента с 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> я почерпнул из https://stackoverflow.com/a/19389163/441662.

Когда я передаю это в 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? Я не могу найти много примеров по этому поводу.
  • Как смоделировать агент как контактную точку? Согласно schema.org и инструменту тестирования Google, Person не допускается. быть contactPoint.

Решение?

Одно из предложенных ниже решений состоит в том, чтобы иметь объект, который одновременно является ContactPoint и Person, но Валидатору Google это, похоже, не очень нравится.

Другое возможное решение состоит в том, чтобы агент и писатель указывали на один и тот же ресурс ContactPoint (см. https://stackoverflow.com/a/30055747/441662).

Что касается rel="me", это взято из примера микроформатов и невозможно с schema.org (тем не менее, как утверждает @unor в своем ответе) или пенопласт.


/edit 05.07.2015: я поднял вопрос GitHub для этого проблема. Я обновлю этот пост, когда узнаю больше...


person Benny Bottema    schedule 05.05.2015    source источник


Ответы (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 свойство (включено в следующий выпуск) и/или использовать about свойство Schema.org, и/или использовать свойство FOAF isPrimaryTopicOf.

person unor    schedule 05.05.2015
comment
Чтобы уточнить, мое намерение состоит в том, чтобы связать агента в качестве точки контакта для автора, в то же время указав, что автором является я, субъект страницы. - person Benny Bottema; 05.05.2015
comment
Я также обновил свой пост некоторыми подробностями и конкретным вопросом о том, как смоделировать отношения agent как contactPoint. - person Benny Bottema; 05.05.2015
comment
@Plantface: я обновил свой ответ. Как уже упоминалось, я не думаю, что Schema.org предполагает, что ContactPoint может быть Organization/Person, так что это немного натянуто. Однако вы можете указать, что что-то является и Organization, и ContactPoint (что было бы недопустимо в микроданных, если вы используете свойства только одного из этих типов, но в RDFa это допустимо). Вероятно, лучшим решением было бы использовать свойство, которое на самом деле ссылается на редактор (если на Schema.org его нет, вы можете его предложить) или использовать ContactPoint, не сообщая, что это ваш агент. - person unor; 05.05.2015
comment
Спасибо за ваши усилия. Как насчет использования абсолютных идентификаторов ресурсов? Было бы разумно говорить в абсолютных выражениях в пользу инкапсуляции и возможности перемещать сущности, не нарушая ссылки? - person Benny Bottema; 05.05.2015
comment
@Plantface: Вы имеете в виду указание resource="http://example.com/lovecraft#me" вместо resource="#me"? Да, это нормально/разумно. Конечно, вам не нужно придумывать новые URI, если уже существуют подходящие, но если вы создаете свои собственные, см. также Классные URI для Semantic Web, особенно выбор между 303 и хеш-URI - person unor; 05.05.2015
comment
О, и если ваша разметка позволяет это, вы, конечно, все еще можете вложить ее соответствующим образом, вместо того, чтобы полагаться на URI (при этом указывая URI дополнительно). Это может (я не знаю каких-то конкретных примеров, просто предполагаю), что вы получите лучшую поддержку от потребителей, которые не идут полным путем RDFa (например, анализируют его больше как микроданные). - person unor; 05.05.2015
comment
Никаких костей, там. Я хочу представить писателя и его агента по отдельности, но дать машинным читателям способ соотнести их. - person Benny Bottema; 05.05.2015
comment
Валидатор RDFa Google schema.org, похоже, не поддерживает объекты, которые являются одновременно ContactPoint и Person, поэтому мне интересно, смогут ли сканеры Google работать с ним. Может быть, обходной путь состоит в том, чтобы иметь надлежащий агент ContactPoint, у которого есть ссылка sameAs на фактический ресурс агента Person? - person Benny Bottema; 05.05.2015
comment
Или даже и агент, и писатель указывают на один и тот же ресурс ContactPoint? - person Benny Bottema; 05.05.2015
comment
Я исправил свой пост, указав в конце своего рода обходной путь. Я не слишком доволен этим, но это работает на данный момент. Чтобы предотвратить двойное свойство name, я сделал свойство contactPoint метаэлементом. - person Benny Bottema; 05.05.2015

Один из вариантов состоит в том, чтобы и агент, и писатель указывали на один и тот же ресурс 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:[email protected]">[email protected]</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:[email protected]>;
    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 05.07.2015: я поднял вопрос GitHub по этой проблеме . Я обновлю этот пост, когда узнаю больше...

person Benny Bottema    schedule 05.05.2015