software(id:pK,description) :- Software(X1),name(X1,id),description(X1,description)::identifier(X1,id). officeSoftware(id,name:PK,version,manufacturer,year) :- OfficeSoftware(X1),version(X1,version),name(X1,name),Software(X2),isa(X1,X2), manufacturer(X1,manufacturer),id(X2,id),year(X1,year)::identifier(X1,name), identifier(X2,id). operatingSystem(id,name:PK,version,manufacturer,year) :- OperatingSystem(X1),version(X1,version),manufacturer(X1,manufacturer), year(X1,year),id(X2,id),name(X1,name),Software(X2),isa(X1,X2) ::identifier(X1,name),identifier(X2,id). serverSoftware(id,description:PK) :- ServerSoftware(X1),description(X1,description),id(X2,id), Software(X2),isa(X1,X2)::identifier(X1,description),identifier(X2,id). FTPServer(id,name:PK,version,manufacturer,year) :- FTPServer(X1),year(X1,year),manufacturer(X1,manufacturer), description(X2,id),version(X1,version),name(X1,name),ServerSoftware(X2),isa(X1,X2) ::identifier(X1,name),identifier(X2,id). OtherServer(id,name:PK,version,manufacturer,year) :- OtherServer(X1),manufacturer(X1,manufacturer),description(X2,id), name(X1,name),year(X1,year),version(X1,version),ServerSoftware(X2),isa(X1,X2) ::identifier(X1,name),identifier(X2,id). SSHServer(id,name:PK,version,manufacturer,year) :- SSHServer(X1),description(X2,id),year(X1,year), version(X1,version),name(X1,name),manufacturer(X1,manufacturer), ServerSoftware(X2),isa(X1,X2)::identifier(X1,name),identifier(X2,id). TelnetServer(id,name:PK,version,manufacturer,year) :- TelnetServer(X1),year(X1,year),name(X1,name), version(X1,version),manufacturer(X1,manufacturer),description(X2,id), ServerSoftware(X2),isa(X1,X2)::identifier(X1,name),identifier(X2,id). WebServer(id,name:PK,version,manufacturer,year) :- WebServer(X1),version(X1,version),manufacturer(X1,manufacturer), year(X1,year),name(X1,name),description(X1,id),ServerSoftware(X2),isa(X1,X2):: identifier(X1,name),identifier(X2,id). equipment(id:PK,description) :- Equipment(X1),id(X1,id),description(X1,description)::identifier(X1,id). cable(id,name:PK,manufacturer,version,year,description,type) :- Cable(X1),version(X1,version),description(X1,description), name(X1,name),type in {SubClassNamesOf(Cable)},manufacturer(X1,manufacturer), id(X2,id),year(X1,year),Equipment(X2),isa(X1,X2)::identifier(X1,name), identifier(X2,id). networkNode(id:PK,description) :- NetworkNode(X1),id(X2,id),description(X1,description),Equipment(X2), isa(X1,X2)::identifier(X1,description),identifier(X2,id). installed_software(networkNodeID:PK,softwareID:PK) :- NetworkNode(X1),Software(X2),installedWith(X1,X2), id(X1,networkNodeID),id(X2,softwareID)::identifier(X1,networkNodeID), identifier(X2,softwareID). connectedTo(node1ID:PK,node2ID:PK) :- NetworkNode(X1),NetworkNode(X2),ConnectedTo(X1,X2), id(X1,node1ID),id(X2,node2ID)::identifier(X1,node1ID),identifier(X2,node2ID). nodePair(id:PK,node1ID,node2ID) :- NodePair(X1),NetworkNode(X2),NetworkNode(X3), NodeB(X1,X2),NodeA(X1,X3),id(X1,id), id(X2,node2ID),id(X3,node1ID)::identifier(X1,id),identifier(X2,node2ID), identifier(X3,node1ID). computer(id,name:PK,manufacturer,version,year,description,type) :- Computer(X1),description(X1,description),description(X2,id), type in {SubClassNamesOf(Computer)},name(X1,name),version(X1,version), year(X1,year),manufacturer(X1,manufacturer),NetworkNode(X2),isa(X1,X2):: identifier(X1,name),identifier(X2,id). switchEquipment(id,name:PK,manufacturer,version,year,description,type) :- SwitchEquipment(X1),year(X1,year),version(X1,version), name(X1,name),description(X2,id),manufacturer(X1,manufacturer), type in {SubClassNamesOf(SwitchEquipment)},description(X1,description), NetworkNode(X2),isa(X1,X2):: identifier(X1,name),identifier(X2,id). . securityEquipment(id,name:PK,manufacturer,version,year,description,type) :- SecurityEquipment(X1),version(X1,version),id(X1,id), name(X1,name),type in {SubClassNamesOf(SecurityEquipment)},year(X1,year), description(X1,description),manufacturer(X1,manufacturer):: identifier(X1,id). .