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

Posted

技术标签:

【中文标题】如何在基于 Docbook 标签的 XSD 中包含 MathML 标签?【英文标题】:How to include MathML tags in an XSD based on Docbook tags? 【发布时间】:2014-02-20 20:10:47 【问题描述】:

我正在开发一个基于 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>

现在,元素&lt;informalequation&gt; 没有内容,只有属性。我想做的是在其中放入一个 MathML 格式的方程,例如:

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

这就是问题所在...我不知道该怎么做,因为 MathML 标签不包含在 Docbook 中...我正在使用 Altova XMLSpy 2011 Enterprise Edition 创建我的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】:

首先,您希望数学位于 mathml 命名空间中

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

那我想你可以把&lt;xs:simpleType&gt;替换成

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

并在您的验证器中安排 mathml 名称[ace 与 MathML 模式相关联。

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

【讨论】:

以上是关于如何在基于 Docbook 标签的 XSD 中包含 MathML 标签?的主要内容,如果未能解决你的问题,请参考以下文章

xs:anyURI 可以在 XSD 中包含方括号吗?

如何在 vimwiki html /smarty 文件中包含 pygments?

如何在静态文本标签中包含特殊字符?

使用模块和计数时如何在 terraform 中包含标签

如何在 D3 图表的标签中包含换行符?

在 pyqt5 中包含带有悬停标签的 matplotlib