用Wolfram语言表示XML
XML和Wolfram语言
Wolfram语言包括对XML格式,由万维网联盟(W3C)用于描述结构化文档和数据。使用Wolfram语言的XML功能,您可以执行以下任何操作:
- 以Wolfram Language表达式的形式将任意XML文档导入Wolfram语言。
- 使用Wolfram语言复杂的编程和符号操作功能分析XML文档的内容或转换其结构。
- 将生成的表达式导出回XML文档,以便与其他用户和应用程序共享。
原生XML格式
Wolfram语言内置了对许多XML格式的支持,包括数学ML,SVG公司,表达式ML,合资公司,X3D系列,虚拟现实建模语言、和XHTML(XHTML)。如果您使用任何这些格式导入文档,它将自动转换为特定类型的Wolfram语言表达式。ExpressionML文件作为单元格表达式导入。一个MathML文件作为一个box表达式返回。
数学ML
MathML是W3C开发的一种XML格式,用于描述数学公式的结构和含义。它提供了在网页中显示数学符号的标准方法。Wolfram Language支持导入和导出MathML,以及生成和操作MathML,以及MathML和Wolfram语言内部用于表示数学的表达式之间的转换。
这些特性使Wolfram语言成为创作和编辑MathML内容的优秀环境。例如,您可以使用Wolfram语言强大的排版系统创建格式正确的公式,然后将其以MathML格式复制并粘贴到HTML文档中,以便在web上显示。您还可以从其他应用程序导入MathML方程,并使用Wolfram语言对其进行评估。
SVG公司
SVG(可缩放矢量图形)是W3C开发的一种XML格式,用于描述二维图形。SVG图像可以在不损失分辨率的情况下重新缩放,并且通常比可比较的JPEG或GIF图像小得多。SVG文件还可以使用脚本语言进行操作,以生成动态和交互式图形。使用数学软件4.2及更高版本,您可以直接以SVG格式导出笔记本中的任何图形。
表达式ML
ExpressionML片段可以以XML格式表示任何Wolfram语言表达式。
符号XML
什么是符号XML?
符号XML是Wolfram语言用于表示XML文档的格式。从XML到符号XML的转换将XML文档转换为Wolfram语言表达式,同时保留其结构。由于XML文档和Wolfram语言表达式都有树结构,因此存在从一个到另一个的自然映射。然后,您可以使用Wolfram语言编程的标准技术操作符号XML表达式。
您可以使用标准将XML数据导入Wolfram语言导入或导入字符串功能。您还可以通过指定选项来控制导入过程的各种细节,例如如何处理空白、是否识别实体或是否根据DTD进行验证。
以下命令将XML数据文件导入Wolfram语言。
导入[“data.xml”,“XML”]
结果是一个符号XML表达式,表达式1,然后可以使用标准Wolfram语言命令对其进行操作。转换的最终结果是另一个符号XML表达式,表达式2.
快递1->快递2
最后,您可以使用标准将结果导出为XML文件导出功能。
导出[“newdata.xml”,快递2,“XML”]
您可以使用选项控制导出过程的各种详细信息,例如导出的XML的格式。
符号XML和Wolfram语言编程的结合为操作XML文档的其他技术提供了一种有用的替代方法,例如XSLT转换或与Java等低级编程语言一起使用的SAX或DOM API。Wolfram语言 允许您在处理XML文档时实现相同级别的灵活性和控制。您可以利用Wolfram语言对符号操作和数值计算的高级支持来进行一些非常复杂和复杂的转换,这些转换使用其他方法很难或不可能实现。
例如,您可以使用模式匹配技术提取XML文档的特定部分,对数据执行数值计算,然后将结果转换为3D图形以便于可视化。您还可以定义转换以将一种类型的XML应用程序转换为另一种类型。例如,您可以将DocBook文档导入为符号XML,然后通过定义合适的转换规则将其转换为XHTML格式,以将一组元素名称替换为另一组。有关符号XML有用应用程序的一些特定示例,请参阅“正在转换XML”.
对符号XML的支持与ExpressionML和MathML很好地集成在一起。您可以将ExpressionML和MathML作为符号XML导入,也可以将ExportionML作为表达式导入,将MathMLs作为排版框表达式导入。有大量的内核函数,可以在字符串、框或表达式与MathML或符号XML之间快速轻松地转换。
如果您喜欢直接使用Java操作XML文档,您仍然可以使用J/Link附加包进行操作。此包将Wolfram语言与Java完全集成,使您能够从Wolfram Language调用Java命令 或从Java程序调用Wolfram语言内核函数。因此,您可以访问Wolfram语言的计算能力以及Java的低级编程功能和类,并根据需要将两者结合起来。
表示元素
XML文档中的每个元素都对应于XML元素符号XML中的对象。表单的XML表达式
<
要素
属性
='
价值
'>
数据
</
要素
>
在符号XML中具有以下表示形式:
XML元素[要素,{属性->价值},{数据}].
每个XML元素[]表达式有三个参数:
- 第二个参数将元素的属性指定为零个或多个规则的列表,每个规则以以下形式指定一个属性属性->价值.
《白鲸》
下面是这个片段在符号XML中的表示。
XML元素[“书”,{“类型”->“新颖”},{《白鲸》}]
下面是一个更复杂的XML表达式,显示了几个嵌套级别。
<book type='novel'>《白鲸》<作者出生='1819'死亡='1891'><名称>赫尔曼梅尔维尔</name></author></book>
下面是相应的符号XML表达式。
处理命名空间
如果在XML元素中指定了名称空间,则相应符号XML表达式的语法稍微复杂一些。确切的语法取决于是将名称空间隐式指定为默认名称空间,还是使用名称空间前缀显式指定。
使用默认命名空间
对于位于默认命名空间中的任何元素XML元素表达式与未指定命名空间时的表达式相同。但是,声明默认名称空间的元素具有XML元素表达式已修改。
下面是一个简单的XHTML文档,其中在html格式元素。
<html xmlns='http://www.w3.org/1999/xhtml'><头部><body><p>这里有一些文字</p>(第页)</body></html>
下面是相应的符号XML表达式。
请注意XML元素表示html格式元素。其第二个论点是:
{{"http://www.w3.org/2000/xmlns/",“圣诞节”}->"http://www.w3.org/1999/xhtml"}.
此声明:
- 确定圣诞节具有URI(通用资源标识符)定义的命名空间的属性http://www.w3.org/2000/xmlns,符合XML规范的要求。
XML元素[要素,{{xmlns_uri,“圣诞节”}->命名空间uri},{数据}].
在这里xmlns_uri是与的命名空间关联的URI圣诞节属性和命名空间uri是要声明的默认命名空间的URI。
使用显式命名空间前缀
如果使用名称空间前缀在元素上显式指定名称空间,则会修改符号XML表达式的语法,如以下示例所示。
这是一个带有一些嵌入式MathML标记的XHTML文档。这个xmlns:m(毫米)中的属性数学元素将MathML命名空间绑定到命名空间前缀米。然后,所有MathML元素名称都会附加此名称空间前缀。
<html xmlns='http://www.w3.org/1999/xhtml'><head><title>测试</title><body><p>这是一些数学</p>(第页)<p><m:math-xmlns:m='http://www.w3.org/1998/Math/MathML'><m:mi>x</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math></p></body></html>
下面是相应的符号XML表达式。
这里有两个需要注意的特性。
- 的第一个属性XML元素顶级数学元素的结构是{"http://www.w3.org/2000/xmlns/",“m”}->"http://www.w3.org/1998/Math/MathML"。这将MathML命名空间与前缀相关联米.
- 这个XML元素每个MathML元素的表达式的格式为XML元素[{uri(用户界面),要素},{},{数据}],其中uri(用户界面)标识MathML命名空间。这相当于编写附加了名称空间前缀的元素名。
表示其他对象
XML对象表达式用作XML文档中除元素以外的其他部分的容器,例如注释、处理指令和声明。它们还用作整个文档本身的容器。此结构具有以下语法XML对象[对象][数据],其中对象描述所表示对象的类型,以及数据指定对象的详细信息。有六种类型的对象可以指定为第一个参数;每个对象类型对应于特定类型的XML构造。
宣言
XML对象[“声明”]表示通常出现在XML文档开头的XML声明。它的语法如下:
XML对象[“声明”][“版本”->“1.0”, 选项->价值].
允许有两个选项。
- “独立”—采用值“是”如果文档引用外部DTD并且“否”否则。
- “编码”—指定文档中使用的字符编码。并非所有编码都会在出口时得到遵守。如果指定了Wolfram语言无法导出的编码,则会生成错误消息,并在文档中更改编码。
下面是一个典型的XML声明。
<?xml version=“1.0”encoding=“ascii”standalone=“yes”?>
下面是相应的符号XML表达式。
注释
XML对象[“评论”]表示XML注释。它的语法如下:
XML对象[“评论”][一串].
下面是一个XML注释的示例。
<!-- 创建于2002年3月6日。-->
下面是相应的符号XML表达式。
XML对象[“评论”][“创建于3/6/02。”]
文件
最重要的XML对象是XML对象[“文档”]。它用作整个文档的容器,语法如下:
XML对象[“文档”][{序言},文件 树,{尾声}].
序言可能包含XML对象[“声明”],后面是可选的处理指令和DTD声明。结束语包含处理说明或注释。
下面是一个简单文档的示例,该文档由XML声明、注释和单个元素组成。
<?xml版本=“1.0”?><!--这是一个示例文件--><根/>
下面是相应的符号XML表达式。
XML对象[“文档”][{
XML对象[“声明”][“版本”"1.0"],
XMLObject[“Comment”][“这是一个示例文件”]},
XML元素[“root”,{},{}],{}'
唯一的选项XML对象[“文档”]是“有效”。此选项由解析器自动设置。如果在导入时对文档进行了验证,并且验证成功,则“有效”->正确将包含在XML对象表达式。如果尝试验证但失败,则“有效”->错误将包括在内。如果未尝试验证,则选项“有效”省略。
文件类型
这个XML对象[“文档类型”]表达式表示XML文档类型声明。它的语法如下:
XML对象[“文档类型”][名称,选项->价值].
允许有三个选项。
- “系统”—指定本地文件系统中的DTD,作为相对路径名或URI
<!DOCTYPE catalog PUBLIC“//FOO//DTD catalog 1.1//EN”“www.FOO.com/example/controlog.DTD”[
内部DTD材料
]>
下面是相应的符号XML表达式。
XML对象[“文档类型”][“目录”,“公共”->“-//FOO//DTD目录1.1//EN”,“系统”->“www.foo.com/example/catalog.dtd”,“内部子集”->“内部DTD材料"]
有关XML Doctype声明的更多详细信息,请参阅W3C XML规范.
处理命令
XML对象[“处理指令”]表示XML处理指令。其语法如下:
XML对象[“处理指令”][目标 一串, 可选择的 数据 一串]].
在处理指令时通常使用类似属性的语法。这些伪属性不会被解析,而是作为原始字符串返回。这是一条指定样式表的处理指令。
<?xml样式表href=“mystyle.css”type=“text/css”?>
下面是相应的符号XML表达式。属性值周围的双引号被转义,以将它们与参数周围的双括号作为一个整体区分开来。
XML对象[“处理指令”][“xml-stylesheet”,“href=\”mystyle.css\“type=\”text/css\“”]
CDATA部分
XML对象[“CDATA部分”]表示CDATA部分。CDATA是“字符数据”的W3C缩写。CDATA节在XML文档中用作原始字符数据的包装,以避免转义特殊字符,例如"和<.(这些字符通常必须表示为&报价;和&它;.)CDATA节在XML中用于包含需要大量转义的字符数据,例如程序或数学表达式。
下面是包含CDATA部分的XML文档中的一个简单片段。
<![数据[5<7<2*10 ^ 123]]>
下面是相应的符号XML表达式。
XML对象[“CDATA部分”][" 5 < 7 << 2*10^123"]
默认情况下,CDATA部分导入时不保留对象包装;只保留CDATA部分的内容。为了保护CDATA部分包装器,必须显式设置选项“保留数据节”->真的.