瀏覽代碼

Merge pull request #37 from probs-lab/rcl-rdfox-modules-6.3

Rcl rdfox modules 6.3
Rick Lupton 7 月之前
父節點
當前提交
9aa7a6ac9f

+ 1 - 1
data/PRD_2016_20200617_185122_defs.dlog

@@ -1,4 +1,4 @@
-[ufu:CurrentImport, :belongsToList, ufpc:Prodcom2016List] .
+[ufu:CurrentImport, :partOfList, ufpc:Prodcom2016List] .
 [ufu:CurrentImport, :useDataPrefix, ?prefix]:-
  BIND(CONCAT(STR(ufpc:), "2016/") AS ?prefix) .
 

+ 1 - 1
data/PRD_2017_20200617_185035_defs.dlog

@@ -1,4 +1,4 @@
-[ufu:CurrentImport, :belongsToList, ufpc:Prodcom2017List] .
+[ufu:CurrentImport, :partOfList, ufpc:Prodcom2017List] .
 [ufu:CurrentImport, :useDataPrefix, ?prefix]:-
  BIND(CONCAT(STR(ufpc:), "2017/") AS ?prefix) .
 

+ 1 - 1
data/PRODCOM2016DATA_defs.dlog

@@ -1,4 +1,4 @@
-[ufu:CurrentImport, :hasTimePeriod, :TimePeriod_YearOf2016] .
+[ufu:CurrentImport, :hasTime, :TimePeriod_YearOf2016] .
 [ufu:CurrentImport, :partOfDataset, ufpc:PRODCOM2016DATA] .
 [ufu:CurrentImport, :useDataPrefix, ?prefix]:-
  BIND(CONCAT(STR(ufpcd:), "2016/") AS ?prefix) .

+ 2 - 2
data/PRODCOM2017DATA_defs.dlog

@@ -1,6 +1,6 @@
-[ufu:CurrentImport, :hasTimePeriod, :TimePeriod_YearOf2017] .
+[ufu:CurrentImport, :hasTime, :TimePeriod_YearOf2017] .
 [ufu:CurrentImport, :partOfDataset, ufpc:PRODCOM2017DATA] .
 [ufu:CurrentImport, :useDataPrefix, ?prefix]:-
  BIND(CONCAT(STR(ufpcd:), "2017/") AS ?prefix) .
 [ufu:CurrentImport, :useObjectPrefix, ?prefix]:-
- BIND(CONCAT(STR(ufpc:), "2017/") AS ?prefix) .
+ BIND(CONCAT(STR(ufpc:), "2017/") AS ?prefix) .

+ 1 - 1
data/PRODCOM2018DATA_defs.dlog

@@ -1,4 +1,4 @@
-[ufu:CurrentImport, :hasTimePeriod, :TimePeriod_YearOf2018] .
+[ufu:CurrentImport, :hasTime, :TimePeriod_YearOf2018] .
 [ufu:CurrentImport, :partOfDataset, ufpc:PRODCOM2018DATA] .
 [ufu:CurrentImport, :useDataPrefix, ?prefix]:-
  BIND(CONCAT(STR(ufpcd:), "2018/") AS ?prefix) .

+ 12 - 6
environment.yml

@@ -1,12 +1,18 @@
-name: prodcom-data-new
+name: prodcom-data
 channels: [conda-forge, nodefaults]
 dependencies:
-  - python=3.8
-  - pip=22.*
+  - python=3.10.*
+  - pip=23.*
   - doit=0.*
-  - rdflib=5.*
+  - rdflib=6.*
   - pytest=7.*
   - pandas=1.*
   - pip:
-       - https://github.com/ukfires/probs-runner/archive/19c20501d928a3b504fab3775e0e340fa337abbc.zip
-      # - probs-ontology=2.*
+      # These github links can be replaced with plain names/versions once the
+      # modules are published
+      - git+https://github.com/probs-lab/probs-module-data-conversion.git@4d315d8ca3ececac90bb0687e76b65bce7ab83ac#egg=probs-module-data-conversion
+      - probs-module-endpoint==2.0.0a2
+      - probs-module-ontology==2.0.0a1
+      - https://github.com/ukfires/probs-runner/archive/2eac94d061b5501b805b850d1d24d8a6db627318.zip
+      # This version of RDFox will be installed into the Conda environment
+      - rdfox==6.3.1

+ 2 - 2
scripts/doit_utils.py

@@ -28,10 +28,10 @@ def log_to_file(output_file):
     return decorator_log_to_file
 
 
-def setup_logging_to_console():
+def setup_logging_to_console(level=logging.WARNING):
     """Log WARNING messages from all loggers to stderr."""
     console = logging.StreamHandler()
