我正在尝试使用 XSLT 在 XSD 中查找递归。谁能建议任何技术?
例
<xs:element name="nodes">
<xs:complexType>
<xs:sequence>
<xs:element ref="node" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="node">
<xs:complexType>
<xs:sequence>
<xs:element ref="node" maxOccurs="unbounded"/>
<xs:element name="text" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
这里的"节点"在XSD中递归使用。我正在尝试编写一个 XSLT 来查找 XSD 中的递归元素。
以下 XPath 将查找所有也具有 ref 属性元素的元素
//xs:element[@name=//xs:element/@ref]/@name
下一个 XPath 将查找具有包含具有 ref 属性的相同元素的子元素的元素:
//xs:element[@name=descendant-or-self::xs:element/@ref]/@name
如果您想找到实现递归的所有可能方法,例如通过任意数量的中介进行递归,并通过导入的模式文档中的命名模型组进行递归,那就很难了。它相当于在 XSLT 中编写 XML 架构文档处理器(即将架构的 XML 表示形式转换为内部架构组件表示形式)。
您可能最好让其他人为您构建架构组件模型,并对其进行处理。Saxon提供了模式组件模型(SCM)的XML表示,Xalan为其提供了Java API。