Skip to content

Commit bc1c8de

Browse files
author
Harrison Ifeanyichukwu
committed
feat: create the RDF Feed class model, all rdf feeds are created from this class
It provides the appropriate namespace map, alternate property xpath selector expressions that are used in parsing rdf feeds
1 parent 11c5056 commit bc1c8de

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

src/Feeds/RDFFeed.php

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Forensic\FeedParser\Feeds;
5+
6+
use Forensic\FeedParser\Enums\FeedTypes;
7+
use Forensic\FeedParser\XPath;
8+
use Forensic\FeedParser\FeedItems\RDFFeedItem;
9+
10+
11+
class RSSFeed extends BaseFeed
12+
{
13+
public function __construct(XPath $xpath, string $default_lang,
14+
bool $remove_styles, bool $remove_scripts)
15+
{
16+
$namespaces = [
17+
'def' => 'http://purl.org/rss/1.0/',
18+
'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
19+
'dc' => 'http://purl.org/dc/elements/1.1/',
20+
'sy' => 'http://purl.org/rss/1.0/modules/syndication',
21+
'enc' => 'http://purl.oclc.org/net/rss_2.0/enc#',
22+
'content' => 'http://purl.org/rss/1.0/modules/content/',
23+
'taxo' => 'http://purl.org/rss/1.0/modules/taxonomy/'
24+
];
25+
26+
$property_selectors = [
27+
'id' => 'def:channel/@rdf:about || def:channel/dc:identifier',
28+
'title' => 'def:channel/def:title || def:channel/dc:title',
29+
'link' => 'def:channel/def:link',
30+
'description' => 'def:channel/def:description || def:channel/dc:description',
31+
'image' => [
32+
'src' => 'def:image/def:url || def:image/@rdf:about',
33+
'link' => 'def:image/def:link || def:channel/def:link',
34+
'title' => 'def:image/def:title || def:image/dc:title || def:channel/def:title ' .
35+
'|| def:channel/dc:title'
36+
],
37+
'copyright' => 'def:channel/dc:rights',
38+
'lastUpdated' => 'def:channel/dc:date',
39+
'generator' => 'def:channel/dc:publisher || def:channel/dc:creator',
40+
'language' => 'def:channel/dc:language',
41+
'category' => 'def:channel/dc:coverage || ' .
42+
'def:channel/dc:subject/taxo:topic/@rdf:value || dc:subject',
43+
];
44+
45+
$items_selector = 'def:item';
46+
47+
parent::__construct(
48+
new FeedTypes(FeedTypes::RDF_FEED),
49+
$default_lang,
50+
$xpath,
51+
$namespaces,
52+
$property_selectors,
53+
$items_selector,
54+
$remove_styles,
55+
$remove_scripts
56+
);
57+
}
58+
}

0 commit comments

Comments
 (0)