-    console.setLevel(logging.WARNING)
+    console.setLevel(level)
     formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
     console.setFormatter(formatter)
     logging.getLogger('').addHandler(console)

+ 1 - 1
scripts/load_data_geonames.rdfox

@@ -12,7 +12,7 @@ dsource register "GEONAMES"                      \
     header  true                               \
     quote   '"'
 
-tupletable create ufrd:GEONAMES     \
+tupletable create GEONAMES     \
     dataSourceName  "GEONAMES"      \
     "columns"       2               \
     "1"             "{DECL}"     \

+ 1 - 1
scripts/load_data_prodcom.rdfox

@@ -12,7 +12,7 @@ dsource register "PRODCOM_DATA"                              \
     header  true                                                \
     quote   '"'
 
-tupletable create ufrd:PRODCOM_DATA                          \
+tupletable create PRODCOM_DATA                          \
     dataSourceName  "PRODCOM_DATA"                           \
     "columns"       4                                           \
     "1"             "{ID}"                                      \

+ 2 - 2
scripts/load_data_prodcom_bulk.rdfox

@@ -13,7 +13,7 @@ dsource register "PRODCOM_DATA_NEW"                             \
     header  true                                                \
     quote   '"'
 
-tupletable create ufrd:PRODCOM_DATA_NEW                         \
+tupletable create PRODCOM_DATA_NEW                              \
     dataSourceName  "PRODCOM_DATA_NEW"                          \
     "columns"       6                                           \
     "1"             "{decl}"                                    \
@@ -25,6 +25,6 @@ tupletable create ufrd:PRODCOM_DATA_NEW                         \
     "4"             "{indicators}"                              \
     "4.datatype"    "string"                                    \
     "5"             "{OBS_VALUE}"                               \
-    "5.datatype"    "string"     	                            \
+    "5.datatype"    "string"     	                              \
     "6"             "{OBS_FLAG}"                                \
     "6.datatype"    "string"

+ 1 - 1
scripts/load_data_prodcom_correspondence.rdfox

@@ -11,7 +11,7 @@ dsource register "PRC_CORRESPONDENCE"                           \
     header  true                                                \
     quote   '"'
 
-tupletable create ufrd:PRC_CORRESPONDENCE                       \
+tupletable create PRC_CORRESPONDENCE                       \
     dataSourceName  "PRC_CORRESPONDENCE"                        \
     "columns"       2                                           \
     "1"             "{2}"                                       \

+ 1 - 1
scripts/load_data_prodcom_list.rdfox

@@ -11,7 +11,7 @@ dsource register "PRODCOM_LIST"                                 \
     header  true                                                \
     quote   '"'
 
-tupletable create ufrd:PRODCOM_LIST                             \
+tupletable create PRODCOM_LIST                             \
     dataSourceName  "PRODCOM_LIST"                              \
     "columns"       4                                           \
     "1"             "{Code}"                                    \

+ 1 - 1
scripts/load_data_units.rdfox

@@ -10,7 +10,7 @@ dsource register "MetricUnits"	                                \
     header  true                                                \
     quote   '"'
 
-tupletable create ufrd:MetricUnits	                        \
+tupletable create MetricUnits	                        \
     dataSourceName  "MetricUnits"	                        \
     "columns"       3                                           \
     "1"             "{Metric}"	                                \

+ 8 - 8
scripts/map_prodcom.dlog

@@ -2,26 +2,26 @@
 [?ID, :objectDirectlyDefinedBy, ?PRCCode] ,
 # TODO Generalise the region (not just the UK)
 [?ID, :hasRegion, gnd:2635167] ,
-[?ID, :hasTimePeriod, ?TimePeriod] ,
+[?ID, :hasTime, ?TimePeriod] ,
 [?ID, :hasRole, :SoldProduction] ,
 [?ID, :partOfDataset, ?Dataset] ,
-[?ID, :bound, :ExactBound] ,
-ufu:NG(?ID, ufu:unit, ?UnitID)
-        :- ufrd:PRODCOM_DATA(?IDstring, ?PRCCODEstring, ?PRODQNT, ?QNTUNIT),
+[?ID, :hasBound, :ExactBound] ,
+[?ID, ufu:unit, ?UnitID] ufu:NG
+        :- PRODCOM_DATA(?IDstring, ?PRCCODEstring, ?PRODQNT, ?QNTUNIT),
 
