$short";
} else {
return "$escaped";
}
} else {
if ($short) {
return $short;
} else {
return $resource;
}
}
}
/** Return pretty-print view of a literal
*
* This method is mainly intended for internal use and is used by
* EasyRdf_Graph and EasyRdf_Sparql_Result to format a literal
* for display.
*
* @param mixed $literal An EasyRdf_Literal object or an associative array
* @param string $format Either 'html' or 'text'
* @param string $color The colour of the text
* @return string
*/
public static function dumpLiteralValue($literal, $format = 'html', $color = 'black')
{
if (!preg_match('/^#?[-\w]+$/', $color)) {
throw new InvalidArgumentException(
"\$color must be a legal color code or name"
);
}
if (is_object($literal)) {
$literal = $literal->toRdfPhp();
} elseif (!is_array($literal)) {
$literal = array('value' => $literal);
}
$text = '"'.$literal['value'].'"';
if (isset($literal['lang'])) {
$text .= '@' . $literal['lang'];
}
if (isset($literal['datatype'])) {
$short = EasyRdf_Namespace::shorten($literal['datatype']);
if ($short) {
$text .= "^^$short";
} else {
$text .= "^^<".$literal['datatype'].">";
}
}
if ($format == 'html') {
return "".
htmlentities($text, ENT_COMPAT, "UTF-8").
"";
} else {
return $text;
}
}
/** Clean up and split a mime-type up into its parts
*
* @param string $mimeType A MIME Type, optionally with parameters
* @return array $type, $parameters
*/
public static function parseMimeType($mimeType)
{
$parts = explode(';', strtolower($mimeType));
$type = trim(array_shift($parts));
$params = array();
foreach ($parts as $part) {
if (preg_match('/^\s*(\w+)\s*=\s*(.+?)\s*$/', $part, $matches)) {
$params[$matches[1]] = $matches[2];
}
}
return array($type, $params);
}
/** Execute a command as a pipe
*
* The proc_open() function is used to open a pipe to a
* a command line process, writing $input to STDIN, returning STDOUT
* and throwing an exception if anything is written to STDERR or the
* process returns non-zero.
*
* @param string $command The command to execute
* @param array $args Optional list of arguments to pass to the command
* @param string $input Optional buffer to send to the command
* @param string $dir Path to directory to run command in (defaults to /tmp)
* @return string The result of the command, printed to STDOUT
*/
public static function execCommandPipe($command, $args = null, $input = null, $dir = null)
{
$descriptorspec = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w')
);
// Use the system tmp directory by default
if (!$dir) {
$dir = sys_get_temp_dir();
}
if (is_array($args)) {
$fullCommand = implode(
' ',
array_map('escapeshellcmd', array_merge(array($command), $args))
);
} else {
$fullCommand = escapeshellcmd($command);
if ($args) {
$fullCommand .= ' '.escapeshellcmd($args);
}
}
$process = proc_open($fullCommand, $descriptorspec, $pipes, $dir);
if (is_resource($process)) {
// $pipes now looks like this:
// 0 => writeable handle connected to child stdin
// 1 => readable handle connected to child stdout
// 2 => readable handle connected to child stderr
if ($input) {
fwrite($pipes[0], $input);
}
fclose($pipes[0]);
$output = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$error = stream_get_contents($pipes[2]);
fclose($pipes[2]);
// It is important that you close any pipes before calling
// proc_close in order to avoid a deadlock
$returnValue = proc_close($process);
if ($returnValue) {
throw new EasyRdf_Exception(
"Error while executing command $command: ".$error
);
}
} else {
throw new EasyRdf_Exception(
"Failed to execute command $command"
);
}
return $output;
}
}