wtorek, 9 sierpnia 2011

Jak dodać własny link do wyników wyszukiwania w Geoportalu Esri

Domyślnie Esri Geoportal Server wyświetla standadowe linki na liście wyszukiwania. Geoportal sam próbuje się domyślać jaki jest cel danego linku (czy po kliknięciu ma się wyświetlić mapa z podglądem, czy okno pobierania danych) ale nie zawsze mu to wychodzi. Standardowe linki można w prosty sposób wyłączyć. W tym celu w pliku geoportal\WEB-INF\classes\gpt\search\profiles\CSW_2.0.2_OGCCORE_ESRI_GPT_GetRecords_Response.xslt należy dodać sekcję : 
...
 </Types>
 <Links>
   <Link gptLinkTag="addToMap" show="false"/>
   <Link gptLinkTag="preview" show="false"/>    
   <Link gptLinkTag="open" show="false"/>
 </Links>
</Record>

Trudniej sprawa wygląda gdy chcemy dodać własne linki. Sporo informacji na ten temat można zlaleźć na stronach wsparcia Esri. Zobacz w jaki sposób można to zrobić dla metadanych o profilu inspire.

indexables.xml
Najpierw w pliku geoportal\WEB-INF\classes\gpt\metadata\iso\inspire\inspire-apiso-indexables.xml należy dodać indeksowanie interesujących nas danych. W tym celu należy dodać elementy , które wskazują nazwę indeksowanych wartości oraz ich ścieżkę dostępu w pliku metadanych. Ścieżkę najlepiej wyszukać bezpośrednio w Geoportalu

Edytowanie wartości w pliku metadanych
Otwieranie pliku metadanych
Wyszukiwanie ścieżki dostępu do wartości









W naszym przypadku ścieżka dostępu do danych wygląda tak:
/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource/gmd:linkage/gmd:URL
Tak się składa, że takich wartości w jednym pliku metadanych może być więcej, np. inne dla wartości
<gmd:CI_OnLineFunctionCode>information</gmd:CI_OnLineFunctionCode>
<gmd:CI_OnLineFunctionCode>download</gmd:CI_OnLineFunctionCode>
itd.

Gdy zostaną ustalone elementy, które mają być zindeksowane trzeba dodać element <property> do pliku geoportal\WEB-INF\classes\gpt\metadata\iso\inspire\inspire-apiso-indexables.xml, oraz ustawić nazwę elementu i ścieżkę dostępu. W naszym przykładzie zostały dodane następujące linie:
<property meaning="apiso:distribution" xpath="/gmd:MD_Metadata/gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource">
<property meaning="distribution.information.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='information']"/>
<property meaning="distribution.search.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='search']"/>
<property meaning="distribution.order.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='order']"/>
<property meaning="distribution.download.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='download']"/>
<property meaning="distribution.offline.url" xpath="gmd:linkage/gmd:URL[../../gmd:function/gmd:CI_OnLineFunctionCode/@codeListValue='offlineAccess']"/>
</property>



Czyli zostało ustawione, że np. property o nazwie distribution.information.url wskazuje na odpowiedni zapis w pliku metadanych.

Żeby nowe wartości zostały prawidłowo zaindeksowane trzeba:

  1. Zapisać plik inspire-apiso-indexables.xml
  2. Zatrzymać serwer
  3. Usunąć pliki z folderu lucene (czytaj więcej)
  4. Uruchomić serwer
  5. Zalogować się do Geoportalu
  6. Zaaprobować wszystkie pliki metadanych w panelu administracyjnym Geoportalu - to spowoduję ponowną indeksację wszystkich wartości

property-meanings.xml
Następnie trzeba dodać elementy <property-meaning> do pliku  geoportal\WEB-INF\classes\gpt\metadata\property-meanings.xml. Trzeba poprzednio przypisane nazwy elementów przypisać do odpowiednich elementów <dc>, w naszym przykładzi został po prostu dodany przedrostek "dc:" :


  <property-meaning name="distribution.information.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.information.url"/>
  </property-meaning>

  <property-meaning name="distribution.search.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.search.url"/>
  </property-meaning>

  <property-meaning name="distribution.order.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.order.url"/>
  </property-meaning>

  <property-meaning name="distribution.download.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.download.url"/>
  </property-meaning>

  <property-meaning name="distribution.offline.url" valueType="String" comparisonType="value">
    <dc name="dc:distribution.offline.url"/>
  </property-meaning>
Trzeba również dodać  element <meaning-names> w sekcji <propertySets>:

<propertySets>
  ...
  <full>
    <dc>
    ...
    <meaning-names>resource.url,website.url,thumbnail.url,xml.url</meaning-names>
        <meaning-names>distribution.order.url,distribution.download.url,distribution.information.url,distribution.offline.url,distribution.search.url</meaning-names>
    </dc>
  </full>
</propertySets>


CSW_2.0.2_OGCCORE_ESRI_GPT_GetRecords_Response.xslt
Teraz wracamy do pliku CSW_2.0.2_OGCCORE_ESRI_GPT_GetRecords_Response.xslt i dodajemy kolejne elementy <Link>. W naszym przykładzie dodamy:

<Link label="catalog.mdCode.onLineFunctionCode.offlineAccess">
 <xsl:value-of select="dc:distribution.offline.url"/>
</Link >
<Link label="catalog.mdCode.onLineFunctionCode.download">
 <xsl:value-of select="dc:distribution.download.url"/>
</Link >
<Link label="catalog.mdCode.onLineFunctionCode.order">
 <xsl:value-of select="dc:distribution.order.url"/>
</Link >
<Link label="catalog.mdCode.onLineFunctionCode.search">
 <xsl:value-of select="dc:distribution.search.url"/>
</Link >  
<Link label="catalog.mdCode.onLineFunctionCode.information">
 <xsl:value-of select="dc:distribution.information.url"/>
</Link >

dc:distribution.offline.url to poprzednio zdefiniowana wartość w pliku property-meanings.xml. Wartość catalog.mdCode.onLineFunctionCode.offlineAccess to wyświetlana etykieta linku zdefiniowana w pliku geoportal\WEB-INF\classes\gpt\resources\gpt.properties.

Wynik tych działań wyglądać może tak: