]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blobdiff - vendor/wikimedia/purtle/src/RdfWriter.php
MediaWiki 1.30.2
[autoinstalls/mediawiki.git] / vendor / wikimedia / purtle / src / RdfWriter.php
diff --git a/vendor/wikimedia/purtle/src/RdfWriter.php b/vendor/wikimedia/purtle/src/RdfWriter.php
new file mode 100644 (file)
index 0000000..3fb1680
--- /dev/null
@@ -0,0 +1,183 @@
+<?php
+
+namespace Wikimedia\Purtle;
+
+/**
+ * Writer interface for RDF output. RdfWriter instances are generally stateful,
+ * but should be implemented to operate in a stream-like manner with a minimum of state.
+ *
+ * This is intended to provide a "fluent interface" that allows programmers to use
+ * a turtle-like structure when generating RDF output. E.g.:
+ *
+ * @code
+ * $writer->prefix( 'acme', 'http://acme.test/terms/' );
+ * $writer->about( 'http://quux.test/Something' )
+ *   ->say( 'acme', 'name' )->text( 'Thingy' )->text( 'Dingsda', 'de' )
+ *   ->say( 'acme', 'owner' )->is( 'http://quux.test/' );
+ * @endcode
+ *
+ * To get the generated RDF output, use the drain() method.
+ *
+ * @note: The contract of this interface follows the GIGO principle, that is,
+ * implementations are not required to ensure valid output or prompt failure on
+ * invalid input. Speed should generally be favored over safety.
+ *
+ * Caveats:
+ * - no relative iris
+ * - predicates must be qnames
+ * - no inline/nested blank nodes
+ * - no comments
+ * - no collections
+ * - no automatic conversion of iris to qnames
+ *
+ * @license GPL-2.0+
+ * @author Daniel Kinzler
+ */
+interface RdfWriter {
+
+       //TODO: split: generic RdfWriter class with shorthands, use RdfFormatters for output
+
+       /**
+        * Returns the local name of a blank node, for use with the "_" prefix.
+        *
+        * @param string|null $label node label, will be generated if not given.
+        *
+        * @return string A local name for the blank node, for use with the '_' prefix.
+        */
+       public function blank( $label = null );
+
+       /**
+        * Start the document. May generate a header.
+        */
+       public function start();
+
+       /**
+        * Finish the document. May generate a footer.
+        *
+        * This will detach all sub-writers that had earlier been returned by sub().
+        */
+       public function finish();
+
+       /**
+        * Generates an RDF string from the current buffers state and returns it.
+        * The buffer is reset to the empty state.
+        * Before the result string is generated, implementations should close any
+        * pending syntactical structures (close tags, generate footers, etc).
+        *
+        * @return string The RDF output
+        */
+       public function drain();
+
+       /**
+        * Declare a prefix for later use. Prefixes should be declared before being used.
+        * Should not be called after start().
+        *
+        * @param string $prefix
+        * @param string $iri a IRI
+        */
+       public function prefix( $prefix, $iri );
+
+       /**
+        * Start an "about" (subject) clause, given a subject.
+        * Can occur at the beginning odf the output sequence, but can later only follow
+        * a call to is(), text(), or value().
+        * Should fail if called at an inappropriate time in the output sequence.
+        *
+        * @param string $base A QName prefix if $local is given, or an IRI if $local is null.
+        * @param string|null $local A QName suffix, or null if $base is an IRI.
+        *
+        * @return RdfWriter $this
+        */
+       public function about( $base, $local = null );
+
+       /**
+        * Start a predicate clause.
+        * Can only follow a call to about() or say().
+        * Should fail if called at an inappropriate time in the output sequence.
+        *
+        * @note Unlike about() and is(), say() cannot be called with a full IRI,
+        * but must always use qname form. This is required to cater to output
+        * formats that do not allow IRIs to be used as predicates directly,
+        * like RDF/XML.
+        *
+        * @param string $base A QName prefix if $local is given, or a shorthand. MUST NOT be an IRI.
+        * @param string|null $local A QName suffix, or null if $base is a shorthand.
+        *
+        * @return RdfWriter $this
+        */
+       public function say( $base, $local = null );
+
+       /**
+        * Produce a resource as the object of a statement.
+        * Can only follow a call to say() or a call to one of is(), text(), or value().
+        * Should fail if called at an inappropriate time in the output sequence.
+        *
+        * @param string $base A QName prefix if $local is given, or an IRI or shorthand if $local is null.
+        * @param string|null $local A QName suffix, or null if $base is an IRI or shorthand.
+        *
+        * @return RdfWriter $this
+        */
+       public function is( $base, $local = null );
+
+       /**
+        * Produce a text literal as the object of a statement.
+        * Can only follow a call to say() or a call to one of is(), text(), or value().
+        * Should fail if called at an inappropriate time in the output sequence.
+        *
+        * @param string $text the text to be placed in the output
+        * @param string|null $language the language the text is in
+        *
+        * @return RdfWriter $this
+        */
+       public function text( $text, $language = null );
+
+       /**
+        * Produce a typed or untyped literal as the object of a statement.
+        * Can only follow a call to say() or a call to one of is(), text(), or value().
+        * Should fail if called at an inappropriate time in the output sequence.
+        *
+        * @param string $value the value encoded as a string
+        * @param string|null $typeBase The data type's QName prefix if $typeLocal is given,
+        *        or an IRI or shorthand if $typeLocal is null.
+        * @param string|null $typeLocal The data type's  QName suffix,
+        *        or null if $typeBase is an IRI or shorthand.
+        *
+        * @return RdfWriter $this
+        */
+       public function value( $value, $typeBase = null, $typeLocal = null );
+
+       /**
+        * Shorthand for say( 'a' )->is( $type ).
+        *
+        * @param string $typeBase The data type's QName prefix if $typeLocal is given,
+        *        or an IRI or shorthand if $typeLocal is null.
+        * @param string|null $typeLocal The data type's  QName suffix,
+        *        or null if $typeBase is an IRI or shorthand.
+        *
+        * @return RdfWriter $this
+        */
+       public function a( $typeBase, $typeLocal = null );
+
+       /**
+        * Returns a document-level sub-writer.
+        * This can be used to generate parts statements out of sequence.
+        * Output generated by the sub-writer will be present in the
+        * return value of drain(), after any output generated by this
+        * writer itself.
+        *
+        * @note: calling drain() on sub-writers results in undefined behavior!
+        * @note: using sub-writers after finish() has been called on this writer
+        *        results in undefined behavior!
+        *
+        * @return RdfWriter
+        */
+       public function sub();
+
+       /**
+        * Returns the MIME type of the RDF serialization the writer produces.
+        *
+        * @return string a MIME type
+        */
+       public function getMimeType();
+
+}