-        [ufu:CurrentImport, :hasTimePeriod, ?TimePeriod],
+        [ufu:CurrentImport, :hasTime, ?TimePeriod],
         [ufu:CurrentImport, :partOfDataset, ?Dataset],
         [ufu:CurrentImport, :useDataPrefix, ?DataPrefix],  # STR(ufpcd2016:)
         [ufu:CurrentImport, :useObjectPrefix, ?ObjectPrefix],  # STR(ufpc2016:)
 
         # TODO Fix the prefix with the year
         BIND(IRI(CONCAT(STR(?DataPrefix), "Observation-", SHA256(?IDstring))) AS ?ID) ,
-        BIND(IRI(CONCAT(STR(?ObjectPrefix), "Object-", SHA256(?PRCCODEstring))) AS ?PRCCode) ,
+        BIND(IRI(CONCAT(STR(?ObjectPrefix), "Object-", ?PRCCODEstring)) AS ?PRCCode) ,
         BIND(IRI(CONCAT(STR(:), "Unit-", SHA256(?QNTUNIT))) AS ?UnitID) .
 
 # if ?PRODQNT is not "absent"
-ufu:NG(?ID, ufu:measurementUnit, ?PRODQNT)
-        :- ufrd:PRODCOM_DATA(?IDstring, ?PRCCODEstring, ?PRODQNT, ?QNTUNIT), FILTER(BOUND(?PRODQNT)),
+[?ID, ufu:measurementUnit, ?PRODQNT] ufu:NG
+        :- PRODCOM_DATA(?IDstring, ?PRCCODEstring, ?PRODQNT, ?QNTUNIT), FILTER(BOUND(?PRODQNT)),
         [ufu:CurrentImport, :useDataPrefix, ?DataPrefix],  # STR(ufpcd2016:)
         BIND(IRI(CONCAT(STR(?DataPrefix), "Observation-", SHA256(?IDstring))) AS ?ID).
 

+ 12 - 12
scripts/map_prodcom_bulk_sold.dlog

@@ -2,12 +2,12 @@
 
 :DirectObservation[?ID] ,
 [?ID, :objectDirectlyDefinedBy, ?Object] ,
-[?ID, :hasTimePeriod, ?TimePeriod] ,
+[?ID, :hasTime, ?TimePeriod] ,
 [?ID, :hasRole, :SoldProduction] ,
 [?ID, :partOfDataset, ufpc:PRODCOM] ,
-[?ID, :bound, :ExactBound]
+[?ID, :hasBound, :ExactBound]
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "PRODQNT" || (?Indicators = "PQNTFLAG" && ?ObsValue = ":C")),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, "PRODQNT")))) AS ?ID),
         BIND(IRI(CONCAT(STR(ufpc2017:), "Object-", ?PRCCODE)) AS ?Object) ,
@@ -16,16 +16,16 @@
 
 [?ID, :hasRegion, ?Region]
        :-
-       ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
-       ufrd:GEONAMES(?Decl, ?RegionID) ,
+       PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+       GEONAMES(?Decl, ?RegionID) ,
        FILTER(?RegionID != "0"),
        BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, ?Indicators)))) AS ?ID),
        BIND(IRI(CONCAT(STR(gnd:), STR(?RegionID))) AS ?Region) .
 
 [?ID, :hasRegion, ?Region]
        :-
-       ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
-       ufrd:GEONAMES(?Decl, ?RegionID) ,
+       PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+       GEONAMES(?Decl, ?RegionID) ,
        FILTER(?RegionID = "0"),
        BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, ?Indicators)))) AS ?ID),
        BIND(IRI(CONCAT(STR(ufpc:), "Region-", STR(?Decl))) AS ?Region) .
@@ -33,9 +33,9 @@
 
 # Additional info from other rows about units and flags
 
-ufu:NG(?ID, ufu:measurementUnit, ?Measurement)
+[?ID, ufu:measurementUnit, ?Measurement] ufu:NG
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "PRODQNT"),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, ?Indicators)))) AS ?ID) ,
         :DirectObservation[?ID] ,
@@ -47,9 +47,9 @@ ufu:NG(?ID, ufu:measurementUnit, ?Measurement)
         BIND(xsd:decimal(?ObsValue) AS ?Measurement).
 
 
-ufu:NG(?ID, ufu:unit, ?UnitID)
+[?ID, ufu:unit, ?UnitID] ufu:NG
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "QNTUNIT"),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, "PRODQNT")))) AS ?ID) ,
         :DirectObservation[?ID] ,
@@ -58,7 +58,7 @@ ufu:NG(?ID, ufu:unit, ?UnitID)
 
 [?ID, :measurementFlag, ?ObsValue]
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "PQNTFLAG"),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, "PRODQNT")))) AS ?ID) ,
         :DirectObservation[?ID] .

+ 12 - 12
scripts/map_prodcom_bulk_total.dlog

@@ -2,12 +2,12 @@
 
 :DirectObservation[?ID] ,
 [?ID, :objectDirectlyDefinedBy, ?Object] ,
