Java XSD Walker-以一系列XML标记的开始和结束作为输入遍历XSD
基本上,我想要的是创建XSD的状态转换图表示。它不是一个简单的状态图;它应该反映合成器(全部、选择、顺序)、最小和最大出现次数以及派生(限制、扩展)。XSD遍历器必须能够做的是在每次向XSD提供XML标记时更新其在XSD状态图表示中的位置。它应该在标记关闭时回滚其位置。它应该能够确定向其提供XML标记是否会使XML无效,即遍历器无法找到给定XML标记的路径 我一直在使用XSOM及其functor visitor体系结构,但我无法使用XSOM实现合成器、事件和派生 你们中有人知道有哪个图书馆已经在做这个了吗 或者关于如何构建这样的状态转换图有什么想法Java XSD Walker-以一系列XML标记的开始和结束作为输入遍历XSD,java,xml,xsd,xerces,xsom,Java,Xml,Xsd,Xerces,Xsom,基本上,我想要的是创建XSD的状态转换图表示。它不是一个简单的状态图;它应该反映合成器(全部、选择、顺序)、最小和最大出现次数以及派生(限制、扩展)。XSD遍历器必须能够做的是在每次向XSD提供XML标记时更新其在XSD状态图表示中的位置。它应该在标记关闭时回滚其位置。它应该能够确定向其提供XML标记是否会使XML无效,即遍历器无法找到给定XML标记的路径 我一直在使用XSOM及其functor visitor体系结构,但我无法使用XSOM实现合成器、事件和派生 你们中有人知道有哪个图书馆已经在
或者更好的是,你们提供指向XML验证器代码的链接?这基本上就是XML验证器在根据XSD验证XML时所做的,对吗?因此您需要构建一个XML验证器,它是一个状态机。它将ans XSD作为输入并构建一个状态机。然后机器运行XML并判断它是否有效。你想让跑步过程可视化吗 XSOM是用于解析XSD的库。下面是一个概述API的示例。XSD内容将成为状态机的状态。这应该类似于为正则表达式构建状态机 我首先为简单元素创建一些状态,例如,以这个模式()为例:
您将创建一个开始
和一个结束
状态。然后为元素创建状态shiporder
。在start
状态下启动。当您遇到
标记时,会从开始
状态转换为发货订单
状态。当您在shiporder
状态中遇到字符串内容时,您将保持在shiporder
状态。当您遇到结束标记
时,您将进入结束
状态。如果遇到未定义转换的情况,验证将失败
当然,其他要素需要更复杂的逻辑。例如,
将具有到多个元素的转换
然后使用SAX读取XML。发出的事件是触发转换的状态机的输入事件
最后你会有一个或几个接受状态。当机器停在其中一个位置时,XML是有效的
对于状态机,您可能可以从中使用一个。也许你能找到一些可视化的东西,或者你可以使用一些类似于
或者更好的是,你们提供指向XML验证器代码的链接?
这基本上就是XML验证器在验证XML时所做的
反对XSD,对吗
看一看。既然您已经为您的问题添加了Java标签,那么请特别关注一个完全兼容的验证XML解析器
可以让Xerces为给定的XML模式构建一个。看看这本书
Xerces代码编写得很好,其XML和XSD(包括合成器、引用和派生)的实现坚如磐石。这将是一个很好的基础,也是一个很好的实现方案,因为你想要建立的状态转移图。如果我只考虑给定元素可能的子元素,那么创建状态图非常简单。但是,我很难为序列、选择、最小-最大出现次数、扩展/重定大小创建状态转换逻辑。我在寻求一种方法来实现这些状态转换逻辑。你知道如何为正则表达式构建一个状态机吗?例如,应该有足够的资源。你的序列
ab
,选项a | b
,min-maxa{3,5}
也都存在于正则表达式中,只有在正则表达式中你有字符而不是标记,所以你应该能够使用相同的方法和原则。不过,扩展和限制可能需要特殊处理。
<?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>