使用依赖变量创建特定的 XSL

问题描述 投票:0回答:1

我正在尝试构建一个 XSL(t) 文件来为我的应用程序指定导入规则集。我的源 XML 来自 SPARQL。

问题是每个查询的变量数量都不同。我需要的是一个 XSL,它采用 xml 头部描述的变量并将它们用作列标题。然后它必须使用相应标题的绑定中的数据填充行。

这是我的源 XML 的一部分:

<?xml version='1.0' encoding='UTF-8'?>
<sparql xmlns='http://www.w3.org/2005/sparql-results#'>
    <head>
        <variable name='naam'/>
        <variable name='description'/>
        <variable name='uri'/>
    </head>
    <results>
        <result>
            <binding name='naam'>
                <literal>Zweepmast, thermisch verzinken</literal>
            </binding>
            <binding name='description'>
                <literal>Een zweepmast (uithoudercombinatie) dient thermisch te worden verzinkt volgens NEN-EN-ISO 1461 en vervolgens voorzien van een 2-laags natlak-of poedercoating, dit ter keuze van de fabrikant.</literal>
            </binding>
            <binding name='uri'>
                <uri>http://data.provincie-zuidholland.nl/id/62ac71da-b59e-ec11-b683-001dd8d70289</uri>
            </binding>
        </result>
        <result>
            <binding name='naam'>
                <literal>Verkeerskundige draagconstructie, afmetingen van grondstuk</literal>
            </binding>
            <binding name='description'>
                <literal>Een staander van een portaal of een gecombineerde lichtmast dient te worden voorzien van een grondstuk met een lengte van 2.000 mm. Het grondstuk is voorzien van minimaal twee grondvleugels met een minimaal formaat van 640 x 180 x 6 mm per grondvleugel. Het gebruik van demontabele grondvleugels of betonplaten is niet toegestaan.</literal>
            </binding>
            <binding name='uri'>
                <uri>http://data.provincie-zuidholland.nl/id/099f3e6f-b99e-ec11-b683-001dd8d70289</uri>
            </binding>
        </result>
    </results>
</sparql>
 

这是我需要遵循的 XSL 基本规则集:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/results">
        <Import>
            <!-- This part is used to import all details for specifications that have a verification plan-->
            <xsl:for-each select="result/binding">
                <Row>
                                        
                    <!-- Name-->              
                    <xsl:attribute name="naam"><xsl:value-of select="current-group()[1]/literal/text()"/></xsl:attribute>
                    
                    <!-- Description -->
                    <xsl:attribute name="description"><xsl:value-of select="current-group()[1]/literal/text()"/></xsl:attribute>
                    
                    <!-- uri -->
                    <xsl:attribute name="uri"><xsl:value-of select="current-group()[1]/uri/text()" /></xsl:attribute>
                    
                </Row>
            </xsl:for-each>
        </Import>
    </xsl:template>
</xsl:stylesheet>

所以这种情况下的变量是“naam”、“description”和“uri”。对于每个

<result>
,XSL 需要创建一行并用
<bindings>
填充“列”。不幸的是,我的应用程序无法理解 current-group() 函数。所以我被困在这里......

我尝试根据规则集设置 XSL 文件。但我不明白 XSL 如何处理变量。

xml xpath xslt
1个回答
1
投票

您可能可以忽略

variables
中的
head
,只使用其
binding
属性及其子元素的值,为
result
的每个
name
创建一个属性。

而且您似乎仅限于 XSLT 1.0,所以它看起来像这样:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://www.w3.org/2005/sparql-results#"
exclude-result-prefixes="ns0">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/ns0:sparql">
    <Import>
        <xsl:for-each select="ns0:results/ns0:result">
            <Row>
                <xsl:for-each select="ns0:binding">
                    <xsl:attribute name="{@name}">
                        <xsl:value-of select="*"/>
                    </xsl:attribute>
                </xsl:for-each>
            </Row>
        </xsl:for-each>
    </Import>
</xsl:template>

</xsl:stylesheet>

请注意,提供的示例 XML 声明了默认命名空间,并且其根元素是 not

results

© www.soinside.com 2019 - 2024. All rights reserved.