如何在基于Docbook标签的XSD中包含MathML标签?

时间:2014-02-20 20:10:47

标签: xml xsd docbook mathml

我正在开发基于 Docbook 5 标记子集的XSD。以下是此XSD的一小部分,其中一些标签仅用于说明问题:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" targetNamespace="http://docbook.org/ns/docbook" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink.xsd"/>
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
<xs:element name="book">
    <xs:annotation>
        <xs:documentation>Root element</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="chapter" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="xml:lang" use="required"/>
    </xs:complexType>
</xs:element>
<xs:element name="chapter">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="informalequation" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="xml:lang" use="required"/>
        <xs:attribute ref="xml:id" use="required"/>
    </xs:complexType>
</xs:element>
<xs:element name="informalequation">
    <xs:complexType>
        <xs:attribute ref="xml:id"/>
        <xs:attribute name="condition" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="block"/>
                    <xs:enumeration value="inline"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>

现在,元素<informalequation>没有内容,只有属性。我想做的是在其中加入MathML格式的等式,例如:

<math display='block'>
 <mrow>
  <msqrt>
   <mn>2</mn>
  </msqrt>
 </mrow>
</math>

这就是问题......我不知道怎么做,因为MathML标签不包含在Docbook中......我正在使用 Altova XMLSpy 2011企业版创建我的XSD。我从http://www.w3.org/Math/XMLSchema/下载了 MathML 3 XSD,但我不知道下一步该怎么做。有谁知道怎么做并得到一个有效的XSD所以我可以用这种结构创建一个基于它的XML?:

<?xml version="1.0" encoding="UTF-8"?>
<book xml:lang="en" version="5.0" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<chapter xml:lang="en" xml:id="1">
    <informalequation condition="block">
        <math display='block'>
            <mrow>
                <msqrt>
                    <mn>2</mn>
                </msqrt>
            </mrow>
        </math>
    </informalequation>
</chapter>

我会感激任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您希望数学在mathml名称空间中,所以

 <math display='block' xmlns="http://www.w3.org/1998/Math/MathML">

然后我认为您可以通过

替换<xs:simpleType>
     <xs:sequence>
        <xs:element ref="mml:math" xmlns:mml="http://www.w3.org/1998/Math/MathML"/>
    </xs:sequence>

并在验证器中安排mathml名称[ace与MathML架构相关联。

(但我从不使用XSD,我个人只是在RelaxNG上写并翻译: - )