Skip to content
Snippets Groups Projects
Commit e8d09be1 authored by Anjali Aggarwal's avatar Anjali Aggarwal
Browse files

pizza datafile

parent c67fdec1
No related branches found
No related tags found
1 merge request!14Resolve "pizza example"
Pipeline #118909 failed
owner: "Anjali"
type: raw
principalInvestigator: "Dr. Bunsen Honeydew"
scientificMetadata:
special_p08_parameter: "something"
GIXD:
# DiffractionMetadata:
SampleDetectorDistance:
value: 512
unit: mm
IncidenceAngle:
value: 0.1
unit: deg
sample:
temperature:
value: 15
unit: K
layer_structure: "Si/SiO/DIP"
# UserMetaData:
# someKey: should be fine
\ No newline at end of file
File added
#!/usr/bin/env python3
import PyTango
import sys
#add additional import
import pyscicat
import requests
from datetime import datetime
from random import randint
from pyscicat.client import encode_thumbnail, ScicatClient, ScicatCommError
from pyscicat.model import Proposal, Sample, RawDataset, DerivedDataset, DataFile, OrigDatablock, Attachment
from collections import defaultdict
from pprint import pprint
import sys, traceback, json
from demjson import decode
import ast
username=""
password=""
token=""
scicat = ScicatClient(base_url="https://scicat-rockit-p65-test1.desy.de/api/v3", username=username, password=password)
api_url="https://scicat-rockit-p65-test1.desy.de/api/v3/datasets"
headers= {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
f = open("./NamedPizza_dataset.json")
data = json.load(f)
data2=json.dumps(data)
response=requests.post(api_url, data=data2, headers=headers)
class SciCatClient:
def __init__(self, api_url, token):
self.api_url = api_url
self.token = token
self.headers = {
'Authorization': f'Bearer {self.token}',
'Content-Type': 'application/json'
}
def upload_dataset(self, dataset_metadata):
"""
Upload a dataset to SciCat.
Parameters:
- dataset_metadata (dict): Metadata of the dataset to be uploaded.
Returns:
- response (dict): The response from the SciCat API.
"""
url = f"{self.api_url}/Datasets"
response = requests.post(url, json=dataset_metadata, headers=self.headers)
if response.status_code == 200 or response.status_code == 201:
return response.json()
else:
response.raise_for_status()
if __name__ == "__main__":
SCICAT_API_URL = "http://scicat-rockit-p65-test1.desy.de/api/v3"
TOKEN = ""
dataset_metadata = {
"principalInvestigator": "Dr. John Doe",
"owner": "Institution Name",
"contactEmail": "johndoe@example.com",
"sourceFolder": "/path/to/source",
# "pid": "sdfsdfkjsdhfsd",
"size": 123456,
"creationLocation": "magrathea",
"creationTime": "2024-06-12T12:00:00Z",
"type": "raw",
"instrumentId": "Instrument001",
"proposalId": "Proposal001",
"dataFormat": "HDF5",
"isPublished": False,
"ownerGroup": "hasylab",
"accessGroups": ["Group001"],
"description": "Description of the dataset",
"keywords": ["example", "data", "keywords"],
"license": "CC BY 4.0"
}
client = SciCatClient(SCICAT_API_URL, TOKEN)
try:
response = client.upload_dataset(dataset_metadata)
print("Dataset uploaded successfully:", response)
except requests.exceptions.HTTPError as err:
print("Error uploading dataset:", err)
name: pizza
description: pizza
id: http://www.co-ode.org/ontologies/pizza
imports:
- linkml:types
id: http://example.org/pizza-schema
name: PizzaSchema
description: A schema for validating pizza data
prefixes:
linkml: https://w3id.org/linkml/
pizza: https://w3id.org/None/
default_prefix: pizza
slots:
hasBase:
is_a: hasIngredient
slot_uri: pizza:hasBase
multivalued: true
range: PizzaBase
hasCountryOfOrigin:
slot_uri: pizza:hasCountryOfOrigin
multivalued: true
hasIngredient:
comments:
- NB Transitive - the ingredients of ingredients are ingredients of the whole@en
slot_uri: pizza:hasIngredient
multivalued: true
range: Food
hasSpiciness:
comments:
- A property created to be used with the ValuePartition - Spiciness.@en
slot_uri: pizza:hasSpiciness
multivalued: true
range: Spiciness
hasTopping:
comments:
- Note that hasTopping is inverse functional because isToppingOf is functional@en
is_a: hasIngredient
slot_uri: pizza:hasTopping
multivalued: true
range: PizzaTopping
isBaseOf:
is_a: isIngredientOf
slot_uri: pizza:isBaseOf
multivalued: true
isIngredientOf:
comments:
- The inverse property tree to hasIngredient - all subproperties and attributes
of the properties should reflect those under hasIngredient.@en
slot_uri: pizza:isIngredientOf
multivalued: true
isToppingOf:
comments:
- Any given instance of topping should only be added to a single pizza (no cheap
half-measures on our pizzas)@en
is_a: isIngredientOf
slot_uri: pizza:isToppingOf
multivalued: true
description:
slot_uri: dc:description
multivalued: true
title:
slot_uri: dc:title
multivalued: true
contributor:
slot_uri: terms:contributor
multivalued: true
license:
slot_uri: terms:license
multivalued: true
provenance:
slot_uri: terms:provenance
multivalued: true
altLabel:
slot_uri: skos:altLabel
multivalued: true
definition:
slot_uri: skos:definition
multivalued: true
prefLabel:
slot_uri: skos:prefLabel
multivalued: true
ex: http://example.org/
default_prefix: ex
# types:
# SpicinessLevel:
# base: str
# description: A level of spiciness for pizza toppings
enums:
SpicinessLevel:
permissible_values:
Hot:
description: Hot level of spiciness
Medium:
description: Medium level of spiciness
Mild:
description: Mild level of spiciness
classes:
American:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:American
AmericanHot:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:AmericanHot
AnchoviesTopping:
is_a: FishTopping
class_uri: pizza:AnchoviesTopping
ArtichokeTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:ArtichokeTopping
AsparagusTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:AsparagusTopping
Cajun:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Cajun
CajunSpiceTopping:
is_a: HerbSpiceTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:CajunSpiceTopping
CaperTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:CaperTopping
Capricciosa:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Capricciosa
Caprina:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Caprina
CheeseTopping:
is_a: PizzaTopping
class_uri: pizza:CheeseTopping
CheeseyPizza:
class_uri: pizza:CheeseyPizza
CheeseyVegetableTopping:
comments:
- This class will be unsatisfiable. This is because we have given it 2 disjoint
parents, which means it could never have any instances (as nothing can be both
a CheeseTopping and a VegetableTopping). NB Called ProbeInconsistentTopping
in the ProtegeOWL Tutorial.@en
is_a: VegetableTopping
mixins:
- CheeseTopping
class_uri: pizza:CheeseyVegetableTopping
ChickenTopping:
is_a: MeatTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:ChickenTopping
Country:
comments:
- A class that is equivalent to the set of individuals that are described in the
enumeration - ie Countries can only be either America, England, France, Germany
or Italy and nothing else. Note that these individuals have been asserted to
be allDifferent from each other.@en
class_uri: pizza:Country
DeepPanBase:
is_a: PizzaBase
class_uri: pizza:DeepPanBase
DomainConcept:
class_uri: pizza:DomainConcept
Fiorentina:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Fiorentina
FishTopping:
is_a: PizzaTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:FishTopping
Food:
is_a: DomainConcept
slots:
- hasIngredient
class_uri: pizza:Food
FourCheesesTopping:
is_a: CheeseTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:FourCheesesTopping
FourSeasons:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:FourSeasons
FruitTopping:
is_a: PizzaTopping
class_uri: pizza:FruitTopping
FruttiDiMare:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:FruttiDiMare
GarlicTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:GarlicTopping
Giardiniera:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Giardiniera
GoatsCheeseTopping:
is_a: CheeseTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:GoatsCheeseTopping
GorgonzolaTopping:
is_a: CheeseTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:GorgonzolaTopping
GreenPepperTopping:
is_a: PepperTopping
class_uri: pizza:GreenPepperTopping
HamTopping:
is_a: MeatTopping
class_uri: pizza:HamTopping
HerbSpiceTopping:
is_a: PizzaTopping
class_uri: pizza:HerbSpiceTopping
Hot:
is_a: Spiciness
class_uri: pizza:Hot
HotGreenPepperTopping:
is_a: GreenPepperTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:HotGreenPepperTopping
HotSpicedBeefTopping:
is_a: MeatTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:HotSpicedBeefTopping
IceCream:
comments:
- A class to demonstrate mistakes made with setting a property domain. The property
hasTopping has a domain of Pizza. This means that the reasoner can infer that
all individuals using the hasTopping property must be of type Pizza. Because
of the restriction on this class, all members of IceCream must use the hasTopping
property, and therefore must also be members of Pizza. However, Pizza and IceCream
are disjoint, so this causes an inconsistency. If they were not disjoint, IceCream
would be inferred to be a subclass of Pizza.@en
is_a: Food
slot_usage:
hasTopping:
required: true
class_uri: pizza:IceCream
InterestingPizza:
class_uri: pizza:InterestingPizza
JalapenoPepperTopping:
is_a: PepperTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:JalapenoPepperTopping
LaReine:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:LaReine
LeekTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:LeekTopping
Margherita:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Margherita
MeatTopping:
is_a: PizzaTopping
class_uri: pizza:MeatTopping
MeatyPizza:
class_uri: pizza:MeatyPizza
Medium:
is_a: Spiciness
class_uri: pizza:Medium
Mild:
is_a: Spiciness
class_uri: pizza:Mild
MixedSeafoodTopping:
is_a: FishTopping
class_uri: pizza:MixedSeafoodTopping
MozzarellaTopping:
is_a: CheeseTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:MozzarellaTopping
Mushroom:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Mushroom
MushroomTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:MushroomTopping
NamedPizza:
comments:
- A pizza that can be found on a pizza menu@en
is_a: Pizza
class_uri: pizza:NamedPizza
Napoletana:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Napoletana
NonVegetarianPizza:
class_uri: pizza:NonVegetarianPizza
NutTopping:
is_a: PizzaTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:NutTopping
OliveTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:OliveTopping
OnionTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:OnionTopping
ParmaHamTopping:
is_a: HamTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:ParmaHamTopping
Parmense:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Parmense
ParmesanTopping:
is_a: CheeseTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:ParmesanTopping
PeperonataTopping:
is_a: PepperTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:PeperonataTopping
PeperoniSausageTopping:
is_a: MeatTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:PeperoniSausageTopping
PepperTopping:
is_a: VegetableTopping
class_uri: pizza:PepperTopping
PetitPoisTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:PetitPoisTopping
PineKernels:
is_a: NutTopping
class_uri: pizza:PineKernels
Pizza:
is_a: Food
slots:
- hasBase
- hasTopping
slot_usage:
hasBase:
required: true
class_uri: pizza:Pizza
attributes:
id:
identifier: true
range: string
title:
range: string
PizzaBase:
is_a: Food
class_uri: pizza:PizzaBase
attributes:
id:
identifier: true
range: string
title:
range: string
PizzaTopping:
is_a: Food
class_uri: pizza:PizzaTopping
PolloAdAstra:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:PolloAdAstra
PrawnsTopping:
is_a: FishTopping
class_uri: pizza:PrawnsTopping
PrinceCarlo:
is_a: NamedPizza
slot_usage:
hasTopping:
attributes:
id:
identifier: true
range: string
title:
range: string
hasSpiciness:
inlined_as_list: true
range: SpicinessLevel
multivalued: true
required: false
Pizza:
attributes:
id:
identifier: true
range: string
required: true
class_uri: pizza:PrinceCarlo
QuattroFormaggi:
is_a: NamedPizza
slot_usage:
hasTopping:
title:
range: string
required: true
class_uri: pizza:QuattroFormaggi
RealItalianPizza:
slot_usage:
description:
range: string
hasBase:
range: ThinAndCrispyBase
class_uri: pizza:RealItalianPizza
RedOnionTopping:
is_a: OnionTopping
class_uri: pizza:RedOnionTopping
RocketTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:RocketTopping
Rosa:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Rosa
RosemaryTopping:
is_a: HerbSpiceTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:RosemaryTopping
SauceTopping:
is_a: PizzaTopping
class_uri: pizza:SauceTopping
Siciliana:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Siciliana
SlicedTomatoTopping:
is_a: TomatoTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:SlicedTomatoTopping
SloppyGiuseppe:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:SloppyGiuseppe
Soho:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Soho
Spiciness:
comments:
- A ValuePartition that describes only values from Hot, Medium or Mild. NB Subclasses
can themselves be divided up into further partitions.@en
is_a: ValuePartition
class_uri: pizza:Spiciness
SpicyPizza:
class_uri: pizza:SpicyPizza
SpicyPizzaEquivalent:
comments:
- 'An alternative definition for the SpicyPizza which does away with needing a
definition of SpicyTopping and uses a slightly more complicated restriction:
Pizzas that have at least one topping that is both a PizzaTopping and has spiciness
hot are members of this class.@en'
class_uri: pizza:SpicyPizzaEquivalent
SpicyTopping:
class_uri: pizza:SpicyTopping
SpinachTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:SpinachTopping
SultanaTopping:
is_a: FruitTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:SultanaTopping
SundriedTomatoTopping:
is_a: TomatoTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:SundriedTomatoTopping
SweetPepperTopping:
is_a: PepperTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:SweetPepperTopping
ThinAndCrispyBase:
is_a: PizzaBase
class_uri: pizza:ThinAndCrispyBase
ThinAndCrispyPizza:
class_uri: pizza:ThinAndCrispyPizza
TobascoPepperSauce:
is_a: SauceTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:TobascoPepperSauce
TomatoTopping:
is_a: VegetableTopping
slot_usage:
hasSpiciness:
required: true
class_uri: pizza:TomatoTopping
UnclosedPizza:
comments:
- An unclosed Pizza cannot be inferred to be either a VegetarianPizza or a NonVegetarianPizza,
because it might have other toppings.
is_a: Pizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:UnclosedPizza
ValuePartition:
comments:
- A ValuePartition is a pattern that describes a restricted set of classes from
which a property can be associated. The parent class is used in restrictions,
and the covering axiom means that only members of the subclasses may be used
as values. The possible subclasses cannot be extended without updating the ValuePartition
class.
class_uri: pizza:ValuePartition
VegetableTopping:
is_a: PizzaTopping
class_uri: pizza:VegetableTopping
VegetarianPizza:
class_uri: pizza:VegetarianPizza
VegetarianPizzaEquivalent1:
comments:
- Any pizza that only has vegetarian toppings or no toppings is a VegetarianPizzaEquiv1.
Should be inferred to be equivalent to VegetarianPizzaEquiv2. Not equivalent
to VegetarianPizza because PizzaTopping is not covering@en
class_uri: pizza:VegetarianPizzaEquivalent1
VegetarianPizzaEquivalent2:
comments:
- An alternative to VegetarianPizzaEquiv1 that does not require a definition of
VegetarianTopping. Perhaps more difficult to maintain. Not equivalent to VegetarianPizza@en
class_uri: pizza:VegetarianPizzaEquivalent2
VegetarianTopping:
comments:
- An example of a covering axiom. VegetarianTopping is equivalent to the union
of all toppings in the given axiom. VegetarianToppings can only be Cheese or
Vegetable or....etc.@en
class_uri: pizza:VegetarianTopping
Veneziana:
is_a: NamedPizza
slot_usage:
hasTopping:
required: true
class_uri: pizza:Veneziana
inlined_as_list: true
range: PizzaBase
multivalued: true
hasTopping:
inlined_as_list: true
range: PizzaTopping
multivalued: true
hasCountryOfOrigin:
inlined_as_list: true
range: Country
multivalued: true
PizzaCollection:
attributes:
pizzas:
inlined_as_list: true
range: Pizza
multivalued: true
CountryCollection:
attributes:
countries:
range: Country
multivalued: true
PizzaBaseCollection:
attributes:
pizza_bases:
range: PizzaBase
multivalued: true
PizzaToppingCollection:
attributes:
pizza_toppings:
range: PizzaTopping
multivalued: true
SpicinessLevelCollection:
attributes:
spiciness_levels:
range: SpicinessLevel
multivalued: true
Root:
attributes:
pizzas:
range: PizzaCollection
countries:
range: CountryCollection
pizza_bases:
range: PizzaBaseCollection
pizza_toppings:
range: PizzaToppingCollection
spiciness_levels:
range: SpicinessLevelCollection
pizzas:
- id: "pizza1"
title: "Margherita"
description: "Classic Margherita pizza with tomato, mozzarella, and basil."
hasBase:
- id: "base1"
title: "Thin crust"
hasTopping:
- id: "topping1"
title: "Mozzarella"
hasSpiciness: ['Hot',Medium,'Mild']
- id: "topping2"
title: "Tomato"
hasSpiciness: []
hasCountryOfOrigin:
- id: "country1"
title: "Italy"
- id: "pizza2"
title: "Fungi"
description: "Classic Fungi pizza with tomato, mozzarella, and Fungi."
hasBase:
- id: "base1"
title: "Thin crust"
hasTopping:
- id: "topping1"
title: "Mozzarella"
hasSpiciness: ['Hot',Medium,'Mild']
- id: "topping2"
title: "Tomato"
hasSpiciness: []
hasCountryOfOrigin:
- id: "country1"
title: "Italy"
\ No newline at end of file
from linkml.validator import validate
instance ={'pizzas' :
[{"id": "1",
"title": "Margherita",
"description": "Classic pizza with tomato sauce and mozzarella cheese.",
"hasBase": ["ThinAndCrispyBase"],
"hasTopping": ["MozzarellaTopping", "SlicedTomatoTopping"],
"hasCountryOfOrigin": ["Italy"]}],
}
report = validate(instance, "pizza.yaml", "PizzaCollection")
if not report.results:
print('The instance is valid!')
else:
for result in report.results:
print(result.message)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment