2013-10-15 93 views
3

我有一個複雜的NetCDF文件目錄結構我想創建一個THREDDS目錄。用於匹配目錄的regExp

/data/buoy/A0121/realtime/A0121.met.realtime.nc 
         /A0121.waves.realtime.nc 
         etc. 
/data/buoy/A0122/realtime/A0122.met.realtime.nc 
         /A0122.sbe37.realtime.nc 
         etc. 
/data/buoy/B0122/realtime/B0122.met.realtime.nc 
         /B0122.sbe37.realtime.nc 
etc. 

但我發現,在這兩種datasetScan和匯聚/掃描元件的正則表達式屬性似乎沒有能夠處理使用正則表達式的子目錄。例如,此商品的作品。

<datasetScan name="All TEST REALTIME" ID="all_test_realtime" path="/All/Realtime" 
    location="/data/buoy/B0122" > 
    <metadata inherited="true"> 
    <serviceName>all</serviceName> 
    </metadata> 
    <filter> 
    <include regExp="realtime" atomic="false" collection="true" /> 
    <include wildcard="*.nc" /> 
    <!-- exclude directory --> 
    <exclude wildcard="old" atomic="false" collection="true" /> 
    </filter> 
</datasetScan> 

但是下面沒有。沒有找到數據集。

<datasetScan name="All TEST REALTIME" ID="all_test_realtime" path="/All/Realtime" 
    location="/data/buoy" > 
    <metadata inherited="true"> 
    <serviceName>all</serviceName> 
    </metadata> 
    <filter> 
    <include regExp="B0122/realtime" atomic="false" collection="true" /> 
    <include wildcard="*.nc" /> 
    <!-- exclude directory --> 
    <exclude wildcard="old" atomic="false" collection="true" /> 
    </filter> 
</datasetScan> 

這是一個大大簡化例子只是做了確認,正則表達式不匹配,這是在這個ncML頁面底部暗示的子目錄。 http://www.unidata.ucar.edu/software/thredds/current/netcdf-java/ncml/v2.2/AnnotatedSchema4.html

我真正的目標是通過<掃描正則表達式= 「使用ncML聚合」 >

我應該使用FeatureCollections?這些非常簡單的時間序列浮標觀測文件。

回答

3
<filter> 
    <include regExp="[A-Z]{1}[0-9]{4}" atomic="false" collection="true" /> 
    <include wildcard="realtime" atomic="false" collection="true" /> 
    <include wildcard="post-recovery" atomic="false" collection="true" /> 
    <include wildcard="*.nc" /> 
    <!-- exclude directory --> 
    <exclude wildcard="old" atomic="false" collection="true" /> 
</filter> 
3

如果您在掃描文件的<aggregation>並且要包含子目錄,您可以添加subdirs="true"<scan>元素中,例如:

<?xml version="1.0" encoding="UTF-8"?> 
<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2"> 
    <aggregation dimName="ocean_time" type="joinExisting"> 
     <scan location="." regExp=".*vs_his_[0-9]{4}\.nc$" subdirs="true"/>   
    </aggregation> 
</netcdf> 

對於datasetScan數據集,正則表達式過濾器會自動應用到所有子目錄,所以如果你想這些過濾器適用於所有子目錄,你可以只是做:

<datasetScan name="All TEST REALTIME" ID="all_test_realtime" path="/All/Realtime" 
    location="/data/buoy" > 
    <metadata inherited="true"> 
    <serviceName>all</serviceName> 
    </metadata> 
    <filter> 
    <include regExp="realtime" atomic="false" collection="true" /> 
    <include wildcard="*.nc" /> 
    <!-- exclude directory --> 
    <exclude wildcard="old" atomic="false" collection="true" /> 
    </filter> 
</datasetScan> 
+0

我意識到subdirs被搜索。我的問題真的是爲什麼regExp =「realtime」有效,regExp =「B0122/realtime」沒有。我發現在數據集掃描和掃描regExp屬性中都是這種情況。我一直希望利用現有的目錄結構來限制搜索到的子目錄的數量。幸運的是在我的情況下,文件名包含了找到我所需要的所有信息。 –

+0

您是否嘗試過'regExp =「。* B0112/realtime」'?如果這有效,那就表明'regExp'正在處理全路徑名。但是,似乎更有可能'regExp'正在處理本地目錄或文件名,因此它從不會找到匹配'B0122/realtime' –

+0

我嘗試過regExp =「。* B0122/realtime」,但沒有運氣。我已經通過列表向Unidata開發者提出了這個問題,我認爲你是正確的。這是有道理的編程。走路徑並檢查找到的文件名與regExp。使用兩個過濾器/包含我確實取得了成功。見下面的例子。 –