XSLT WFS输出格式模块¶
这个 xslt
Geoserver的模块是一个WFS输出格式生成器,它将基本输出(如GML)和XSLT 1.0样式表结合在一起,以生成用户选择的新文本输出格式。
此输出格式的配置可以直接在磁盘上执行,也可以通过REST API执行。
手动配置¶
输出的所有配置都驻留在 $GEOSERVER_DATA_DIR/wfs/transform
文件夹,如果已在Geoserver中安装了XSLT输出格式,则在启动时将创建该文件夹。
每个XSLT转换都必须在 $GEOSERVER_DATA_DIR/wfs/transform
文件夹,该文件夹又指向用于转换的XSLT文件。虽然名称可以是自由形式的,但建议遵循简单的命名约定:
用于XML配置文件的.xml
用于XSLT磁贴的<myTransform>.xslt
转换可以是全局的,因此可以适用于任何特征类型,也可以是特定类型的,在这种情况下,转换知道已转换的特征类型的特定属性。
全球转型示例¶
下面是一个全局转换设置的示例。这个 $GEOSERVER_DATA_DIR/wfs/transform/global.xml
文件将如下所示:
<transform>
<sourceFormat>text/xml; subtype=gml/2.1.2</sourceFormat>
<outputFormat>HTML</outputFormat>
<outputMimeType>text/html</outputMimeType>
<fileExtension>html</fileExtension>
<xslt>global.xslt</xslt>
</transform>
以下是对每个元素的解释:
sourceFormat
(必需):用作XSLT转换源的输出格式outputFormat
(必选):转换生成的输出格式outputMimeType
(可选):生成的输出的MIME类型。如果它丢失了,outputFormat
假定为MIME类型并用于此目的。fileExtension
(可选):生成的输出的文件扩展名。以防它不见了txt
将会被使用。xslt
(必需):用于转换的XSLT 1.0样式表的名称
关联的XSLT文件将是 $GEOSERVER_DATA_DIR/wfs/transform/global.xslt
文件夹,它将能够将任何GML2输入转换为相应的HTML文件。下面是一个例子:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:wfs="http://www.opengis.net/wfs"
xmlns:tiger="http://www.census.gov" xmlns:gml="http://www.opengis.net/gml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="wfs:FeatureCollection/gml:featureMember/*">
<h2><xsl:value-of select="@fid"/></h2>
<table border="1">
<tr>
<th>Attribute</th>
<th>Value</th>
</tr>
<!-- [not(*)] strips away all nodes having
children, in particular, geometries -->
<xsl:for-each select="./*[not(*)]">
<tr>
<td>
<xsl:value-of select="name()" />
</td>
<td>
<xsl:value-of select="." />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
类型特定的转换¶
特定于类型的转换可以引用特定类型并直接利用其属性。虽然不是必需的,但最好是设置一个可以处理任何特征类型的全局转换(因为输出格式在功能文档中声明为通用的,而不是特定于类型的),然后为特定的特征类型覆盖它,以便为它们创建特殊的转换。
以下是特定于类型的转换声明的示例,它将位于 $GEOSERVER_DATA_DIR/wfs/transform/html_bridges.xml
<transform>
<sourceFormat>text/xml; subtype=gml/2.1.2</sourceFormat>
<outputFormat>HTML</outputFormat>
<outputMimeType>text/html</outputMimeType>
<fileExtension>html</fileExtension>
<xslt>html_bridges.xslt</xslt>
<featureType>
<id>cite:Bridges</id>
</featureType>
</transform>
临时演员 featureType
元素将变换关联到特定的要素类型
关联的XSLT文件将位于 $GEOSERVER_DATA_DIR/wfs/transform/html_bridges.xslt
并且将利用关于输入属性的知识:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:wfs="http://www.opengis.net/wfs"
xmlns:cite="http://www.opengis.net/cite" xmlns:gml="http://www.opengis.net/gml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Bridges</h2>
<xsl:for-each
select="wfs:FeatureCollection/gml:featureMember/cite:Bridges">
<ul>
<li>ID: <xsl:value-of select="@fid" /></li>
<li>FID: <xsl:value-of select="cite:FID" /></li>
<li>Name: <xsl:value-of select="cite:NAME" /></li>
</ul>
<p/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
备注
在编写XSLT时,请始终记住在 stylesheet
元素,否则可能会遇到难以理解的错误消息。
特定要素类型可以与多个输出格式相关联。虽然不常见,但通过创建多个XML配置文件并在每个配置文件中关联不同的要素类型,也可以将同一XSLT文件关联到多个要素类型。
REST配置¶
可以通过REST API创建、更新和删除转换(通常,这需要管理员权限)。每个转换都用磁盘上使用的相同的XML格式表示,但有两种变体:
一种新的
name
属性,该属性与XML文件名匹配这个
featureType
元素还包含指向REST配置树中表示要素类型的资源的链接
例如:
<transform>
<name>test</name>
<sourceFormat>text/xml; subtype=gml/2.1.2</sourceFormat>
<outputFormat>text/html</outputFormat>
<fileExtension>html</fileExtension>
<xslt>test-tx.xslt</xslt>
<featureType>
<name>tiger:poi</name>
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="alternate" href="http://localhost:8080/geoserver/rest/workspaces/cite/datastores/cite/featuretypes/bridges.xml" type="application/xml"/>
</featureType>
</transform>
下面是资源列表以及可以在这些资源上使用的HTTP方法。
/rest/services/wfs/transforms[.<format>]
方法 |
行动 |
返回代码 |
格式 |
默认格式 |
参数 |
---|---|---|---|---|---|
GET |
列出所有可用的变换 |
200 |
HTML、XML、JSON |
HTML |
|
POST |
添加新的转换 |
201,带 |
XML、JSON |
名称、源格式、输出格式、输出MimeType |
|
PUT |
更新全局设置 |
200 |
XML、JSON |
||
DELETE |
405 |
这个 POST
方法可用于以两种方式创建转换:
如果使用的内容类型为
application/xml
服务器将假定<transform>
正在发布定义,并且XSLT将必须使用PUT
具有内容类型的请求application/xslt+xml
针对转型资源如果使用的内容类型为
application/xslt+xml
服务器将假定正在发布XSLT本身,并且name
,sourceFormat
,outputFormat
,outputMimeType
查询参数将用于填充转换配置
/rest/services/wfs/transforms/<transform>[.<format>]
方法 |
行动 |
返回代码 |
格式 |
默认格式 |
---|---|---|---|---|
GET |
返回转换 |
200 |
HTML、XML、XSLT |
HTML |
POST |
405 |
|||
PUT |
根据使用的MIME类型更新转换配置或其XSLT |
200 |
XML、XSLT |
|
DELETE |
删除转换 |
200 |
根据请求中使用的内容类型,PUT操作的行为有所不同:
如果使用的内容类型为
application/xml
服务器将假定<transform>
正在发送定义并将对其进行更新如果使用的内容类型为
application/xslt+xml
服务器将假定正在发布XSLT本身,因此配置不会被修改,但与其相关联的XSLT将被覆盖