-[?ID, :hasTimePeriod, ?TimePeriod] ,
+[?ID, :hasTime, ?TimePeriod] ,
 [?ID, :hasRole, :TotalProduction] ,
 [?ID, :partOfDataset, ufpc:PRODCOM] ,
-[?ID, :bound, :ExactBound]
+[?ID, :hasBound, :ExactBound]
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "PRODQNT" || (?Indicators = "PQNTFLAG" && ?ObsValue = ":C")),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, "PRODQNT")))) AS ?ID),
         BIND(IRI(CONCAT(STR(ufpc2017:), "Object-", ?PRCCODE)) AS ?Object) ,
@@ -16,16 +16,16 @@
 
 [?ID, :hasRegion, ?Region]
        :-
-       ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
-       ufrd:GEONAMES(?Decl, ?RegionID) ,
+       PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+       GEONAMES(?Decl, ?RegionID) ,
        FILTER(?RegionID != "0"),
        BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, ?Indicators)))) AS ?ID),
        BIND(IRI(CONCAT(STR(gnd:), STR(?RegionID))) AS ?Region) .
 
 [?ID, :hasRegion, ?Region]
        :-
-       ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
-       ufrd:GEONAMES(?Decl, ?RegionID) ,
+       PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+       GEONAMES(?Decl, ?RegionID) ,
        FILTER(?RegionID = "0"),
        BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, ?Indicators)))) AS ?ID),
        BIND(IRI(CONCAT(STR(ufpc:), "Region-", STR(?Decl))) AS ?Region) .
@@ -33,9 +33,9 @@
 
 # Additional info from other rows about units and flags
 
-ufu:NG(?ID, ufu:measurementUnit, ?Measurement)
+[?ID, ufu:measurementUnit, ?Measurement] ufu:NG
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "PRODQNT"),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, ?Indicators)))) AS ?ID) ,
         :DirectObservation[?ID] ,
@@ -47,9 +47,9 @@ ufu:NG(?ID, ufu:measurementUnit, ?Measurement)
         BIND(xsd:decimal(?ObsValue) AS ?Measurement).
 
 
-ufu:NG(?ID, ufu:unit, ?UnitID)
+[?ID, ufu:unit, ?UnitID] ufu:NG
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "QNTUNIT"),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, "PRODQNT")))) AS ?ID) ,
         :DirectObservation[?ID] ,
@@ -58,7 +58,7 @@ ufu:NG(?ID, ufu:unit, ?UnitID)
 
 [?ID, :measurementFlag, ?ObsValue]
         :-
-        ufrd:PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
+        PRODCOM_DATA_NEW(?Decl, ?Year, ?PRCCODE, ?Indicators, ?ObsValue, ?ObsFlag),
         FILTER(?Indicators = "PQNTFLAG"),
         BIND(IRI(CONCAT(STR(ufpcd:), ?Year, "/Observation-", SHA256(CONCAT(?Decl, ?Year, ?PRCCODE, "PRODQNT")))) AS ?ID) ,
         :DirectObservation[?ID] .

+ 3 - 3
scripts/map_prodcom_correspondence.dlog

@@ -1,8 +1,8 @@
 [?ObjNew, :objectEquivalentTo, ?ObjOld]
-        :- ufrd:PRC_CORRESPONDENCE(?CodeYearNew, ?CodeYearOld) ,
+        :- PRC_CORRESPONDENCE(?CodeYearNew, ?CodeYearOld) ,
 
         [ufu:CurrentImport, :useObjectPrefix1, ?ObjectPrefix1],
         [ufu:CurrentImport, :useObjectPrefix2, ?ObjectPrefix2],
 
-        BIND(IRI(CONCAT(STR(?ObjectPrefix2), "Object-", SHA256(?CodeYearNew))) AS ?ObjNew) ,
-        BIND(IRI(CONCAT(STR(?ObjectPrefix1), "Object-", SHA256(?CodeYearOld))) AS ?ObjOld) .
+        BIND(IRI(CONCAT(STR(?ObjectPrefix2), "Object-", ?CodeYearNew)) AS ?ObjNew) ,
+        BIND(IRI(CONCAT(STR(?ObjectPrefix1), "Object-", ?CodeYearOld)) AS ?ObjOld) .

+ 10 - 9
scripts/map_prodcom_list.dlog

@@ -1,22 +1,23 @@
 ufpc:ClassificationCode[?CCID] ,
 [?ObjectID, :hasClassificationCode, ?CCID] ,
-[?ObjectID, :objectName, ?objectName] ,
-[?CCID, :codeName, ?Code] ,
+[?ObjectID, rdfs:label, ?objectName] ,
+[?CCID, rdfs:label, ?Code] ,
 [?CCID, :codeDescription, ?Description] ,
