http://schema.org 어휘를 사용하여 Microdata 또는 RDFa Lite 1.1 의미 체계를 구현하고 출력하는 PHP 라이브러리 세트입니다.
이 라이브러리는 버전 3.2(JMicrodata라고 함)부터 Joomla CMS에서 사용됩니다.
2013년과 2014년 Google Summer of Code 기간에 작성되었습니다.
라이브러리는 다음 목표를 염두에 두고 설계되었습니다.
작곡 :
composer.json
파일에 추가하세요.
{
"require" : {
"palex/ PHPStructuredData " : " * "
}
}
소스에서 :
git clone https://github.com/alexprut/PHPStructuredData.git
직접 다운로드 :
여기에서 마지막 버전을 다운로드하세요.
Microdata 또는 RDFa 라이브러리의 인스턴스가 이미 있다고 가정해 보겠습니다. 그리고 기사의 일부인 다음 HTML에 마이크로데이터 또는 RDFa 의미 체계를 추가해야 합니다( 예: $sd = new PHPStructuredData Microdata('Article');
).
<div <?php echo $ sd -> displayScope (); ?> >
<!-- Language -->
<?php echo $ sd -> content ( null , ' en-GB ' )-> property ( ' inLanguage ' )-> display ( ' meta ' , true ) ?>
<!-- Title -->
<?php echo $ sd -> content ( ' How to Tie a Reef Knot ' )-> property ( ' name ' )-> display (); ?>
<!-- Author-->
<span>
Written by <?php echo $ sd -> content ( ' John Doe ' )-> property ( ' author ' )-> fallback ( ' Person ' , ' name ' )-> display (); ?>
</span>
<!-- Date published -->
<?php echo $ sd -> content ( ' 1 January 2014 ' , ' 2014-01-01T00:00:00+00:00 ' )-> property ( ' datePublished ' )-> display (); ?>
<!-- Content -->
<?php echo $ sd -> content ( ' Lorem ipsum dolor sit amet... ' )-> property ( ' articleBody ' )-> display (); ?>
<div>
Microdata
라이브러리는 다음을 렌더링합니다.
< div itemscope itemtype =' https://schema.org/Article ' >
<!-- Language -->
< meta itemprop =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span itemprop =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemprop =' author ' itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span itemprop =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
RDFa
라이브러리는 다음을 렌더링합니다.
< div vocab =' https://schema.org ' typeof =' Article ' >
<!-- Language -->
< meta property =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span property =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span property =' author ' vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span property =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
대신, 현재 유형을 변경하기로 결정한 경우( 예: $sd->setType('Review');
).
Microdata
라이브러리는 다음을 렌더링합니다.
< div itemscope itemtype =' https://schema.org/Review ' >
<!-- Language -->
< meta itemprop =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span itemprop =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
Lorem ipsum dolor sit amet...
< div >
RDFa
라이브러리는 다음을 렌더링합니다.
< div vocab =' https://schema.org ' typeof =' Review ' >
<!-- Language -->
< meta property =' inLanguage ' content =' en-GB ' />
<!-- Title -->
< span property =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
Lorem ipsum dolor sit amet...
< div >
보시다시피 John Doe
Person Type으로 대체 되고 정보 손실이 없습니다. 현재 유형에 작성자 속성이 없더라도 시스템에 대한 중요한 정보가 표시되므로 검색 엔진은 Person John Doe
이 있음을 알고 있습니다. John Doe
대신, 마이크로데이터 또는 RDFa 의미 체계를 렌더링하지 않기로 결정한 경우 라이브러리 출력을 비활성화 하면 됩니다( 예: $sd->enable('false');
).
Microdata
및 RDFa
라이브러리는 모두 다음을 렌더링합니다.
< div >
<!-- Language -->
<!-- Title -->
How to Tie a Reef Knot
<!-- Author-->
< span >
Written by John Doe
</ span >
<!-- Date published -->
1 January 2014
<!-- Content -->
Lorem ipsum dolor sit amet...
< div >
현재 RDFa
및 Microdata
라이브러리는 모두 다중 대체를 지원하지 않습니다.
뷰를 로직과 분리된 상태로 유지하려는 경우 ParserPlugin
은 HTML 마크업을 구문 분석하고 data-*
HTML5 속성을 올바른 형식의 Microdata 또는 RDFa Lite 1.1 의미 체계로 변환하기 위한 PHP 클래스입니다.
data-*
속성은 HTML5의 새로운 속성으로 모든 HTML 요소에 사용자 정의 데이터 속성을 포함할 수 있는 기능을 제공합니다. 따라서 라이브러리 출력을 비활성화해도 HTML은 계속 검증됩니다. 라이브러리가 검색할 기본 접미사는 data-sd
입니다. 여기서 sd는 구조화된 데이터를 의미하지만 사용자 정의 접미사를 두 개 이상 등록할 수 있습니다.
유형은 다음 마크업에 사용되는 스키마를 정의합니다. 올바르게 해석되려면 유형에 항상 첫 번째 문자인 대문자가 있어야 합니다. 유형이 유효한 스키마인 경우 이 시점부터 페이지의 전역 범위가 이 스키마로 업데이트됩니다. 플러그인은 데이터 태그를 itemscope itemtype='https://schema.org/Type'
(마이크로데이터 의미론의 경우) 또는 vocab='https://schema.org' typeof='Type'
RDFa Lite 1.1의 경우)으로 대체합니다. 의미론.
< div data-sd =" Article " >
< p > This is my article </ p >
</ div >
이는 Microdata
의미론을 사용하여 다음과 같이 출력됩니다.
< div itemscope itemtype =" http://schema.org/Article " >
< p > This is my article </ p >
</ div >
또는 RDFa
의미 체계를 다음과 같이 사용합니다.
< div vocab =" http://schema.org " typeof =" Article " >
< p > This is my article </ p >
</ div >
스키마가 선언되면 다음 단계는 개별 속성을 선언하는 것입니다. 즉, 콘텐츠를 설명하고 의미론적 의미를 부여하는 것입니다.
올바르게 해석되려면 속성의 첫 번째 문자가 항상 소문자여야 합니다. 속성이 현재 스키마의 일부인 것으로 확인되면 플러그인은 데이터 태그를 마이크로데이터 의미 체계의 경우 itemprop='property'
로 대체하고 RDFa Lite 1.1 의미 체계의 경우 property='property'
로 대체합니다. 해당 속성이 활성 스키마의 유효한 속성으로 확인되지 않으면 무시되고 다음으로 사용 가능한 속성이 구문 분석됩니다.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
</ div >
이는 Microdata
의미론을 사용하여 다음과 같이 출력됩니다.
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
</ div >
또는 RDFa
의미 체계를 다음과 같이 사용합니다.
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
</ div >
때로는 특정 스키마가 활성화된 경우에만 사용해야 하는 속성을 명시적으로 명시하고 싶을 수도 있습니다. 예를 들어 해당 속성이 한 스키마에 특정 속성을 갖고 있고 다른 스키마에서는 다른 속성이라고 불리는 경우입니다.
스키마 종속 속성을 사용하면 이를 달성할 수 있습니다. 이는 마침표로 구분된 Type 과 property 의 조합을 사용하여 작동합니다. 즉, 현재 전역 범위가 Type과 동일하고 속성이 해당 Type의 일부인 경우 플러그인은 데이터 태그를 microdata 의미 체계의 경우 itemprop='property'
로 대체하고 RDFa Lite의 경우 property='property'
로 대체합니다. 1.1.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
< p data-sd =" Article.wordcount " > 4 </ p >
</ div >
이는 Microdata
의미론을 사용하여 다음과 같이 출력됩니다.
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
</ div >
또는 RDFa
의미 체계를 다음과 같이 사용합니다.
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
</ div >
이들의 조합을 사용하면 스키마에 특정한 속성과 일반적인 속성을 포함하여 여러 속성을 지정할 수 있습니다. 빌딩 블록의 순서는 중요하지 않으며 공백이 구분 기호로 사용됩니다.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
< p data-sd =" Article.wordcount " > 4 </ p >
< p data-sd =" Recipe.recipeCategory Article.articleSection description " > Amazing dessert recipes </ p >
</ div >
이는 Microdata
의미론을 사용하여 다음과 같이 출력됩니다.
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
< p itemprop =" articleSection " > Amazing dessert recipes </ p >
</ div >
또는 RDFa
의미 체계를 다음과 같이 사용합니다.
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
< p property =" articleSection " > Amazing dessert recipes </ p >
</ div >
때로는 스키마를 중첩해야 하는 경우가 있습니다. 예를 들어 기사 스키마가 열려 있을 때 사람을 설명하려는 경우입니다. 이는 중첩된 스키마를 사용하여 가능합니다. 이를 사용하려면 속성 뒤에 마침표 앞에 스키마를 추가하면 됩니다. 중첩된 스키마 사용을 마친 후에는 포함된 태그를 닫고 원래 스키마를 다시 설정하세요.
< div data-sd =" Article " >
< p data-sd =" articleBody " > This is my article </ p >
< p data-sd =" Article.wordcount " > 4 </ p >
< div data-sd =" author.Person " >
< p data-sd =" Person name " > John Doe </ p >
</ div >
< p data-sd =" Article keywords " > Cake </ p >
</ div >
이는 Microdata
의미론을 사용하여 다음과 같이 출력됩니다.
< div itemscope itemtype =" http://schema.org/Article " >
< p itemprop =" articleBody " > This is my article </ p >
< p itemprop =" wordcount " > 4 </ p >
< div itemprop =" author " itemscope itemtype =" http://schema.org/Person " >
< p itemprop =" name " > John Doe </ p >
</ div >
< p itemprop =" keywords " > Cake </ p >
</ div >
또는 RDFa
의미 체계를 다음과 같이 사용합니다.
< div vocab =" http://schema.org " typeof =" Article " >
< p property =" articleBody " > This is my article </ p >
< p property =" wordcount " > 4 </ p >
< div property =" author " vocab =" http://schema.org " typeof =" Person " >
< p property =" name " > John Doe </ p >
</ div >
< p itemprop =" keywords " > Cake" </ p >
</ div >
ParserPlugin
라이브러리의 인스턴스가 이미 있다고 가정해 보겠습니다. 그리고 기사의 일부인 다음 HTML에 마이크로데이터 또는 RDFa 의미 체계를 추가해야 합니다( 예: $parser = new PHPStructuredData ParserPlugin('microdata'); $scope='Article';
).
< div data-sd =" <?php echo $scope;?> " >
<!-- Title -->
< span data-sd =" Review.itemReviewed name " >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span data-sd =" author.Person " >
< span data-sd =" name " > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta data-sd =' <?php echo $scope;?> datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span data-sd =' reviewBody articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
Microdata
출력은 다음과 같습니다.
< div itemscope itemtype =' https://schema.org/Article ' >
<!-- Title -->
< span itemprop =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemprop =' author ' itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span itemprop =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
RDFa
출력은 다음과 같습니다.
< div vocab =' https://schema.org ' typeof =' Article ' >
<!-- Title -->
< span property =' name ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span property =' author ' vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span property =' articleBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
대신, 현재 유형을 변경하기로 결정한 경우( 예: $scope="Review";
)
Microdata
출력은 다음과 같습니다.
< div itemscope itemtype =' https://schema.org/Review ' >
<!-- Title -->
< span itemprop =' itemReviewed ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span itemprop =' author ' itemscope itemtype =' https://schema.org/Person ' >
< span itemprop =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta itemprop =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span itemprop =' reviewBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
RDFa
출력은 다음과 같습니다.
< div vocab =' https://schema.org ' typeof =' Review ' >
<!-- Title -->
< span property =' itemReviewed ' >
How to Tie a Reef Knot
</ span >
<!-- Author -->
< span >
Written by
< span property =' author ' vocab =' https://schema.org ' typeof =' Person ' >
< span property =' name ' > John Doe </ span >
</ span >
</ span >
<!-- Date published -->
< meta property =' datePublished ' content =' 2014-01-01T00:00:00+00:00 ' /> 1 January 2014
<!-- Content -->
< span property =' reviewBody ' >
Lorem ipsum dolor sit amet...
</ span >
< div >
PHPStructuredData
라이브러리는 types.json
파일을 사용하여 검증된 의미 체계를 확인하고 출력합니다. 해당 파일에는 http://schema.org 어휘에서 사용 가능한 모든 유형 및 속성이 포함되어 있으며 https://github.com/을 통해 자동으로 생성되었습니다. alexprut/Spider4Schema 웹 크롤러.
itemref
지원을 추가합니다.StructuredData
에 다중 대체 지원을 추가합니다.types.json
에 추가합니다. PHPStructuredData 는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.