deliverNS := "http://www.ida.liu.se/~adrpo/courses/homework/lftw/deliveries.rdf#". deliveriesNS := "http://www.ida.liu.se/~adrpo/courses/homework/lftw/deliveries.rdfs#". rdfs := "http://www.w3.org/2000/01/rdf-schema#". rdf := "http://www.w3.org/1999/02/22-rdf-syntax-ns#". FORALL Mdl @rdfschema(Mdl) { FORALL O,P,V O[P->V] <- O[P->V]@Mdl. FORALL O,P,V O[P->V] <- EXISTS S (S[rdfs:subPropertyOf->P] AND O[S->V]). FORALL O,P,V O[rdfs:subClassOf->V] <- EXISTS W (O[rdfs:subClassOf->W] AND W[rdfs:subClassOf->V]). FORALL O,P,V O[rdfs:subPropertyOf->V] <- EXISTS W (O[rdfs:subPropertyOf->W] AND W[rdfs:subPropertyOf->V]). FORALL O,T O[rdf:type->T] <- EXISTS S (S[rdfs:subClassOf->T] AND O[rdf:type->S]). } FORALL Mdl @ontology(Mdl) { FORALL O, P, V O[P->V] <- O[P->V]@Mdl. deliveriesNS:'PlasticPallet'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'PlasticPallet'['rdfs':subClassOf -> deliveriesNS:'Pallet']. deliveriesNS:'PlasticPallet'['rdfs':comment -> 'The PlasticPallet class is a more specific class of pallet (Plastic Pallet)']. deliveriesNS:'PlasticPallet'['rdfs':label -> 'PlasticPallet']. deliveriesNS:'Pallet'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'Pallet'['rdfs':subClassOf -> deliveriesNS:'ParcelComponent']. deliveriesNS:'Pallet'['rdfs':comment -> 'The Pallet class is a subclass of ParcelComponent class']. deliveriesNS:'Pallet'['rdfs':label -> 'Pallet']. deliveriesNS:categoryNumberOfItemsInParcel['rdf':type -> 'rdf':'Property']. deliveriesNS:categoryNumberOfItemsInParcel['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:categoryNumberOfItemsInParcel['rdfs':domain -> deliveriesNS:'ParcelCard']. deliveriesNS:categoryNumberOfItemsInParcel['rdfs':comment -> 'The categoryNumberForParcelCard property defines a relation between a ParcelCard and a category numbers for the items in the parcel. ']. deliveriesNS:categoryNumberOfItemsInParcel['rdfs':label -> categoryNumberForParcelCard]. deliveriesNS:description['rdf':type -> 'rdf':'Property']. deliveriesNS:description['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:description['rdfs':domain -> deliveriesNS:'Item']. deliveriesNS:description['rdfs':comment -> 'The description property defines a relation between an Item and a description']. deliveriesNS:description['rdfs':label -> description]. deliveriesNS:containsDelivery['rdf':type -> 'rdf':'Property']. deliveriesNS:containsDelivery['rdfs':range -> deliveriesNS:'Delivery']. deliveriesNS:containsDelivery['rdfs':domain -> deliveriesNS:deliveries]. deliveriesNS:containsDelivery['rdfs':comment -> 'The containsDelivery property defines a relation between a Deliveries and Delivery. ']. deliveriesNS:containsDelivery['rdfs':label -> containsDelivery]. deliveriesNS:'Item'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'Item'['rdfs':subClassOf -> deliveriesNS:'LooseItem']. deliveriesNS:'Item'['rdfs':subClassOf -> deliveriesNS:'ParcelComponent']. deliveriesNS:'Item'['rdfs':comment -> 'The Item class is a subclass of Parcel component and LooseItem']. deliveriesNS:'Item'['rdfs':label -> 'Item']. deliveriesNS:hasParcelId['rdf':type -> 'rdf':'Property']. deliveriesNS:hasParcelId['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:hasParcelId['rdfs':domain -> deliveriesNS:'ParcelCard']. deliveriesNS:hasParcelId['rdfs':comment -> 'The hasParcelId property defines a relation between a ParcelCard and the parcel identification number.']. deliveriesNS:hasParcelId['rdfs':label -> hasParcelId]. deliveriesNS:deliveries['rdf':type -> 'rdfs':'Class']. deliveriesNS:deliveries['rdfs':comment -> 'The Deliveries class']. deliveriesNS:deliveries['rdfs':label -> deliveries]. deliveriesNS:name['rdf':type -> 'rdf':'Property']. deliveriesNS:name['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:name['rdfs':domain -> deliveriesNS:'Contact']. deliveriesNS:name['rdfs':comment -> 'The name property defines a name for a Contact.']. deliveriesNS:name['rdfs':label -> name]. deliveriesNS:hasParcelCard['rdf':type -> 'rdf':'Property']. deliveriesNS:hasParcelCard['rdfs':range -> deliveriesNS:'ParcelCard']. deliveriesNS:hasParcelCard['rdfs':domain -> deliveriesNS:'Parcel']. deliveriesNS:hasParcelCard['rdfs':comment -> 'The hasParcelCard property defines a relation between a Parcel and a Parcel card']. deliveriesNS:hasParcelCard['rdfs':label -> hasParcelCard]. deliveriesNS:'WoodPallet'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'WoodPallet'['rdfs':subClassOf -> deliveriesNS:'Pallet']. deliveriesNS:'WoodPallet'['rdfs':comment -> 'The wood class is a more specific class of pallet (Wood Pallet)']. deliveriesNS:'WoodPallet'['rdfs':label -> 'WoodPallet']. deliveriesNS:street['rdf':type -> 'rdf':'Property']. deliveriesNS:street['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:street['rdfs':domain -> deliveriesNS:'Contact']. deliveriesNS:street['rdfs':comment -> 'The street property defines a street for a Contact.']. deliveriesNS:street['rdfs':label -> street]. deliveriesNS:'ParcelCard'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'ParcelCard'['rdfs':comment -> 'The ParcelCard class is the parcel card attached to a Parcel using has_card property']. deliveriesNS:'ParcelCard'['rdfs':label -> 'ParcelCard']. deliveriesNS:city['rdf':type -> 'rdf':'Property']. deliveriesNS:city['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:city['rdfs':domain -> deliveriesNS:'Contact']. deliveriesNS:city['rdfs':comment -> 'The city property defines a city for a Contact.']. deliveriesNS:city['rdfs':label -> city]. deliveriesNS:containsDeliveryComponent['rdf':type -> 'rdf':'Property']. deliveriesNS:containsDeliveryComponent['rdfs':range -> deliveriesNS:'DeliveryComponent']. deliveriesNS:containsDeliveryComponent['rdfs':domain -> deliveriesNS:'Delivery']. deliveriesNS:containsDeliveryComponent['rdfs':comment -> 'The containsDeliveryComponent property defines a relation between a Delivery and Delivery components.']. deliveriesNS:containsDeliveryComponent['rdfs':label -> containsDeliveryComponent]. deliveriesNS:'Contact'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'Contact'['rdfs':comment -> 'The Contact class holds the information about a contact: name, street, city, country, which are modelled as properties. Also, the Contact class is used as range for sender/receiver property']. deliveriesNS:'Contact'['rdfs':label -> 'Contact']. deliveriesNS:country['rdf':type -> 'rdf':'Property']. deliveriesNS:country['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:country['rdfs':domain -> deliveriesNS:'Contact']. deliveriesNS:country['rdfs':comment -> ' The country property defines a country for a Contact.']. deliveriesNS:country['rdfs':label -> country]. deliveriesNS:containsParcelComponent['rdf':type -> 'rdf':'Property']. deliveriesNS:containsParcelComponent['rdfs':range -> deliveriesNS:'ParcelComponent']. deliveriesNS:containsParcelComponent['rdfs':domain -> deliveriesNS:'Parcel']. deliveriesNS:containsParcelComponent['rdfs':comment -> 'The contains property defines a relation between a Parcel and the Parcel components.']. deliveriesNS:containsParcelComponent['rdfs':label -> containsParcelComponent]. deliveriesNS:'DeliveryComponent'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'DeliveryComponent'['rdfs':comment -> 'The Delivery component class']. deliveriesNS:'DeliveryComponent'['rdfs':label -> 'Delivery component']. deliveriesNS:categoryNumberOfItem['rdf':type -> 'rdf':'Property']. deliveriesNS:categoryNumberOfItem['rdfs':range -> 'rdfs':'Literal']. deliveriesNS:categoryNumberOfItem['rdfs':domain -> deliveriesNS:'Item']. deliveriesNS:categoryNumberOfItem['rdfs':comment -> 'The categoryNumberForItem property defines a relation between an Item and a category']. deliveriesNS:categoryNumberOfItem['rdfs':label -> categoryNumberForItem]. deliveriesNS:'Delivery'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'Delivery'['rdfs':comment -> 'The Delivery class']. deliveriesNS:'Delivery'['rdfs':label -> 'Delivery']. deliveriesNS:'Parcel'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'Parcel'['rdfs':subClassOf -> deliveriesNS:'DeliveryComponent']. deliveriesNS:'Parcel'['rdfs':comment -> 'The Parcel class is a subclass of the Delivery component']. deliveriesNS:'Parcel'['rdfs':label -> 'Parcel']. deliveriesNS:sender['rdf':type -> 'rdf':'Property']. deliveriesNS:sender['rdfs':range -> deliveriesNS:'Contact']. deliveriesNS:sender['rdfs':domain -> deliveriesNS:'Delivery']. deliveriesNS:sender['rdfs':comment -> 'The sender property defines a relation between a Delivery and a Contact (sender).']. deliveriesNS:sender['rdfs':label -> sender]. deliveriesNS:'ParcelComponent'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'ParcelComponent'['rdfs':comment -> 'The ParcelComponent class']. deliveriesNS:'ParcelComponent'['rdfs':label -> 'ParcelComponent']. deliveriesNS:recipient['rdf':type -> 'rdf':'Property']. deliveriesNS:recipient['rdfs':range -> deliveriesNS:'Contact']. deliveriesNS:recipient['rdfs':domain -> deliveriesNS:'Delivery']. deliveriesNS:recipient['rdfs':comment -> 'The recipient property defines a relation between a Delivery and a Contact (receiver).']. deliveriesNS:recipient['rdfs':label -> recipient]. deliveriesNS:'LooseItem'['rdf':type -> 'rdfs':'Class']. deliveriesNS:'LooseItem'['rdfs':subClassOf -> deliveriesNS:'DeliveryComponent']. deliveriesNS:'LooseItem'['rdfs':comment -> 'The LooseItem is a subclass of the DeliveryComponent']. deliveriesNS:'LooseItem'['rdfs':label -> 'LooseItem']. } @deliver:data { 'urn:rdf:':'340b9cfea2b8e8407c2ed6c6f303c4b1'['rdf':type -> deliveriesNS:deliveries]. 'urn:rdf:':'340b9cfea2b8e8407c2ed6c6f303c4b1'[deliveriesNS:containsDelivery -> deliverNS:'D457']. 'urn:rdf:':'340b9cfea2b8e8407c2ed6c6f303c4b1'[deliveriesNS:containsDelivery -> deliverNS:'D456']. deliverNS:'C267'['rdf':type -> deliveriesNS:'ParcelCard']. deliverNS:'C267'[deliveriesNS:hasParcelId -> 'P009']. deliverNS:'C267'[deliveriesNS:categoryNumberOfItemsInParcel -> 'P32']. deliverNS:'D456'['rdf':type -> deliveriesNS:'Delivery']. deliverNS:'D456'[deliveriesNS:containsDeliveryComponent -> deliverNS:'It009']. deliverNS:'D456'[deliveriesNS:containsDeliveryComponent -> deliverNS:'P219']. deliverNS:'D456'[deliveriesNS:recipient -> deliverNS:'I7712']. deliverNS:'D456'[deliveriesNS:sender -> deliverNS:'I3321']. deliverNS:'It1002'['rdf':type -> deliveriesNS:'Item']. deliverNS:'It1002'[deliveriesNS:description -> fragile]. deliverNS:'It1002'[deliveriesNS:categoryNumberOfItem -> 'P12']. deliverNS:'P009'['rdf':type -> deliveriesNS:'Parcel']. deliverNS:'P009'[deliveriesNS:containsParcelComponent -> deliverNS:'P461']. deliverNS:'P009'[deliveriesNS:containsParcelComponent -> deliverNS:'It1402']. deliverNS:'P009'[deliveriesNS:hasParcelCard -> deliverNS:'C267']. deliverNS:'I3321'['rdf':type -> deliveriesNS:'Contact']. deliverNS:'I3321'[deliveriesNS:country -> 'USA']. deliverNS:'I3321'[deliveriesNS:city -> 'El Paso']. deliverNS:'I3321'[deliveriesNS:street -> 'West Av. 345']. deliverNS:'I3321'[deliveriesNS:name -> 'JT Brewery']. deliverNS:'It1402'['rdf':type -> deliveriesNS:'Item']. deliverNS:'It1402'[deliveriesNS:categoryNumberOfItem -> 'P32']. deliverNS:'I7712'['rdf':type -> deliveriesNS:'Contact']. deliverNS:'I7712'[deliveriesNS:country -> 'Australia']. deliverNS:'I7712'[deliveriesNS:city -> 'Sydney']. deliverNS:'I7712'[deliveriesNS:street -> 'West Av. 345']. deliverNS:'I7712'[deliveriesNS:name -> 'J.Boldman']. deliverNS:'P461'['rdf':type -> deliveriesNS:'WoodPallet']. deliverNS:'I7122'['rdf':type -> deliveriesNS:'Contact']. deliverNS:'I7122'[deliveriesNS:country -> 'USA']. deliverNS:'I7122'[deliveriesNS:city -> 'San Diego']. deliverNS:'I7122'[deliveriesNS:street -> 'Colony St. 15']. deliverNS:'I7122'[deliveriesNS:name -> 'R. Bach']. deliverNS:'It3002'['rdf':type -> deliveriesNS:'Item']. deliverNS:'It3002'[deliveriesNS:description -> fragile]. deliverNS:'It3002'[deliveriesNS:categoryNumberOfItem -> 'P12']. deliverNS:'It9009'['rdf':type -> deliveriesNS:'Item']. deliverNS:'It9009'[deliveriesNS:description -> 'foto albums']. deliverNS:'It9009'[deliveriesNS:categoryNumberOfItem -> 'P02222']. deliverNS:'P341'['rdf':type -> deliveriesNS:'PlasticPallet']. deliverNS:'D457'['rdf':type -> deliveriesNS:'Delivery']. deliverNS:'D457'[deliveriesNS:containsDeliveryComponent -> deliverNS:'It9009']. deliverNS:'D457'[deliveriesNS:containsDeliveryComponent -> deliverNS:'P009']. deliverNS:'D457'[deliveriesNS:recipient -> deliverNS:'I7129']. deliverNS:'D457'[deliveriesNS:sender -> deliverNS:'I7122']. deliverNS:'C256'['rdf':type -> deliveriesNS:'ParcelCard']. deliverNS:'C256'[deliveriesNS:hasParcelId -> 'P219']. deliverNS:'C256'[deliveriesNS:categoryNumberOfItemsInParcel -> 'P12']. deliverNS:'It009'['rdf':type -> deliveriesNS:'Item']. deliverNS:'It009'[deliveriesNS:description -> fragile]. deliverNS:'It009'[deliveriesNS:categoryNumberOfItem -> 'P02345']. deliverNS:'I7129'['rdf':type -> deliveriesNS:'Contact']. deliverNS:'I7129'[deliveriesNS:country -> 'USA']. deliverNS:'I7129'[deliveriesNS:city -> 'Boston']. deliverNS:'I7129'[deliveriesNS:street -> 'McCartney St. 922']. deliverNS:'I7129'[deliveriesNS:name -> 'K. Forest']. deliverNS:'P219'['rdf':type -> deliveriesNS:'Parcel']. deliverNS:'P219'[deliveriesNS:containsParcelComponent -> deliverNS:'P341']. deliverNS:'P219'[deliveriesNS:containsParcelComponent -> deliverNS:'It3002']. deliverNS:'P219'[deliveriesNS:containsParcelComponent -> deliverNS:'It1002']. deliverNS:'P219'[deliveriesNS:hasParcelCard -> deliverNS:'C256']. } @deliveries { FORALL O, P, V O[P->V] <- O[P->V]@ontology(deliver:data). FORALL VDelivery, VSender, VRecipient, VCountry domesticDelivery(VDelivery, VSender, VRecipient, VCountry) <- VDelivery[deliveriesNS:sender -> VSender] AND VDelivery[deliveriesNS:recipient -> VRecipient] AND VSender[deliveriesNS:country -> VCountry] AND VRecipient[deliveriesNS:country -> VCountry]. FORALL VContact1, VContact2 neighbours(VContact1, VContact2) <- EXISTS VCity ( VContact1[deliveriesNS:city -> VCity] AND VContact2[deliveriesNS:city -> VCity]). FORALL VDelivery illegalDelivery(VDelivery) <- EXISTS VDeliveryComponent, VParcelComponent, VRecipient VDelivery[deliveriesNS:containsDeliveryComponent -> VDeliveryComponent[deliveriesNS:containsParcelComponent -> VParcelComponent[rdf:type -> deliveriesNS:WoodPallet]]; deliveriesNS:recipient -> VRecipient[deliveriesNS:country -> 'Australia']]. } //domesticDelivery in USA FORALL VDelivery, VSender, VSenderCountry, VSenderName, VSenderCity, VSenderStreet, VRecipient, VRecipientCountry, VRecipientName, VRecipientCity, VRecipientStreet <- domesticDelivery(VDelivery, VSender, VRecipient, 'USA')@deliveries AND VSender[deliveriesNS:country -> VSenderCountry]@deliveries AND VSender[deliveriesNS:city -> VSenderCity]@deliveries AND VSender[deliveriesNS:street -> VSenderStreet]@deliveries AND VSender[deliveriesNS:name -> VSenderName]@deliveries AND VRecipient[deliveriesNS:country -> VRecipientCountry]@deliveries AND VRecipient[deliveriesNS:city -> VRecipientCity]@deliveries AND VRecipient[deliveriesNS:street -> VRecipientStreet]@deliveries AND VRecipient[deliveriesNS:name -> VRecipientName]@deliveries. //neighbours FORALL VContact1, VName1, VCountry1, VCity1, VStreet1, VContact2, VName2, VCountry2, VCity2, VStreet2 <- neighbours(VContact1, VContact2)@deliveries AND VContact1[deliveriesNS:country -> VCountry1]@deliveries AND VContact1[deliveriesNS:city -> VCity1]@deliveries AND VContact1[deliveriesNS:street -> VStreet1]@deliveries AND VContact1[deliveriesNS:name -> VName1]@deliveries AND VContact2[deliveriesNS:country -> VCountry2]@deliveries AND VContact2[deliveriesNS:city -> VCity2]@deliveries AND VContact2[deliveriesNS:street -> VStreet2]@deliveries AND VContact2[deliveriesNS:name -> VName2]@deliveries. //illegalDelivery FORALL VDelivery <- illegalDelivery(VDelivery)@deliveries. //everything about J.Boldman FORALL VContact, VName, VCountry, VCity, VStreet <- VContact[deliveriesNS:name -> 'J.Boldman']@deliveries AND VContact[deliveriesNS:name -> VName]@deliveries AND VContact[deliveriesNS:country -> VCountry]@deliveries AND VContact[deliveriesNS:city -> VCity]@deliveries AND VContact[deliveriesNS:street -> VStreet]@deliveries.