%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/vendor/wikimedia/purtle/src/ |
| Current File : //www/varak.net/wiki.varak.net/vendor/wikimedia/purtle/src/RdfWriterFactory.php |
<?php
namespace Wikimedia\Purtle;
use InvalidArgumentException;
/**
* @since 0.5
*
* @license GPL-2.0-or-later
* @author Daniel Kinzler
*/
class RdfWriterFactory {
/**
* Returns a list of canonical format names.
* These names for internal use with getMimeTypes() and getFileExtension(),
* they are not themselves MIME types or file extensions.
*
* @return string[]
*/
public function getSupportedFormats() {
return [ 'n3', 'turtle', 'ntriples', 'rdfxml', 'jsonld' ];
}
/**
* Returns a list of mime types that correspond to the format.
*
* @param string $format a format name, as returned by getSupportedFormats() or getFormatName().
*
* @throws InvalidArgumentException if $format is not a cononical format name
* @return string[]
*/
public function getMimeTypes( $format ) {
// NOTE: Maintaining mime types and file extensions in the RdfWriter implementations
// is tempting, but means we have to load all these classes to find the right
// one for a requested name. Better avoid that overhead when serving lots of
// HTTP requests.
switch ( strtolower( $format ) ) {
case 'n3':
return [ 'text/n3', 'text/rdf+n3' ];
case 'turtle':
return [ 'text/turtle', 'application/x-turtle' ];
case 'ntriples':
return [ 'application/n-triples', 'text/n-triples', 'text/plain' ];
case 'rdfxml':
return [ 'application/rdf+xml', 'application/xml', 'text/xml' ];
case 'jsonld':
return [ 'application/ld+json', 'application/json' ];
default:
throw new InvalidArgumentException( 'Bad format: ' . $format );
}
}
/**
* Returns a file extension that correspond to the format.
*
* @param string $format a format name, as returned by getSupportedFormats() or getFormatName().
*
* @throws InvalidArgumentException if $format is not a cononical format name
* @return string
*/
public function getFileExtension( $format ) {
switch ( strtolower( $format ) ) {
case 'n3':
return 'n3';
case 'turtle':
return 'ttl';
case 'ntriples':
return 'nt';
case 'rdfxml':
return 'rdf';
case 'jsonld':
return 'jsonld';
default:
throw new InvalidArgumentException( 'Bad format: ' . $format );
}
}
/**
* Returns an RdfWriter for the given format name.
*
* @param string $format a format name, as returned by getSupportedFormats() or getFormatName().
* @param BNodeLabeler|null $labeler Optional labeler
*
* @throws InvalidArgumentException if $format is not a canonical format name
* @return RdfWriter the format object, or null if not found.
*/
public function getWriter( $format, BNodeLabeler $labeler = null ) {
switch ( strtolower( $format ) ) {
case 'n3':
// falls through to turtle
case 'turtle':
return new TurtleRdfWriter( RdfWriterBase::DOCUMENT_ROLE, $labeler );
case 'ntriples':
return new NTriplesRdfWriter( RdfWriterBase::DOCUMENT_ROLE, $labeler );
case 'rdfxml':
return new XmlRdfWriter( RdfWriterBase::DOCUMENT_ROLE, $labeler );
case 'jsonld':
return new JsonLdRdfWriter( RdfWriterBase::DOCUMENT_ROLE, $labeler );
default:
throw new InvalidArgumentException( 'Bad format: ' . $format );
}
}
/**
* Returns the canonical format name for $format. $format may be a file extension,
* a mime type, or a common or canonical name of the format.
*
* If no format is found for $format, this method returns false.
*
* @param string $format the name (file extension, mime type) of the desired format.
*
* @return string|false the canonical format name
*/
public function getFormatName( $format ) {
switch ( strtolower( $format ) ) {
case 'n3':
case 'text/n3':
case 'text/rdf+n3':
return 'n3';
case 'ttl':
case 'turtle':
case 'text/turtle':
case 'application/x-turtle':
return 'turtle';
case 'nt':
case 'ntriples':
case 'n-triples':
case 'text/plain':
case 'text/n-triples':
case 'application/ntriples':
case 'application/n-triples':
return 'ntriples';
case 'xml':
case 'rdf':
case 'rdfxml':
case 'application/rdf+xml':
case 'application/xml':
case 'text/xml':
return 'rdfxml';
case 'json':
case 'jsonld':
case 'application/ld+json':
case 'application/json':
return 'jsonld';
default:
return false;
}
}
}