Issues (146)

examples/dbpedia.php (5 issues)

1
<?php
2
/**
3
 * Example of grabbing and parsing Linked Data from DBPedia.
4
 *
5
 * This example illustrates how QueryPath can be used to do the following:
6
 * 
7
 * - Make a robust HTTP connection to a remote server to fetch data.
8
 * - Using context to control the underlying stream.
9
 * - Working with Linked Data.
10
 * - Work with XML Namespaces in documents.
11
 *   * Using namespaces to access elements in selectors
12
 *   * Using namespaces to access attributes in selectors
13
 *   * Using namespaces to access attributes in XML methods.
14
 *
15
 * The code here connects to the DBPedia server and looks up the Linked
16
 * Data stored there for a particular Wikipedia entry (any Wikipedia
17
 * wiki name should work here).
18
 * 
19
 * 
20
 * @author M Butcher <[email protected]>
21
 * @license LGPL The GNU Lesser GPL (LGPL) or an MIT-like license.
22
 * @see http://www.w3.org/DesignIssues/LinkedData.html
23
 * @see http://dbpedia.org
24
 * @see sparql.php
25
 * @see musicbrainz.php
26
 */
27
28
require_once '../src/QueryPath/QueryPath.php';
29
30
// The URL to look up (any of these works):
31
$url = 'http://dbpedia.org/data/The_Beatles.rdf';
32
//$url = 'http://dbpedia.org/data/Swansea.rdf';
33
//$url = 'http://dbpedia.org/data/The_Lord_of_the_Rings.rdf';
34
// HTTP headers:
35
$headers = array(
36
  'Accept: application/rdf,application/rdf+xml;q=0.9,*/*;q=0.8',
37
  'Accept-Language: en-us,en',
38
  'Accept-Charset: ISO-8859-1,utf-8',
39
  'User-Agent: QueryPath/1.2',
40
);
41
42
// The context options:
43
$options = array(
44
  'http' => array(
45
    'method' => 'GET',
46
    'protocol_version' => 1.1,
47
    'header' => implode("\r\n", $headers),
48
  ),
49
);
50
51
// Create a stream context that will tell QueryPath how to 
52
// load the file.
53
$cxt = stream_context_create($options);
54
55
// Fetch the URL and select all rdf:Description elements.
56
// (Note that | is the CSS 3 equiv of colons for namespacing.)
57
// To add the context, we pass it in as an option to QueryPath.
58
$qp = qp($url, 'rdf|Description', array('context' => $cxt));
59
//$qp = qp('The_Beatles.rdf');
60
61
printf("There are %d descriptions in this record.\n", $qp->size());
0 ignored issues
show
Deprecated Code introduced by
The function QueryPath\DOMQuery::size() has been deprecated: QueryPath now implements Countable, so use count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

61
printf("There are %d descriptions in this record.\n", /** @scrutinizer ignore-deprecated */ $qp->size());

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
62
63
// Here, we use rdf|* to select all elements in the RDF namespace.
64
$qp->top()->find('rdf|*');
65
printf("There are %d RDF items in this record.\n", $qp->size());
0 ignored issues
show
Deprecated Code introduced by
The function QueryPath\DOMQuery::size() has been deprecated: QueryPath now implements Countable, so use count(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

65
printf("There are %d RDF items in this record.\n", /** @scrutinizer ignore-deprecated */ $qp->size());

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
66
67
// Standard pseudo-classes that are not HTML specific can be used on 
68
// namespaced elements, too.
69
print "About: " . $qp->top()->find('rdfs|label:first')->text() . PHP_EOL;
0 ignored issues
show
Are you sure $qp->top()->find('rdfs|label:first')->text() of type QueryPath\DOMQuery|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

69
print "About: " . /** @scrutinizer ignore-type */ $qp->top()->find('rdfs|label:first')->text() . PHP_EOL;
Loading history...
70
print "About (FOAF): " . $qp->top()->find('foaf|name:first')->text() . PHP_EOL;
0 ignored issues
show
Are you sure $qp->top()->find('foaf|name:first')->text() of type QueryPath\DOMQuery|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

70
print "About (FOAF): " . /** @scrutinizer ignore-type */ $qp->top()->find('foaf|name:first')->text() . PHP_EOL;
Loading history...
71
72
// Namespaced attributes can be retrieved using the same sort of delimiting.
73
print "\nComment:\n";
74
print $qp->top()->find('rdfs|comment[xml|lang="en"]')->text();
0 ignored issues
show
Are you sure $qp->top()->find('rdfs|c...ml|lang="en"]')->text() of type QueryPath\DOMQuery|string can be used in print()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

74
print /** @scrutinizer ignore-type */ $qp->top()->find('rdfs|comment[xml|lang="en"]')->text();
Loading history...
75
print PHP_EOL;
76
77
$qp->top();
78
79
print "\nImages:\n";
80
foreach ($qp->branch()->find('foaf|img') as $img) {
81
  // Note that when we use attr() we are using the XML name, NOT 
82
  // the CSS 3 name. So it is rdf:resource, not rdf|resource.
83
  // The same goes for the tag() function -- it will return 
84
  // the full element name (e.g. rdf:Description).
85
  print $img->attr('rdf:resource') . PHP_EOL;
86
}
87
88
print "\nImages Galleries:\n";
89
foreach ($qp->branch()->find('dbpprop|hasPhotoCollection') as $img) {
90
  print $img->attr('rdf:resource') . PHP_EOL;
91
}
92
93
print "\nOther Sites:\n";
94
foreach ($qp->branch()->find('foaf|page') as $img) {
95
  print $img->attr('rdf:resource') . PHP_EOL;
96
}
97
98
//$qp->writeXML();