如何在Schema.org标记中将Job(jobTitle)与Organization(worksFor)联系起来?

时间:2016-08-24 16:07:11

标签: html5 schema.org microdata

Person架构下,我希望将每个职位与其各自的组织相关联。这是一个类似简历的设置,所以有很多工作和很多组织。

这是我项目中某些代码的实际示例(内容已剪切+更改):

<div itemscope itemtype="http://schema.org/Person">
  …
  <p><!--list of jobs-->
    <span itemprop="jobTitle">Job 1</span>, 
    <span itemprop="jobTitle">Job 2</span>, and 
    <span itemprop="jobTitle">Job 3</span>
  </p>
  <p><!--list of places worked for-->
    <span itemprop="worksFor">Company A</span> and
    <span itemprop="worksFor">Company B</span>
  </p>
</div>

https://search.google.com/structured-data/testing-tool/返回这样的架构:

@type   Person
jobTitle    Job 1
jobTitle    Job 2
jobTitle    Job 3
worksFor    
    @type   Organization
    name    Company A
worksFor    
    @type   Organization
    name    Company B

让我们说我想要乔布斯1&amp; 2将成为A公司的一部分,将Job 3作为公司B的一部分。我如何表达,以便它在Schema中具有干净的层次结构?

我知道我可以选择itemref(来自How do I relate items in schema.org?之类的问题),但我无法弄清楚如何设计一种方法来jobTitle引用Organization {1}}(worksFor)。

2 个答案:

答案 0 :(得分:2)

我不相信这可能发生在Schema和Google(或至少结构化数据工具)如何解释它之间。我可能错了,但我认为问题是jobTitleworksFor都适用于person。因此,Google会将这两个属性与此人相关联,但不一定将这两个属性相互关联。

也许我在方法中遗漏了一些东西,这实际上是可能的。我想发布我的答案,至少引导你或在正确方向上有更好经验的人(或确认我的怀疑)。我有两种方法,我相信Microdata方法出现在工具中,但是错了。我认为JSON-LD方法是正确的,但在结构化数据工具中无法正确显示。

微观数据方法

如果您可以在某种程度上修改DOM,则可以使用元标记在组织中嵌套组织。虽然结构化数据工具显示我认为您想要的结果,但我不相信数据真的会相关,因为员工并非真正依附于ID:

<div itemscope itemtype="http://schema.org/Person" id="person1">
  <p><!--list of jobs-->
    <span>Job 1</span>, 
    <span>Job 2</span>, and 
    <span>Job 3</span>
  </p>
  <p><!--list of places worked for-->
    <span itemscope itemprop="worksFor" itemtype="http://schema.org/Organization">
        <span itemprop="name">Company A</span>
        <span itemscope itemprop="employee" itemref="person1" itemtype="http://schema.org/Person">
            <meta itemprop="jobTitle" content="Job 1">
        </span>
    </span> and
    <span itemscope itemprop="worksFor" itemtype="http://schema.org/Organization">
        <span itemprop="name">Company B</span>
        <span itemscope itemprop="employee" itemref="person1" itemtype="http://schema.org/Person">
            <meta itemprop="jobTitle" content="Job 2">
            <meta itemprop="jobTitle" content="Job 3">
        </span>
    </span>
  </p>
</div>

返回:

@type = Person

worksFor    
    @type = Organization
    name = Company A

    employee    
        @type = Person
        jobTitle = Job 1

worksFor    
    @type = Organization
    name = Company B

    employee    
        @type = Person
        jobTitle = Job 2
        jobTitle = Job 3

我通过嵌套Person&gt;来解决这个问题。 Organization&gt; EmployeePerson)&gt; JobTitle。我为带有元标记的员工添加了一个空白范围,以便您可以保持相同的前端样式。

我对此方法的关注是,每个Employee下的Organization将与父Person断开连接。我在父项上使用了id,并在每个Employee中使用了itemref来指向父ID,但我不确定这是否真的得到支持,或者嵌套是否足够(可疑)。

JSON-LD方法

我认为JSON-LD方法恰当地将人与组织联系起来,但谷歌的工具最终会将jobTitle推回给人,基本上会给你相同的结果。可能有更好的方法来关联数据。

<script type="application/ld+json">
      {
        "@context": {
            "@vocab": "http://schema.org/",
            "id": "@id",
            "graph": "@graph",
            "type": "@type"
        },
        "graph" : [
            {
                "type": "Person",
                "id": "Person1",
                "name": "John Smith",
                "worksFor" : [
                    {
                        "id": "CompanyA"
                    }, 
                    {
                        "id": "CompanyB"
                    }
                ]
            }, 
            {
                "type": "Organization",
                "id": "CompanyA",
                "name": "Company A",
                "employees": [
                    {
                        "@id" : "Person1",
                        "jobTitle" : ["Job 1", "Job 2"]
                    }
                ]
            }, 
            {
                "type": "Organization",
                "id": "CompanyB",
                "name": "Company B",
                "employees": [
                    {
                        "@id" : "Person1",
                        "jobTitle" : "Job 3"
                    }
                ]
            }
        ]
      }
</script>

遗憾的是返回:

@type : http://www.example.com/Person
@id : http://www.example.com/Person1
name : John Smith
jobTitle : Job 1
jobTitle : Job 2
jobTitle : Job 3

worksFor    
    @type : http://www.example.com/Organization
    @id : http://www.example.com/CompanyA
    name : Company A

worksFor    
    @type : http://www.example.com/Organization
    @id : http://www.example.com/CompanyB
    name : Company B

虽然结构化数据工具以一种看起来正确且看起来错误但似乎正确的方式呈现上面的一个选项,但很难说Google如何真正关联数据。它也可能只是图式/数据工具在更基本的层面上假设关系,通常有人在多个组织中没有多个职位。但我只是在这一点上进行推测。

底线是 - 我觉得问题是Organization只能列在person worksFor下。 jobTitle只能位于person之下,而不能位于Organization之下。您可以将PersonOrganization employee关联,但似乎只是将jobTitle匿名推回相关的person在结构化数据工具中。结构化数据工具过去已经知道存在一些针对Google文档的缺陷,因此我不确定您是否可以100%依赖于您从中看到的内容。

答案 1 :(得分:0)

在努力将工作与在线简历中的公司联系起来之后,我实现了如下所示的方法。

供参考:schema.org OrganizationRole

<div itemscope itemtype="https://schema.org/Person">
  <div itemprop="worksFor" itemscope itemtype="https://schema.org/EmployeeRole">
    <div itemprop="worksFor" itemscope itemtype="https://schema.org/Corporation">
      <span itemprop="name">[COMPANY]</span>
    </div>
    <span itemprop="roleName">[JOB]</span>
  </div>
  <p itemprop="name">[NAME]</p>
</div>

您可以测试您的微数据here (google Structured Data Testing Tool)

相关问题