因此,您想要构建一个 XML 验证器,它是一个状态机。它以 ans XSD 作为输入并构建状态机。然后机器在 XML 上运行并计算它是否有效。你想要运行可视化吗?
XSOM 是用于解析 XSD 的库。这是概述 API的用户指南。XSD 内容将成为您的状态机的状态。这应该类似于为正则表达式构建状态机。
我将从为简单元素创建一些状态开始,例如采用此模式(此处有更多示例):
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="shiporder" type="xs:string" />
</xs:schema>
你会创建一个start和一个end状态。然后为元素创建一个状态shiporder。您从该start州开始。当您遇到<shiporder>标签时,会有一个从start到shiporder状态的转换。当您在该shiporder州遇到字符串内容时,您将留在该shiporder州。当您遇到结束标签时</shiporder>,您将进入该end州。如果您遇到没有定义转换的内容,则验证失败。
其他元素当然需要更复杂的逻辑。例如,一个<xs:sequence>将转换到多个元素。
然后您将使用 SAX 来读取 XML。发出的事件是触发转换的状态机的输入事件。
最后,您将拥有一个或几个接受状态。当机器在其中之一停止时,XML 是有效的。
对于状态机,您可能可以使用这个问题中的一个。也许你找到了一些东西来可视化这些,或者你使用像DFA Simulator这样的东西。