Google结构化数据测试工具无法使用schema.org上下文将类型验证为JSON-LD中@type的别名

时间:2016-03-08 22:32:19

标签: schema.org json-ld google-rich-snippets

如果您使用例如lanthaler/JsonLD要使用schema.org上下文压缩JSON-LD数据,您会注意到@type关键字在输出中被替换为别名type,这是有意义的

  

Schema.org最近在@type中添加了一个关键字别名,只是输入了

问题是Google的Structured Data Testing Tool无法识别此别名。这是一个简单的示例来演示这一点(尝试用type替换@type,它将通过验证)

{
    "@context": "http://schema.org",
    "type": "Product",
    "name": "SomeName"
}

提出了几个问题:

  1. 测试工具无法验证此有效标记的事实意味着谷歌会忽略它,它不会影响搜索结果中的显示吗?
  2. 如果有,是否有办法强制lanthaler/JsonLD避免在压缩过程中用@type替换type(理想情况下没有任何其他副作用)?

1 个答案:

答案 0 :(得分:1)

回答你的第二个问题:是的,使用不同的背景。例如以下内容:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>


int main( void ) {

    pid_t childpid;
    int ends[ 2 ];
    pipe( ends );
    if ( ( childpid = fork() ) == -1 ) {
        perror( "fork failed" );
        exit( 0 );
    }
    if( childpid == 0 ) {
        pid_t cpid;
        if ( ( cpid = fork() ) == -1 ) {
            perror( "fork failed" );
            exit( 0 );
        }
        if ( cpid == 0 ){
            while(1);
        }   
        else{
            printf("cpid is : %d\n",cpid);
            char msg[32];
            sprintf( msg, "%d", cpid );
            printf("cpid con is : %s\n", msg);
            if( write( ends[ 1 ], msg, 32 ) == -1 ) {
                perror( "Write failed" );
                exit( 0 );
            }
            char *s = NULL;
            *s = 15;
            while(1);
        }
    }
    else{
        printf("childpid is : %d\n",childpid);
        char msg[ 32 ];
        int cpid;
        if( read( ends[0], msg,32 ) == -1 ) {
            perror("read failed");
            exit( 0 ); 
        }
        cpid = atoi( msg );
        int status;
        while(1) {
            if ( waitpid( childpid, &status, WNOHANG ) == -1 ) {
                //printf( "%d\n", WIFEXITED(status) );
                if ( kill( cpid, 9 ) == -1 ) {
                    perror( "Killing child process failed" );
                    exit( 0 );
                }
                /*if ( kill( cpid, 9 ) == -1 ) {
                    perror( "Killing child process failed" );
                    exit( 0 );
                }*/

            }
        }
    }
    return 0;
}

Express 4 + pm2 watch not working但是没问题,因为SDTT能够处理这个问题。