如何在基于 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>
现在,元素<informalequation>
没有内容,只有属性。我想做的是在其中放入一个 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">
那我想你可以把<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 编写并翻译:-)
【讨论】:
以上是关于如何在基于 Docbook 标签的 XSD 中包含 MathML 标签?的主要内容,如果未能解决你的问题,请参考以下文章