#include "facts.dl" #include "part.dl" .decl add_fact(part_uri:symbol, key:symbol, value:symbol) .output add_fact #define RESISTANCE "http://purl.org/ee/digikey-fact-key#2085" #define CAPACITANCE "http://purl.org/ee/digikey-fact-key#2049" #define SURFACE_MOUNT_LAND_SIZE "http://purl.org/ee/digikey-fact-key#884" #define PACKAGE "http://purl.org/ee/digikey-fact-key#16" #define SUPPLIER_DEVICE_PACKAGE "http://purl.org/ee/digikey-fact-key#1291" #define MOUNTING_TYPE "http://purl.org/ee/digikey-fact-key#69" #define BASE_PART_TYPE "http://purl.org/ee/digikey-fact-key#2078" /* I though this rule would be good enough, but I keep on getting errors like this: warning: wrong index position provided by substr("DO-21",6,5) functor. fact(part, "http://purl.org/ee/fact-type/footprint", res) :- fact(part, PACKAGE, package), match(".*\([0-9][0-9][0-9][0-9] Metric\)", package), res_ = substr(package, 0, strlen(package)-8), res = substr(res_, 6, strlen(res_)) . */ .decl dk_manufacturer_part_to_common_footprint(mpn:symbol, common_footprint:symbol) add_fact(part, "http://purl.org/ee/fact-type/footprint", common_footprint) :- part_pn(part, _, mpn), dk_manufacturer_part_to_common_footprint(mpn, common_footprint). .decl dk_to_ipc(dk:symbol, ipc:symbol) dk_to_ipc("0402 (1005 Metric)", "1005"). dk_to_ipc("0402 (1006 Metric)", "1005"). // compatible enough dk_to_ipc("0603 (1608 Metric)", "1608"). dk_to_ipc("0805 (2012 Metric)", "2012"). dk_to_ipc("1206 (3216 Metric)", "3216"). dk_to_ipc("1210 (3225 Metric)", "3225"). dk_to_ipc("1812 (4532 Metric)", "4532"). add_fact(part, "http://purl.org/ee/fact-type/footprint", ipc) :- fact(part, "http://purl.org/ee/digikey-fact-key#16", dk), dk_to_ipc(dk, ipc). .decl supplier_device_package_to_footprint(dk:symbol, footprint:symbol) supplier_device_package_to_footprint("Mini-Dip (TO-269AA)", "TO-269AA"). supplier_device_package_to_footprint("SMA (DO-214AC)", "SMA"). supplier_device_package_to_footprint("SOD-323", "SOD-323"). add_fact(part, "http://purl.org/ee/fact-type/footprint", footprint) :- fact(part, SUPPLIER_DEVICE_PACKAGE, dk), supplier_device_package_to_footprint(dk, footprint). // Component classifications .decl resistor(part: symbol) add_fact(Part, "http://purl.org/ee/fact-type/ee-component-type", "http://purl.org/ee/part-type#resistor") :- resistor(Part). .decl dk_resistance(part: symbol, resistance: symbol) dk_resistance(Part, Value) :- fact(Part, "http://purl.org/ee/digikey-fact-key#2085", Value). .decl capacitor(part: symbol) add_fact(Part, "http://purl.org/ee/fact-type/ee-component-type", "http://purl.org/ee/part-type#capacitor") :- capacitor(Part). .decl dk_capacitance(part: symbol, resistance: symbol) dk_capacitance(Part, Value) :- fact(Part, "http://purl.org/ee/digikey-fact-key#2049", Value). .decl inductor(part: symbol) add_fact(Part, "http://purl.org/ee/fact-type/ee-component-type", "http://purl.org/ee/part-type#inductor") :- inductor(Part). .decl crystal(part: symbol) add_fact(Part, "http://purl.org/ee/fact-type/ee-component-type", "http://purl.org/ee/part-type#crystal") :- crystal(Part).