【问题标题】:Can you reuse fragments of XML (in some kind of variables/references way)?你能重用 XML 的片段(以某种变量/引用的方式)吗?
【发布时间】:2009-01-13 14:31:38
【问题描述】:

我正在使用SLD 来设置我的地理服务器的输出样式。我有几种类型的对象要显示。每种类型都有不同的图标,但文本描述是从相同的信息(数据库中的文本字段)生成的。我不能使用 object_type 作为图像名称,因为您不能在图像名称中使用变量(或者我不知道该怎么做......)。所以我有 SLD 之类的(没有不重要的部分):

<StyledLayerDescriptor>
  <NamedLayer>
    <UserStyle>
      <FeatureTypeStyle>
        <Rule>
          <Filter>
            <PropertyIsEqualTo>
              <PropertyName>object_type</PropertyName>
              <Literal>1</Literal>
            </PropertyIsEqualTo>
          </Filter>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/1.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>16</Size>
              <Opacity>1</Opacity>
            </Graphic>
          </PointSymbolizer>
          <TextSymbolizer>
            <Label>
              <ogc:PropertyName>name</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">Times New Roman</CssParameter>
              <CssParameter name="font-style">Normal</CssParameter>
              <CssParameter name="font-size">12</CssParameter>
            </Font>
            <Fill>
              <CssParameter name="fill">#110011</CssParameter>
              <CssParameter name="fill-opacity">1</CssParameter>
            </Fill>
            <Halo />
          </TextSymbolizer>
        </Rule>

        <Rule>
          <Filter>
            <PropertyIsEqualTo>
              <PropertyName>object_type</PropertyName>
              <Literal>2</Literal>
            </PropertyIsEqualTo>
          </Filter>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/2.png" />
                <Format>image/png</Format>
              </ExternalGraphic>
              <Size>16</Size>
              <Opacity>1</Opacity>
            </Graphic>
          </PointSymbolizer>
          <TextSymbolizer>
            <Label>
              <ogc:PropertyName>name</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">Times New Roman</CssParameter>
              <CssParameter name="font-style">Normal</CssParameter>
              <CssParameter name="font-size">12</CssParameter>
            </Font>
            <Fill>
              <CssParameter name="fill">#110011</CssParameter>
              <CssParameter name="fill-opacity">1</CssParameter>
            </Fill>
            <Halo />
          </TextSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

我想做的事情是编写一次 TextSymbolizer 并在两个或更多地方使用它……我还没有听说过 XML 中的类似内容,但也许你听说过? :-)

我想到的一个解决方案是编写一些非常简单的生成器 (xml.erb?:P) 并让它生成 XML...

【问题讨论】:

    标签: xml reusability sld


    【解决方案1】:

    GeoServer 对 SLD 的“动态符号器”扩展确实允许您将数据库属性用作图标 URL 的全部或部分。如果需要,您甚至可以执行计算和调用过滤器函数(它们在 URL 中使用嵌入式 CQL。

    这是关于该功能的博客文章:http://blog.geoserver.org/2008/12/08/dynamic-symbolizers-part-1/

    【讨论】:

      【解决方案2】:

      您是否尝试过为您的 XML 定义 XML Schema 或可选的 XML DTD,然后使用 element identifiers http://www.w3.org/TR/xmlschema-0/#schemaConstraintsVsXML1,类似于:

      
      
      <StyledLayerDescriptor>
        <NamedLayer>
          <CommonStyles>
            <TextSymbolizer id="name_times_normal_12">
              <Label>
                <ogc:PropertyName>name</ogc:PropertyName>
              </Label>
              <Font>
                <CssParameter name="font-family">Times New Roman</CssParameter>
                <CssParameter name="font-style">Normal</CssParameter>
                <CssParameter name="font-size">12</CssParameter>
              </Font>
              <Fill>
                <CssParameter name="fill">#110011</CssParameter>
                <CssParameter name="fill-opacity">1</CssParameter>
              </Fill>
              <Halo />
            </TextSymbolizer>
          </CommonStyles>
          <UserStyle>
            <FeatureTypeStyle>
              <Rule>
                <Filter>
                  <PropertyIsEqualTo>
                    <PropertyName>object_type</PropertyName>
                    <Literal>1</Literal>
                  </PropertyIsEqualTo>
                </Filter>
                <PointSymbolizer>
                  <Graphic>
                    <ExternalGraphic>
                      <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/1.png" />
                      <Format>image/png</Format>
                    </ExternalGraphic>
                    <Size>16</Size>
                    <Opacity>1</Opacity>
                  </Graphic>
                </PointSymbolizer>
                <TextSymbolizer ref="#name_times_normal_12" />
              </Rule>
              <Rule>
                <Filter>
                  <PropertyIsEqualTo>
                    <PropertyName>object_type</PropertyName>
                    <Literal>2</Literal>
                  </PropertyIsEqualTo>
                </Filter>
                <PointSymbolizer>
                  <Graphic>
                    <ExternalGraphic>
                      <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="/images/2.png" />
                      <Format>image/png</Format>
                    </ExternalGraphic>
                    <Size>16</Size>
                    <Opacity>1</Opacity>
                  </Graphic>
                </PointSymbolizer>
                <TextSymbolizer ref="#name_times_normal_12" />
              </Rule>
            </FeatureTypeStyle>
          </UserStyle>
        </NamedLayer>
      </StyledLayerDescriptor>
      
      

      【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多