-[?CCID, :belongsToList, ?List]
-        :- ufrd:PRODCOM_LIST(?Code, ?Description, ?Parent, ?Level) ,
+[?CCID, :partOfList, ?List]
+        :- PRODCOM_LIST(?Code, ?Description, ?Parent, ?Level) ,
 
-        [ufu:CurrentImport, :belongsToList, ?List],
+        [ufu:CurrentImport, :partOfList, ?List],
         [ufu:CurrentImport, :useDataPrefix, ?DataPrefix],
 
-        BIND(IRI(CONCAT(STR(?DataPrefix), "Object-", SHA256(?Code))) AS ?ObjectID) ,
+        BIND(IRI(CONCAT(STR(?DataPrefix), "Object-", ?Code)) AS ?ObjectID) ,
         BIND(IRI(CONCAT(STR(?DataPrefix), "ClassificationCode-", SHA256(?Code))) AS ?CCID) ,
         BIND(CONCAT("PRODCOM Object from Code ", ?Code) AS ?objectName) .
+
 # if ?Parent is not "absent"
 [?ParentID, :objectComposedOf, ?ObjectID]
-        :- ufrd:PRODCOM_LIST(?Code, ?Description, ?Parent, ?Level) ,
+        :- PRODCOM_LIST(?Code, ?Description, ?Parent, ?Level) ,
 
         [ufu:CurrentImport, :useDataPrefix, ?DataPrefix],
 
-        BIND(IRI(CONCAT(STR(?DataPrefix), "Object-", SHA256(?Code))) AS ?ObjectID) ,
-        BIND(IRI(CONCAT(STR(?DataPrefix), "Object-", SHA256(?Parent))) AS ?ParentID) .
+        BIND(IRI(CONCAT(STR(?DataPrefix), "Object-", ?Code)) AS ?ObjectID) ,
+        BIND(IRI(CONCAT(STR(?DataPrefix), "Object-", ?Parent)) AS ?ParentID) .

+ 14 - 14
scripts/unit_conversion.dlog

@@ -1,30 +1,30 @@
-ufu:NG(?UnitID, ufu:refersToMetric, ?MetricID) ,
-ufu:NG(?UnitID, ufu:hasConversionFactor, ?Conversion) ,
-ufu:NG(?UnitID, ufu:unitName, ?UnitOfMeasure) ,
+[?UnitID, ufu:refersToMetric, ?MetricID] ufu:NG ,
+[?UnitID, ufu:hasConversionFactor, ?Conversion] ufu:NG ,
+[?UnitID, ufu:unitName, ?UnitOfMeasure] ufu:NG ,
 [?MetricID, :metricName, ?Metric]
-        :- ufrd:MetricUnits(?Metric, ?UnitOfMeasure, ?Conversion) ,
+        :- MetricUnits(?Metric, ?UnitOfMeasure, ?Conversion) ,
         BIND(IRI(CONCAT(STR(:), "Unit-", SHA256(?UnitOfMeasure))) AS ?UnitID) ,
         BIND(IRI(CONCAT(STR(quantitykind:), ?Metric)) AS ?MetricID) .
 
 # If Units given instead of metrics, do conversion
-[?Observation, :metric, ?Metric]
+[?Observation, :hasMetric, ?Metric]
     :-
-        ufu:NG(?Observation, ufu:unit, ?Unit),
-        ufu:NG(?Unit, ufu:refersToMetric, ?Metric) .
+        [?Observation, ufu:unit, ?Unit] ufu:NG,
+        [?Unit, ufu:refersToMetric, ?Metric] ufu:NG .
 
 [?Observation, :measurement, ?MetricVal]
     :-
-        ufu:NG(?Observation, ufu:unit, ?Unit),
-        ufu:NG(?Unit, ufu:refersToMetric, ?Metric) ,
-        ufu:NG(?Unit, ufu:hasConversionFactor, ?Conversion),
-        ufu:NG(?Observation, ufu:measurementUnit, ?Value) ,
+        [?Observation, ufu:unit, ?Unit] ufu:NG,
+        [?Unit, ufu:refersToMetric, ?Metric] ufu:NG ,
+        [?Unit, ufu:hasConversionFactor, ?Conversion] ufu:NG,
+        [?Observation, ufu:measurementUnit, ?Value] ufu:NG ,
         BIND(?Value * ?Conversion AS ?MetricVal).
 
 [?Observation, :measurement, ?Value]
    :-
