optionale MathML Elemente
Jan
- xml
0 Thomas J.S.0 Jan
Hallo,
ich habe eine DTD und eine beispielhafte XML fuer einen Multiplechoice-Test geschrieben. Ich wuerde gerne definieren, dass jede Frage und jede Antwort optional eine oder mehrere Formeln in MathML enthalten kann. Wie kann ich das in der DTD definieren und wie wuerde die zugehoerige XML aussehen? Vielen Dank im Voraus!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE examination [
<!ELEMENT examination (title, language?, question_answer_set)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT language (#PCDATA)>
<!ELEMENT question_answer_set (question,answer1,answer2,answer3,answer4)+>
<!ELEMENT question (#PCDATA)>
<!ELEMENT answer1 (#PCDATA)>
<!ELEMENT answer2 (#PCDATA)>
<!ELEMENT answer3 (#PCDATA)>
<!ELEMENT answer4 (#PCDATA)>
]>
<?xml-stylesheet type="text/xsl" href="examination-html.xsl.xml" ?>
<!-- <?xml-stylesheet type="text/xsl" href="http://www.w3.org/Math/XSL/mathml.xsl"?> -->
<examination>
<title>Examination in mathematics</title>
<language>Dari</language>
<question_answer_set>
<question>How is the following formula?
<math title="E=mc^2" xmlns="http://www.w3.org/1998/Math/MathML">
<mstyle mathcolor="red" displaystyle="true" fontfamily="serif">
<mi>E</mi>
<mo>=</mo>
<mi>m</mi>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</mstyle>
</math>
</question>
<answer1>Fine</answer1>
<answer2>Good</answer2>
<answer3>Not bad</answer3>
<answer4>better</answer4>
</question_answer_set>
</examination>
Hallo,
ich habe eine DTD und eine beispielhafte XML fuer einen Multiplechoice-Test geschrieben. Ich wuerde gerne definieren, dass jede Frage und jede Antwort optional eine oder mehrere Formeln in MathML enthalten kann. Wie kann ich das in der DTD definieren und wie wuerde die zugehoerige XML aussehen?
Du kannst das DTD gar nicht defineren, denn du müsstest dazu eine koplette MathML-DTD in deine einbauen. Auch ein <!ELEMENT mathmlcontainer ANY> hilft, nicht, denn deren Inhaltselemente muss du trotzdem noch immer definieren.
Eine XML-Schema würde sich für deine Zwecke eher anbieten, aber wenn dir Wohlgeformtheit (statt Validierung) auch genügt, kannst du auf die DTD verzichten.
Grüße
Thomas
Hallo Thomas, danke fuer die Antwort!
Bzgl. der DTD: Kann ich denn auf eine DTD verweisen die MathML definiert und so das gewuenschte Ergebnis erzielen? Wenn ja, wie?
Wie ist es denn mit XSL? Ich habe eine XSL zur Ausgabe von HTML-Code geschrieben. Ich wuerde nun gerne definieren, dass einige Elemente Text und MathML-Elemente gemischt enthalten koennen und die MathML-Elemente bitte nicht ausgefuehrt werden sollen sondern einfach ausgegeben werden sollen.
Beispiel:
Ausschnitt aus XML:
----------------
<question>
A question...
<math title="E=mc^2" xmlns="http://www.w3.org/1998/Math/MathML">
<mi>E</mi>
<mo>=</mo>
<mi>m</mi>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</math>
</question>
----------------
Die Ausgabe sollte genau so aussehen:
----------------
A question...
<math title="E=mc^2" xmlns="http://www.w3.org/1998/Math/MathML">
<mi>E</mi>
<mo>=</mo>
<mi>m</mi>
<msup>
<mi>c</mi>
<mn>2</mn>
</msup>
</math>
----------------
Die Ausgabe sollte NICHT so aussehen:
----------------
A question...
E
=
m
c
2
----------------
Bisher sieht der entsprechende Eintrag in der XSL so aus und liefert natuerlich nicht das erwuenschte Ergebnis:
----------------
<xsl:template match="question">
<xsl:value-of select="."/>
</xsl:template>
----------------
Wie kann ich die gewuenschte Ausgabe erreichen?
vielen Dank,
jan
Hallo,
ich habe eine DTD und eine beispielhafte XML fuer einen Multiplechoice-Test geschrieben. Ich wuerde gerne definieren, dass jede Frage und jede Antwort optional eine oder mehrere Formeln in MathML enthalten kann. Wie kann ich das in der DTD definieren und wie wuerde die zugehoerige XML aussehen?
Du kannst das DTD gar nicht defineren, denn du müsstest dazu eine koplette MathML-DTD in deine einbauen. Auch ein <!ELEMENT mathmlcontainer ANY> hilft, nicht, denn deren Inhaltselemente muss du trotzdem noch immer definieren.
Eine XML-Schema würde sich für deine Zwecke eher anbieten, aber wenn dir Wohlgeformtheit (statt Validierung) auch genügt, kannst du auf die DTD verzichten.
Grüße
Thomas
Hallo,
Bzgl. der DTD: Kann ich denn auf eine DTD verweisen die MathML definiert und so das gewuenschte Ergebnis erzielen? Wenn ja, wie?
Dass kannst du zwar, aber ... es wird halt ein wenig kopliziert ;-)
Du kannst ein Parameterentity definieren und gleich aufrufen:
<!ENTITY % MathMLElements SYSTEM "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
%mathml.dtd;
Dann kannst du in deinen Elementen MathML verwenden, z.B.:
<!ELEMENT foo (bla | math)>
oder etwas kopmlizierter, wenn du MathML mal einsetzen, mal nicht einsetzen willst:
<!ENTITY % MathMLElements "INCLUDE">
<![%MathMLElements;[
<!ENTITY % mathml.dtd SYSTEM "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
%mathml.dtd;
]]>
und ein XML wo du MathML ignorierst.
---------------
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE page SYSTEM "page.dtd" [
<!ENTITY % MathMLElements "IGNORE">
]>
<?xml-stylesheet type="text/xsl" href="page.xsl"?>
<page>
....
---------------
Beachte aber bei all dem, dass dein XML-Parser in der Lage sein muss, externe Entities aufzulösen (die MathML-DTD inkludiert - wahlweise - noch auch eine "mathml2-qname-1.mod" und verschiedene Entity-Dateien).
Du findest dazu auch weitere Infos unter http://www.w3.org/TR/MathML2/appendixa.html und ein konkret Beispiel, wie MathML in XHTML (1.1) eingebunden werden kann: http://www.w3.org/TR/MathML2/appendixa.html
Auch dieses http://www.w3.org/TR/XHTMLplusMathMLplusSVG/ Dokument könnte dich interessieren.
Wie ist es denn mit XSL? Ich habe eine XSL zur Ausgabe von HTML-Code geschrieben. Ich wuerde nun gerne definieren, dass einige Elemente Text und MathML-Elemente gemischt enthalten koennen und die MathML-Elemente bitte nicht ausgefuehrt werden sollen sondern einfach ausgegeben werden sollen.
<xsl:template match="question">
<xsl:value-of select="."/>
</xsl:template>Wie kann ich die gewuenschte Ausgabe erreichen?
<xsl:template match="question">
<xsl:copy-of select="child::node()"/>
</xsl:template>
Grüße
Thomas
Nachtag ...
Dass kannst du zwar, aber ... es wird halt ein wenig kopliziert ;-)
Du kannst ein Parameterentity definieren und gleich aufrufen:<!ENTITY % MathMLElements SYSTEM "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
%mathml.dtd;
Natürlich so ist es korekt:
<!ENTITY % MathMLElements SYSTEM "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
%MathMLElements;
Thomas