首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XSLT访问XSD标记

从XSLT访问XSD标记
EN

Stack Overflow用户
提问于 2022-10-17 18:48:15
回答 1查看 51关注 0票数 1

一些语言(特别是DFDL,以及我正在考虑构建的另一种语言)在XSD模式标记上使用外部属性(即名称空间中的属性,而不是http://www.w3.org/2001/XMLSchema中的属性)来描述关于在其中声明的项的附加元数据(例如complexType、simpleType、element)。例子如下:

代码语言:javascript
复制
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                     xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/">
    <xs:element name="input">
        <xs:complexType>
            <xs:sequence dfdl:separator=":" dfdl:separatorPosition="infix">
                <xs:element name="label" type="xs:string" />
                <xs:element name="message" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema> 

(dfdl是外部属性前缀)

能够在模式感知的XSLT中访问这些元数据将非常有用,比如编写转换例程。有办法做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2022-10-17 22:57:49

在撒克逊没有简单的解决方案。编译后的模式(无论是以Java对象的形式还是SCM文件的形式)不会保留源模式文档中任何不需要用于验证的内容。

然而,可能有一个困难和冗长的解决办法。

看看saxon:type()和saxon:schema()扩展函数。将saxon: type ()应用于已验证的元素节点,您将得到复杂类型对象的类似映射的表示,而此映射的implementation属性将使您进入UserComplexType对象。这个对象上的getParticle()方法(您可以从XPath调用它作为Java自反扩展函数)返回一个表示xs:sequence元素的Particle对象。Particle实现了Location,它通过getSystemId()getLineNumber()给出了粒子在原始XSD中的源位置。使用doc()检索XSD模块,并搜索具有正确行号的粒子,然后检索其属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74101838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档