Hello,
For what I know about App-Schema the only way to achieve your target output
might be to give a try to the *jdbcMultipleValue *directive in case the
underlying store you are using is a JDBC one. In that case the
streetAddress type could be defined as something like this in the xsd,

<element minOccurs="0" name="streetAddress" type="AddressType"
maxOccurs="unbounded"/>
<complexType name="StreetAddressType">
    <simpleContent>
      <extension base="string"/>
      </extension>
    </simpleContent>
  </complexType>

and in the mappings you would have to replace the currently defined
attribute mapping with:

<AttributeMapping>
  <targetAttribute>streetAddress</targetAttribute>
     <jdbcMultipleValue>
       <sourceColumn>*joining column*</sourceColumn>
       <targetTable>*tableName*</targetTable>
       <targetColumn>*joined column from the target table*</targetColumn>
       <targetValue>*columnName*</targetValue>
     </jdbcMultipleValue>
</AttributeMapping>

Documentation about this functionality is available here
<https://docs.geoserver.org/latest/en/user/data/app-schema/mapping-file.html#sql-based-data-stores>
.

Best regards,
Marco Volpini

Il giorno mar 11 mag 2021 alle ore 12:30 abc def <gest...@mail.com> ha
scritto:

> Hi,
>
> is it possible to define mapping file for app-schema so that the result is
> "flat" xml?
>
> like:
> <store gml:id = 1>
>     <storeName>ABC</storeName>
>     <streetAddress>First address of store</streetAddress>
>     <location>First location of store</location>
>     <streetAddress>Second address of store</streetAddress>
>     <location>Second location of store</location>
>     ...
> </store>
>
> Let say that I have two tables:
>
> Store: StoreId - StoreName
> Address: StoreId - StreetAddress - Location
>
> and i define schemas:
>
> <xsd:element name="store" type="StoreType"
> substitutionGroup="gml:AbstractFeature" />
> <xsd:complexType name="StoreType">
> <xsd:complexContent>
> <xsd:extension base="gml:AbstractFeatureType">
> <xsd:sequence>
>     <xsd:element name="storeName" type="xsd:string"/>
>     <xsd:element name="streetAddress" type="xsd:string"/>
>     <xsd:element name="location" type="gml:GeometryPropertyType"/>
>
>
> <xsd:element name="address" type="AddressType" />
> <xsd:complexType name="AddressType">
> <xsd:complexContent>
> <xsd:extension base="gml:AbstractFeatureType">
> <xsd:sequence>
>     <xsd:element name="streetAddress" type="xsd:string"/>
>     <xsd:element name="location" type="gml:GeometryPropertyType"/>
>
>
> Mapping file for address:
>
> <FeatureTypeMapping>
> <sourceDataStore>datastore</sourceDataStore>
> <sourceType>mv_dataStore_Address</sourceType>
> <targetElement>address</targetElement>
> <attributeMappings>
>
>     <AttributeMapping>
>         <targetAttribute>streetAddress</targetAttribute>
>         <sourceExpression>
>             <OCQL>StreetAddress</OCQL>
>         </sourceExpression>
>         <encodeIfEmpty>true</encodeIfEmpty>
>     </AttributeMapping>
>
>     <AttributeMapping>
>         <targetAttribute>location</targetAttribute>
>         <sourceExpression>
>             <OCQL>Location</OCQL>
>         </sourceExpression>
>          <encodeIfEmpty>true</encodeIfEmpty>
>     </AttributeMapping>
>
>     <!-- FEATURE_LINK mapping -->
>     <AttributeMapping>
>         <targetAttribute>FEATURE_LINK</targetAttribute>
>         <sourceExpression>
>             <OCQL>StoreId</OCQL>
>         </sourceExpression>
>     </AttributeMapping>
>
>
> But i have no idea how to define mapping file for store:
>
> <FeatureTypeMapping>
> <sourceDataStore>datastore</sourceDataStore>
> <sourceType>mv_dataStore_Store</sourceType>
> <targetElement>store</targetElement>
> <isDenormalised>false</isDenormalised>
> <attributeMappings>
>     <!-- id -->
>     <AttributeMapping>
>         <targetAttribute>ptv:store</targetAttribute>
>         <idExpression><OCQL>StoreId</OCQL></idExpression>
>     </AttributeMapping>
>
>     <AttributeMapping>
>     <targetAttribute>storeName</targetAttribute>
>     <sourceExpression>
>         <OCQL>StoreName</OCQL>
>     </sourceExpression>
>     <encodeIfEmpty>true</encodeIfEmpty>
>     </AttributeMapping>
>
> *    -------> but how to map this? is it either possible to do it in this
> way?*
>
>     <AttributeMapping>
>     <targetAttribute>streetAddress</targetAttribute>
>     <sourceExpression>
>         <OCQL>StoreId</OCQL>
>         <linkElement>address/streetAddress</linkElement>
>         <linkField>FEATURE_LINK</linkField>
>     </sourceExpression>
>     <encodeIfEmpty>true</encodeIfEmpty>
>     <isMultiple>true</isMultiple>
>     </AttributeMapping>
>
>
> Thanks a lot for any advice,
> Tom
> _______________________________________________
> Geoserver-users mailing list
>
> Please make sure you read the following two resources before posting to
> this list:
> - Earning your support instead of buying it, but Ian Turton:
> http://www.ianturton.com/talks/foss4g.html#/
> - The GeoServer user list posting guidelines:
> http://geoserver.org/comm/userlist-guidelines.html
>
> If you want to request a feature or an improvement, also see this:
> https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer
>
>
> Geoserver-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/geoserver-users
>
_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this 
list:
- Earning your support instead of buying it, but Ian Turton: 
http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: 
http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: 
https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to