-        ufu:NG(?Observation, ufu:unit, ?Unit),
-        ufu:NG(?Observation, ufu:measurementUnit, ?Value) ,
+        [?Observation, ufu:unit, ?Unit] ufu:NG,
+        [?Observation, ufu:measurementUnit, ?Value] ufu:NG ,
         NOT EXISTS ?Metric IN (
-            ufu:NG(?Unit, ufu:refersToMetric, ?Metric)
+            [?Unit, ufu:refersToMetric, ?Metric] ufu:NG
         ) .
 

+ 5 - 6
tests/test_prodcom.py

@@ -16,7 +16,6 @@ def assert_exact_results(result, expected_value):
     assert result[0].bound == PROBS.ExactBound
     assert_allclose(result[0].measurement, expected_value, rtol=1e-3)
 
-
 def assert_no_measurement(result):
     assert len(result) == 1
     assert isnan(result[0].measurement)
@@ -46,7 +45,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"],
             metric,
             PROBS.SoldProduction,
-            object_code=code,
+            object_code=code
         )
         assert_exact_results(result, expected_value)
 
@@ -63,7 +62,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"] ,
             metric,
             PROBS.SoldProduction,
-            object_code=code,
+            object_code=code
         )
         assert_no_measurement(result)
 
@@ -78,7 +77,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"] ,
             metric,
             PROBS.SoldProduction,
-            object_code=code,
+            object_code=code
         )
         assert_no_result(result)
 
@@ -104,7 +103,7 @@ class TestProdcom2017Data:
             GEONAMES["2635167"],
             metric,
             PROBS.SoldProduction,
-            object_code=code,
+            object_code=code
         )
         assert_exact_results(result, expected_value)
 
@@ -130,6 +129,6 @@ class TestProdcom2018Data:
             GEONAMES["2635167"],
             metric,
             PROBS.SoldProduction,
-            object_code=code,
+            object_code=code
         )
         assert_exact_results(result, expected_value)

+ 11 - 12
tests/test_prodcom_bulk_sold.py

@@ -25,16 +25,13 @@ def assert_no_result(result):
     assert len(result) == 0
 
 
-def obj_id(obj_code):
-    return ("Object-" + sha256(obj_code.encode('utf-8')).hexdigest())
-
-
 # Do most tests for 2016; then spot check a few values for the other years
 
 class TestProdcom2016Data:
     """Test PRODCOM2016 DATA conversion"""
 
-    endpoint_data = ["outputs/sold_production/DS-056120_006-2016.nt.gz"]
+    endpoint_data = ["outputs/sold_production/DS-056120_006-2016.nt.gz",
+                     "outputs/PRD_2017_20200617_185035.nt.gz"]
 
     @pytest.mark.parametrize("code,metric,expected_value", [
         ("10113250", QUANTITYKIND.Mass, 2717950),
@@ -49,7 +46,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"],
             metric,
             PROBS.SoldProduction,
-            object_=PRODCOM2017["Object-" + code]
+            object_code=code
         )
         assert_exact_results(result, expected_value)
 
@@ -64,7 +61,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"] ,
             metric,
             PROBS.SoldProduction,
-            object_=PRODCOM2017["Object-" + code],
+            object_code=code,
         )
         assert_no_result(result)
 
@@ -79,7 +76,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"] ,
             metric,
             PROBS.SoldProduction,
-            object_=PRODCOM2017["Object-" + code],
+            object_code=code,
         )
         assert_no_result(result)
 
@@ -90,7 +87,8 @@ class TestProdcom2017Data:
     Just include a few expected values, since other behaviour is tested for the 2016 data.
     """
 
-    endpoint_data = ["outputs/sold_production/DS-056120_006-2017.nt.gz"]
+    endpoint_data = ["outputs/sold_production/DS-056120_006-2017.nt.gz",
+                     "outputs/PRD_2017_20200617_185035.nt.gz"]
 
     @pytest.mark.parametrize("code,metric,expected_value", [
         ("10721253", QUANTITYKIND.Mass, 244871494),
@@ -104,7 +102,7 @@ class TestProdcom2017Data:
             GEONAMES["2635167"],
             metric,
             PROBS.SoldProduction,
-            object_=PRODCOM2017["Object-" + code]
+            object_code=code
         )
         assert_exact_results(result, expected_value)
 
@@ -115,7 +113,8 @@ class TestProdcom2018Data:
     Just include a few expected values, since other behaviour is tested for the 2016 data.
     """
 
