我正在开发基于 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>
我会感激任何帮助。
谢谢!
答案 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上写并翻译: - )