source: pmb4.1/trunk/fuentes/pmb/classes/rdf/arc2/ARC2_getFormat.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 2.9 KB
Line 
1<?php
2/**
3 * ARC2 format detection function
4 *
5 * @author Benjamin Nowack <bnowack@semsol.com>
6 * @license http://arc.semsol.org/license
7 * @package ARC2
8 * @version 2010-11-16
9*/
10
11function ARC2_getFormat($v, $mtype = '', $ext = '') {
12  $r = false;
13  /* mtype check (atom, rdf/xml, turtle, n3, mp3, jpg) */
14  $r = (!$r && preg_match('/\/atom\+xml/', $mtype)) ? 'atom' : $r;
15  $r = (!$r && preg_match('/\/rdf\+xml/', $mtype)) ? 'rdfxml' : $r;
16  $r = (!$r && preg_match('/\/(x\-)?turtle/', $mtype)) ? 'turtle' : $r;
17  $r = (!$r && preg_match('/\/rdf\+n3/', $mtype)) ? 'n3' : $r;
18  $r = (!$r && preg_match('/\/sparql-results\+xml/', $mtype)) ? 'sparqlxml' : $r;
19  /* xml sniffing */
20  if (
21    !$r &&
22    /* starts with angle brackets */
23    preg_match('/^\s*\<[^\s]/s', $v) &&
24    /* has an xmlns:* declaration or a matching pair of tags */
25    (preg_match('/\sxmlns\:?/', $v) || preg_match('/\<([^\s]+).+\<\/\\1\>/s', $v)) // &&
26  ) {
27    while (preg_match('/^\s*\<\?xml[^\r\n]+\?\>\s*/s', $v)) {
28      $v = preg_replace('/^\s*\<\?xml[^\r\n]+\?\>\s*/s', '', $v);
29    }
30    while (preg_match('/^\s*\<\!--.+?--\>\s*/s', $v)) {
31      $v = preg_replace('/^\s*\<\!--.+?--\>\s*/s', '', $v);
32    }
33    /* doctype checks (html, rdf) */
34    $r = (!$r && preg_match('/^\s*\<\!DOCTYPE\s+html[\s|\>]/is', $v)) ? 'html' : $r;
35    $r = (!$r && preg_match('/^\s*\<\!DOCTYPE\s+[a-z0-9\_\-]\:RDF\s/is', $v)) ? 'rdfxml' : $r;
36    /* markup checks */
37    $v = preg_replace('/^\s*\<\!DOCTYPE\s.*\]\>/is', '', $v);
38    $r = (!$r && preg_match('/^\s*\<rss\s+[^\>]*version/s', $v)) ? 'rss' : $r;
39    $r = (!$r && preg_match('/^\s*\<feed\s+[^\>]+http\:\/\/www\.w3\.org\/2005\/Atom/s', $v)) ? 'atom' : $r;
40    $r = (!$r && preg_match('/^\s*\<opml\s/s', $v)) ? 'opml' : $r;
41    $r = (!$r && preg_match('/^\s*\<html[\s|\>]/is', $v)) ? 'html' : $r;
42    $r = (!$r && preg_match('/^\s*\<sparql\s+[^\>]+http\:\/\/www\.w3\.org\/2005\/sparql\-results\#/s', $v)) ? 'sparqlxml' : $r;
43    $r = (!$r && preg_match('/^\s*\<[^\>]+http\:\/\/www\.w3\.org\/2005\/sparql\-results#/s', $v)) ? 'srx' : $r;
44    $r = (!$r && preg_match('/^\s*\<[^\s]*RDF[\s\>]/s', $v)) ? 'rdfxml' : $r;
45    $r = (!$r && preg_match('/^\s*\<[^\>]+http\:\/\/www\.w3\.org\/1999\/02\/22\-rdf/s', $v)) ? 'rdfxml' : $r;
46   
47    $r = !$r ? 'xml' : $r;
48  }
49  /* json|jsonp */
50  if (!$r && preg_match('/^[a-z0-9\.\(]*\s*[\{\[].*/s', trim($v))) {
51    /* google social graph api */
52    $r = (!$r && preg_match('/\"canonical_mapping\"/', $v)) ? 'sgajson' : $r;
53    /* crunchbase api */
54    $r = (!$r && preg_match('/\"permalink\"/', $v)) ? 'cbjson' : $r;
55
56    $r = !$r ? 'json' : $r;
57  }
58  /* turtle/n3 */
59  $r = (!$r && preg_match('/\@(prefix|base)/i', $v)) ? 'turtle' : $r;
60  $r = (!$r && preg_match('/^(ttl)$/', $ext)) ? 'turtle' : $r;
61  $r = (!$r && preg_match('/^(n3)$/', $ext)) ? 'n3' : $r;
62  /* ntriples */
63  $r = (!$r && preg_match('/^\s*(_:|<).+?\s+<[^>]+?>\s+\S.+?\s*\.\s*$/sm', $v)) ? 'ntriples' : $r;
64  $r = (!$r && preg_match('/^(nt)$/', $ext)) ? 'ntriples' : $r;
65  return $r;
66}
Note: See TracBrowser for help on using the repository browser.