diff --git a/MathMLRdfBuilder.php b/MathMLRdfBuilder.php
new file mode 100644
index 0000000..efc5543
--- /dev/null
+++ b/MathMLRdfBuilder.php
@@ -0,0 +1,35 @@
+getDataValue()->getValue() );
+ if ( $renderer->checkTeX() && $renderer->render() ) {
+ $mml = $renderer->getMathml();
+ } else {
+ $err = $renderer->getLastError();
+ $mml = "";
+ }
+ $writer->say( $propertyValueNamespace, $propertyValueLName )
+ ->value( $mml, 'http://www.w3.org/1998/Math/MathML' );
+ }
+}
diff --git a/MathWikidataHook.php b/MathWikidataHook.php
index 62183de..145dd1b 100644
--- a/MathWikidataHook.php
+++ b/MathWikidataHook.php
@@ -2,8 +2,12 @@
use ValueFormatters\FormatterOptions;
use ValueParsers\StringParser;
+use Wikibase\Rdf\DedupeBag;
+use Wikibase\Rdf\EntityMentionListener;
+use Wikibase\Rdf\RdfVocabulary;
use Wikibase\Repo\Parsers\WikibaseStringValueNormalizer;
use Wikibase\Repo\WikibaseRepo;
+use Wikimedia\Purtle\RdfWriter;
class MathWikidataHook {
@@ -41,6 +45,15 @@ class MathWikidataHook {
$wgOut->addModuleStyles( $styles );
return new MathFormatter( $format );
},
+ 'rdf-builder-factory-callback' => function (
+ $mode,
+ RdfVocabulary $vocab,
+ RdfWriter $writer,
+ EntityMentionListener $tracker,
+ DedupeBag $dedupe
+ ) {
+ return new MathMLRdfBuilder();
+ },
);
}
diff --git a/extension.json b/extension.json
index 9a00606..edc8732 100644
--- a/extension.json
+++ b/extension.json
@@ -28,7 +28,8 @@
"SpecialMathStatus": "SpecialMathStatus.php",
"MathValidator": "MathValidator.php",
"MathFormatter": "MathFormatter.php",
- "MathWikidataHook": "MathWikidataHook.php"
+ "MathWikidataHook": "MathWikidataHook.php",
+ "MathMLRdfBuilder": "MathMLRdfBuilder.php"
},
"DefaultUserOptions": {
"math": "png"
diff --git a/tests/MathMLRdfBuilderTest.php b/tests/MathMLRdfBuilderTest.php
new file mode 100644
index 0000000..4b6c54b
--- /dev/null
+++ b/tests/MathMLRdfBuilderTest.php
@@ -0,0 +1,72 @@
+checkBackend( true );
+ }
+
+ /**
+ * Sets up the fixture, for example, opens a network connection.
+ * This method is called before a test is executed.
+ */
+ protected function setUp() {
+ parent::setUp();
+ if ( !self::$hasRestbase ) {
+ $this->markTestSkipped( "Can not connect to Restbase Math interface." );
+ }
+ }
+
+ /**
+ *
+ * @param string $test
+ * @return string
+ */
+ private function makeCase( $test ) {
+ $builder = new MathMLRdfBuilder();
+ $writer = new NTriplesRdfWriter();
+ $writer->prefix( 'www', "http://www/" );
+ $writer->prefix( 'acme', self::ACME_PREFIX_URL );
+
+ $writer->start();
+ $writer->about( 'www', 'Q1' );
+
+ $snak = new PropertyValueSnak( new PropertyId( 'P1' ), new StringValue( $test ) );
+ $builder->addValue( $writer, 'acme', self::ACME_REF, 'DUMMY', $snak );
+
+ return trim( $writer->drain() );
+ }
+
+ public function testValidInput() {
+ $triples = $this->makeCase( 'a^2' );
+ $this->assertContains( self::ACME_PREFIX_URL . self::ACME_REF . '> "