-    endpoint_data = ["outputs/sold_production/DS-056120_006-2018.nt.gz"]
+    endpoint_data = ["outputs/sold_production/DS-056120_006-2018.nt.gz",
+                     "outputs/PRD_2017_20200617_185035.nt.gz"]
 
     @pytest.mark.parametrize("code,metric,expected_value", [
         ("10131120", QUANTITYKIND.Mass, 104282828),
@@ -129,6 +128,6 @@ class TestProdcom2018Data:
             GEONAMES["2635167"],
             metric,
             PROBS.SoldProduction,
-            object_=PRODCOM2017["Object-" + code]
+            object_code=code
         )
         assert_exact_results(result, expected_value)

+ 11 - 13
tests/test_prodcom_bulk_total.py

@@ -25,16 +25,13 @@ def assert_no_result(result):
     assert len(result) == 0
 
 
-def obj_id(obj_code):
-    return ("Object-" + sha256(obj_code.encode('utf-8')).hexdigest())
-
-
 # Do most tests for 2016; then spot check a few values for the other years
 
 class TestProdcom2016Data:
     """Test PRODCOM2016 DATA conversion"""
 
-    endpoint_data = ["outputs/total_production/DS-056121_006-2016.nt.gz"]
+    endpoint_data = ["outputs/total_production/DS-056121_006-2016.nt.gz",
+                     "outputs/PRD_2017_20200617_185035.nt.gz"]
 
     @pytest.mark.parametrize("code,metric,expected_value", [
         ("13103100", QUANTITYKIND.Mass, 224299),
@@ -49,7 +46,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"],
             metric,
             PROBS.TotalProduction,
-            object_=PRODCOM2017["Object-" + code]
+            object_code=code
         )
         assert_exact_results(result, expected_value)
 
@@ -64,10 +61,9 @@ class TestProdcom2016Data:
             GEONAMES["2635167"] ,
             metric,
             PROBS.TotalProduction,
-            object_=PRODCOM2017["Object-" + code],
+            object_code=code,
         )
         assert_no_result(result)
-        print(PRODCOM2017[obj_id(code)])
 
     @pytest.mark.parametrize("code,metric", [
         ("13201230", QUANTITYKIND.Mass),
@@ -80,7 +76,7 @@ class TestProdcom2016Data:
             GEONAMES["2635167"] ,
             metric,
             PROBS.TotalProduction,
-            object_=PRODCOM2017["Object-" + code],
+            object_code=code,
         )
         assert_no_result(result)
 
@@ -91,7 +87,8 @@ class TestProdcom2017Data:
     Just include a few expected values, since other behaviour is tested for the 2016 data.
     """
 
-    endpoint_data = ["outputs/total_production/DS-056121_006-2017.nt.gz"]
+    endpoint_data = ["outputs/total_production/DS-056121_006-2017.nt.gz",
+                     "outputs/PRD_2017_20200617_185035.nt.gz"]
 
     @pytest.mark.parametrize("code,metric,expected_value", [
         ("08111250", QUANTITYKIND.Mass, 604132000),
@@ -105,7 +102,7 @@ class TestProdcom2017Data:
             GEONAMES["2635167"],
             metric,
             PROBS.TotalProduction,
-            object_=PRODCOM2017["Object-" + code]
+            object_code=code
         )
         assert_exact_results(result, expected_value)
 
@@ -116,7 +113,8 @@ class TestProdcom2018Data:
     Just include a few expected values, since other behaviour is tested for the 2016 data.
     """
 
-    endpoint_data = ["outputs/total_production/DS-056121_006-2018.nt.gz"]
+    endpoint_data = ["outputs/total_production/DS-056121_006-2018.nt.gz",
+                     "outputs/PRD_2017_20200617_185035.nt.gz"]
 
     @pytest.mark.parametrize("code,metric,expected_value", [
         ("08114000", QUANTITYKIND.Mass, 41455000),
@@ -130,6 +128,6 @@ class TestProdcom2018Data:
             GEONAMES["2635167"],
             metric,
             PROBS.TotalProduction,
-            object_=PRODCOM2017["Object-" + code]
+            object_code=code
         )
         assert_exact_results(result, expected_value)

+ 10 - 10
tests/test_prodcom_correspondence.py

@@ -43,12 +43,12 @@ class TestProdcomCorrespondence:
         obj_name = "\"PRODCOM Object from Code " + code + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                  SELECT ?a ?b WHERE {
-                      ?a :objectName %s ;
+                      ?a rdfs:label %s ;
                          :hasClassificationCode ?c.
-                      ?c :belongsToList ufpc:Prodcom2016List .
-                      ?b :objectName %s ;
+                      ?c :partOfList ufpc:Prodcom2016List .
+                      ?b rdfs:label %s ;
                          :hasClassificationCode ?d.
-                      ?d :belongsToList ufpc:Prodcom2017List .
+                      ?d :partOfList ufpc:Prodcom2017List .
                       ?b :objectEquivalentTo ?a .
                  } """ % (obj_name, obj_name)
         result = rdfox.query_records(query)
@@ -64,12 +64,12 @@ class TestProdcomCorrespondence:
         obj_name = "\"PRODCOM Object from Code " + code + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                  SELECT ?a WHERE {
-                      ?a :objectName %s ;
+                      ?a rdfs:label %s ;
                          :hasClassificationCode ?c .
-                      ?c :belongsToList ufpc:Prodcom2017List .
+                      ?c :partOfList ufpc:Prodcom2017List .
                       FILTER NOT EXISTS {
                         ?b :hasClassificationCode ?d .
-                        ?d :belongsToList ufpc:Prodcom2016List .
+                        ?d :partOfList ufpc:Prodcom2016List .
                         ?a :objectEquivalentTo ?b .
                       }
                  } """ % (obj_name)
@@ -87,12 +87,12 @@ class TestProdcomCorrespondence:
         obj_name = "\"PRODCOM Object from Code " + code + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                  SELECT ?a WHERE {
-                      ?a :objectName %s ;
+                      ?a rdfs:label %s ;
                          :hasClassificationCode ?c .
-                      ?c :belongsToList ufpc:Prodcom2016List .
+                      ?c :partOfList ufpc:Prodcom2016List .
                       FILTER NOT EXISTS {
                         ?b :hasClassificationCode ?d .
-                        ?d :belongsToList ufpc:Prodcom2017List .
+                        ?d :partOfList ufpc:Prodcom2017List .
                         ?b :objectEquivalentTo ?a .
                       }
                  } """ % (obj_name)

+ 15 - 17
tests/test_prodcom_list.py

@@ -26,6 +26,7 @@ def assert_no_measurement(result):
     assert isnan(result[0].measurement)
 
 
+
 class TestProdcomList2016:
     """Test PRODCOM List 2016 file conversion"""
 
@@ -46,12 +47,12 @@ class TestProdcomList2016:
         parent_name = "\"PRODCOM Object from Code " + parent + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                      SELECT ?a WHERE {
-                         ?a :objectName %s ;
+                         ?a rdfs:label %s ;
                             :hasClassificationCode ?b .
-                         ?b :codeName %s ;
+                         ?b rdfs:label %s ;
                             :codeDescription %s ;
-                            :belongsToList ufpc:Prodcom2016List .
-                         ?c :objectName %s ;
+                            :partOfList ufpc:Prodcom2016List .
+                         ?c rdfs:label %s ;
                             :objectComposedOf ?a .
                      } """ % (obj_name, code_name, code_description, parent_name)
         result = rdfox.query_records(query)
@@ -72,11 +73,11 @@ class TestProdcomList2016:
         code_description = "\"" + description + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                      SELECT ?a WHERE {
-                         ?a :objectName %s ;
+                         ?a rdfs:label %s ;
                             :hasClassificationCode ?b .
-                         ?b :codeName %s ;
+                         ?b rdfs:label %s ;
                             :codeDescription %s ;
-                            :belongsToList ufpc:Prodcom2016List .
+                            :partOfList ufpc:Prodcom2016List .
                          FILTER NOT EXISTS {
                             ?c :objectComposedOf ?a .
                          }
@@ -105,12 +106,12 @@ class TestProdcomList2017:
         parent_name = "\"PRODCOM Object from Code " + parent + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                      SELECT ?a WHERE {
-                         ?a :objectName %s ;
+                         ?a rdfs:label %s ;
                             :hasClassificationCode ?b .
-                         ?b :codeName %s ;
+                         ?b rdfs:label %s ;
                             :codeDescription %s ;
-                            :belongsToList ufpc:Prodcom2017List .
-                         ?c :objectName %s ;
+                            :partOfList ufpc:Prodcom2017List .
+                         ?c rdfs:label %s ;
                             :objectComposedOf ?a .
                      } """ % (obj_name, code_name, code_description, parent_name)
         result = rdfox.query_records(query)
@@ -131,11 +132,11 @@ class TestProdcomList2017:
         code_description = "\"" + description + "\""
         query = r""" PREFIX ufpc: <http://w3id.org/probs-lab/data/prodcom/>
                      SELECT ?a WHERE {
-                         ?a :objectName %s ;
+                         ?a rdfs:label %s ;
                             :hasClassificationCode ?b .
-                         ?b :codeName %s ;
+                         ?b rdfs:label %s ;
                             :codeDescription %s ;
-                            :belongsToList ufpc:Prodcom2017List .
+                            :partOfList ufpc:Prodcom2017List .
                          FILTER NOT EXISTS {
                             ?c :objectComposedOf ?a .
                          }
@@ -144,7 +145,4 @@ class TestProdcomList2017:
         assert len(result) == 1
 
 
-
-
-