diff --git a/src/lab/labop/__init__.py b/src/lab/labop/__init__.py new file mode 100644 index 0000000..25517db --- /dev/null +++ b/src/lab/labop/__init__.py @@ -0,0 +1 @@ +"""Pinned schemas and primitive definitions for LabOP interchange.""" diff --git a/src/lab/labop/resources/LICENSE.txt b/src/lab/labop/resources/LICENSE.txt new file mode 100644 index 0000000..6a137d7 --- /dev/null +++ b/src/lab/labop/resources/LICENSE.txt @@ -0,0 +1,7 @@ +Copyright 2022 Smart Information Flow Technologies and Raytheon BBN + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/lab/labop/resources/lab.ttl b/src/lab/labop/resources/lab.ttl new file mode 100644 index 0000000..7b5378b --- /dev/null +++ b/src/lab/labop/resources/lab.ttl @@ -0,0 +1,61 @@ +@prefix lab: . +@prefix labop: . +@prefix sbol: . +@prefix om: . +@prefix owl: . +@prefix rdfs: . +@prefix xsd: . + + a owl:Ontology ; + rdfs:comment "Lab's explicit parameter and material annotations for static LabOP interchange." . + +lab:ThermalProfile a owl:Class ; + rdfs:subClassOf sbol:Identified, + [ a owl:Restriction ; owl:onProperty lab:hold ; owl:allValuesFrom lab:ThermalHold ], + [ a owl:Restriction ; owl:onProperty lab:hold ; owl:minCardinality "1"^^xsd:nonNegativeInteger ] . +lab:ThermalHold a owl:Class ; + rdfs:subClassOf sbol:Identified, + [ a owl:Restriction ; owl:onProperty lab:temperature ; owl:allValuesFrom om:Measure ], + [ a owl:Restriction ; owl:onProperty lab:temperature ; owl:minCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; owl:onProperty lab:temperature ; owl:maxCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; owl:onProperty lab:duration ; owl:allValuesFrom om:Measure ], + [ a owl:Restriction ; owl:onProperty lab:duration ; owl:minCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; owl:onProperty lab:duration ; owl:maxCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; owl:onProperty lab:index ; owl:allValuesFrom xsd:integer ], + [ a owl:Restriction ; owl:onProperty lab:index ; owl:minCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; owl:onProperty lab:index ; owl:maxCardinality "1"^^xsd:nonNegativeInteger ] . +lab:InitialMaterial a owl:Class ; rdfs:subClassOf sbol:Identified . +lab:SampleAssertion a owl:Class ; rdfs:subClassOf sbol:Identified . + +lab:itemCount a owl:DatatypeProperty ; rdfs:label "item_count" ; + rdfs:domain lab:InitialMaterial ; rdfs:range xsd:integer . +lab:sampleCount a owl:DatatypeProperty ; rdfs:label "sample_count" ; + rdfs:domain lab:SampleAssertion ; rdfs:range xsd:integer . +lab:materialForm a owl:ObjectProperty ; rdfs:label "material_form" ; + rdfs:domain lab:SampleAssertion . +lab:sampleRole a owl:DatatypeProperty ; rdfs:label "sample_role" ; + rdfs:domain lab:SampleAssertion ; rdfs:range xsd:string . + +lab:hold a owl:ObjectProperty ; rdfs:label "holds" ; + rdfs:domain lab:ThermalProfile ; rdfs:range lab:ThermalHold ; + rdfs:subPropertyOf sbol:directlyComprises . +lab:temperature a owl:ObjectProperty ; rdfs:label "temperature" ; + rdfs:domain lab:ThermalHold ; rdfs:range om:Measure ; + rdfs:subPropertyOf sbol:directlyComprises . +lab:duration a owl:ObjectProperty ; rdfs:label "duration" ; + rdfs:domain lab:ThermalHold ; rdfs:range om:Measure ; + rdfs:subPropertyOf sbol:directlyComprises . +lab:index a owl:DatatypeProperty ; rdfs:label "index" ; + rdfs:domain lab:ThermalHold ; rdfs:range xsd:integer . +lab:initialMaterial a owl:ObjectProperty ; rdfs:label "initial_materials" ; + rdfs:domain labop:SampleArray ; rdfs:range lab:InitialMaterial ; + rdfs:subPropertyOf sbol:directlyComprises . +lab:plannedSample a owl:ObjectProperty ; rdfs:label "planned_samples" ; + rdfs:domain labop:SampleArray ; rdfs:range lab:SampleAssertion ; + rdfs:subPropertyOf sbol:directlyComprises . +lab:volume a owl:ObjectProperty ; rdfs:label "volume" ; + rdfs:domain lab:InitialMaterial ; rdfs:range om:Measure ; + rdfs:subPropertyOf sbol:directlyComprises . +lab:capacity a owl:ObjectProperty ; rdfs:label "capacity" ; + rdfs:domain labop:ContainerSpec ; rdfs:range om:Measure ; + rdfs:subPropertyOf sbol:directlyComprises . diff --git a/src/lab/labop/resources/labop.ttl b/src/lab/labop/resources/labop.ttl new file mode 100644 index 0000000..d29417d --- /dev/null +++ b/src/lab/labop/resources/labop.ttl @@ -0,0 +1,809 @@ +@prefix om: . +@prefix owl: . +@prefix labop: . +@prefix prov: . +@prefix rdfs: . +@prefix sbol: . +@prefix uml: . +@prefix xsd: . + + a owl:Ontology ; + rdfs:comment "Laboratory Open Procotol Language (LabOP) ontology." ; + owl:imports , + , + , + ; + owl:versionInfo "0.3" . + +labop:Primitive a owl:Class ; + rdfs:comment """A Primitive describes a library function that acts as a basic ``building block'' for a Protocol. + For example, a Primitive could describe pipetting, measuring absorbance in a plate reader, or centrifuging. + At present this class adds no additional information over uml:Behavior, but may in the future.""" ; + owl:disjointWith uml:Activity ; + rdfs:subClassOf uml:Behavior . + +xsd:anySimpleType a rdfs:Datatype . + +owl:maxCardinality a owl:AnnotationProperty . + +owl:minCardinality a owl:AnnotationProperty . + +labop:CallBehaviorExecution a owl:Class ; + rdfs:comment """A CallBehaviorExecution extends ActivityNodeExecution by adding a pointer to a BehaviorExecution + record for the uml:Behavior that is being executed. + + For a primitive action (e.g., measuring absorbance on a plate reader), this is a plain BehaviorExecution, + while for calling a Protocol as a sub-routine (e.g., to run a stage of an Type IIS assembly), this would be a + ProtocolExecution.""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:call ], + [ a owl:Restriction ; + owl:allValuesFrom labop:BehaviorExecution ; + owl:onProperty labop:call ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:call ], + labop:ActivityNodeExecution . + +labop:SampleMask a owl:Class ; + rdfs:comment """A SampleMask is a subset of a SampleCollection. The subset of samples to be included is defined + by an array of Boolean values, where true values indicate that a sample is included and false values indicate + that it is excluded. + + The dimensions of the mask MUST be identical to the dimensions of the source SampleCollection. For this purpose, + the dimensions of a masked subset are not reduced, but remain the same as the original SampleArray. This allows + masks to be composed, such that SampleMask(source=SampleMask(source=X,mask=mask1),mask=mask2) is equivalent to + SampleMask(source=X,mask=mask1 AND mask2). Note that this implies masks are commutative and idempotent.""" ; + rdfs:label "SampleMask" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:mask ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:source ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:mask ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:string ; + owl:onProperty labop:mask ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleCollection ; + owl:onProperty labop:source ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:source ], + labop:SampleCollection . + +labop:consumedMaterial a owl:ObjectProperty ; + rdfs:label "consumed_material" ; + rdfs:comment """This property is used to record the noteworthy consumables used during the execution of the + Behavior. For example, a cell culture protocols will consume various reagents and samples of cells. Materials + with the same specification SHOULD be consolidated, such that the list of materials SHOULD NOT contain two + materials with the same specification. + + For example, consuming 5.0 mL of PBS and 2.0 mL of PBS should be recorded as consuming 7.0 mL of PBS. + Complex materials, however, MAY contain the same material more than once in their substructure. + For example, M9 media contains glucose, but it would not be necessary to consolidate the glucose in M9 media + with additional glucose that was added as a supplement, since that would change the definition of the media.""" ; + rdfs:domain labop:BehaviorExecution ; + rdfs:range labop:Material ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:execution a owl:ObjectProperty ; + rdfs:label "executions" ; + rdfs:comment """Each instance of this property links to an ActivityNodeExecution that records one + firing of a uml:ActivityNode during the execution of its containing Protocol""" ; + rdfs:domain labop:ProtocolExecution ; + rdfs:range labop:ActivityNodeExecution ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:flow a owl:ObjectProperty ; + rdfs:label "flows" ; + rdfs:comment """Each instance of this property links to an ActivityEdgeFlow that records one movement of a UML + token along a uml:ActivityEdge during the execution of its containing Protocol""" ; + rdfs:domain labop:ProtocolExecution ; + rdfs:range labop:ActivityEdgeFlow ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:incomingFlow a owl:ObjectProperty ; + rdfs:label "incoming_flows" ; + rdfs:comment """This property is used to indicate an ActivityEdgeFlow that delivered a token consumed during + the execution of the uml:ActivityNode.""" ; + rdfs:domain labop:ActivityNodeExecution ; + rdfs:range labop:ActivityEdgeFlow . + +labop:parameterValuePair a owl:ObjectProperty ; + rdfs:label "parameter_values" ; + rdfs:comment """The parameterValuePair property is used to record the value that was associated with each + uml:Parameter for the uml:Behavior when it was executed, by means of a ParameterValue object. + Any uml:Parameter that is not listed is assumed to have had no value assigned. Conversely, every non-optional + uml:Parameter for the uml:Behavior MUST have an associated parameter value. + Finally, note that this applies both to input uml:Parameter objects, whose value is set before execution begins, + and to output uml:Parameter objects, whose value is set by the time execution ends. + + TODO: are multiple values allowed, or do those need to be passed as list/set types? + """ ; + rdfs:domain labop:BehaviorExecution ; + rdfs:range labop:ParameterValue ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:ContainerSpec a owl:Class ; + rdfs:comment """A ContainerSpec is used to indicate the type of container to be used for a SampleArray, e.g., + a standard 96-well flat-bottom transparent plate. + + TODO: determine if we want to use this format or modify it in some way.""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:queryString ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty labop:queryString ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:prefixMap ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty labop:prefixMap ], + sbol:TopLevel . + +labop:Protocol a owl:Class ; + rdfs:comment """A Protocol describes how to carry out some form of laboratory or research process. + For example, a Protocol could describe DNA miniprep, Golden-Gate assembly, a cell culture experiment. + At present this class adds no additional information over uml:Activity, but may in the future.""" ; + rdfs:subClassOf uml:Activity . + +labop:SampleArray a owl:Class ; + rdfs:label "SampleArray" ; + rdfs:comment """A SampleArray specifies an n-dimensional rectangular array of samples, all stored in the same + type of container. For example, a SampleCollection might describe a set of 10 cell cultures growing in + 96-well plate cells, or a set of 6 streaked agar plates, or a single 500 mL flask filled with media. + + Wells may start with material in them, in which case the initial_contents property should contain a URI to a + description of the sample, or empty, in which case the initial_contents should be null. + + Note that this is a logical array, and does not necessarily indicate the actual layout of the samples in space. + For example, a 2x4 array of samples in 96-well plate wells might end up being laid out as a 2x4 array in wells + A1 to B4 or as a 2x4 array in wells G5 to H8 or as an 8x1 column in wells A1 to H1, or even as eight wells + scattered arbitrarily around the plate according to an anti-bias quality control schema. + + This also allows for higher-dimensional arrays where each dimension represents an experimental factor. + For example, an experiment testing four factors with 3, 3, 4, and 5 values per factor, for a total of 180 + combinations, could be represented as a 4-dimensional sample array of 96-well plate wells, and then end up + laid out over two plates. + + TODO: the format of the data values needs to be compatible with the array format chosen for the + SampleArray initial_contents property. In this case, however, we also need to consider how we want to support + multiple values for each sample (e.g., measurement of both fluorescence and absorbance in a plate reader), + as well as links to more complex data (e.g., results of flow cytometry or omics for each sample)""" ; + rdfs:subClassOf [ a owl:Restriction ; + rdfs:comment "N-dimensional array of URI for specification or nulls" ; + owl:allValuesFrom xsd:string ; + owl:onProperty labop:initial_contents ], + [ a owl:Restriction ; + rdfs:comment "Type of container used for storing the samples. The size and dimension may not match that of the array: it is up to execution to lay out the array in one or more containers" ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:containerType ], + [ a owl:Restriction ; + rdfs:comment "Type of container used for storing the samples. The size and dimension may not match that of the array: it is up to execution to lay out the array in one or more containers" ; + owl:allValuesFrom labop:ContainerSpec ; + owl:onProperty labop:containerType ], + [ a owl:Restriction ; + rdfs:comment "Type of container used for storing the samples. The size and dimension may not match that of the array: it is up to execution to lay out the array in one or more containers" ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:containerType ], + [ a owl:Restriction ; + rdfs:comment "N-dimensional array of URI for specification or nulls" ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:initial_contents ], + [ a owl:Restriction ; + rdfs:comment "N-dimensional array of URI for specification or nulls" ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:initial_contents ], + labop:SampleCollection . + +labop:SampleData a owl:Class ; + rdfs:comment """The SampleData class is used to associate a set of data with a collection of samples. + This is typically used to capture measurements, e.g., an array of absorbance measurements collected by + a plate reader. Using this data structure allows the values in a dataframe to be automatically linked to + the descriptions of the samples that the data describes, which is critical for data analysis. + + The dimensions of the sampleDataValues MUST equal the dimensions of the SampleCollection linked with fromSamples. + + TODO: the format of the data values needs to be compatible with the array format chosen for the + SampleArray initial_contents property. In this case, however, we also need to consider how we want to support + multiple values for each sample (e.g., measurement of both fluorescence and absorbance in a plate reader), + as well as links to more complex data (e.g., results of flow cytometry or omics for each sample)""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:fromSamples ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleDataValues ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:string ; + owl:onProperty labop:sampleDataValues ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleDataValues ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:fromSamples ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleCollection ; + owl:onProperty labop:fromSamples ], + sbol:Identified . + +labop:SampleMetadata a owl:Class ; + rdfs:comment """The SampleMetadata class is used to associate a set of descriptions with a collection of samples. + This is typically used to capture a model of the important properties of each sample, e.g., the media, cells, + and inducers that are transferred into each well of a plate at the beginning of the experiment. These + descriptions are then associated with the data values in a SampleData to make a Dataset ready for analysis. + + The dimensions of the sampleDescriptions MUST equal the dimensions of the SampleCollection linked with forSamples. + + TODO: the format of the data values needs to be compatible with the array format chosen for the + SampleArray initial_contents property.""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:forSamples ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleDescriptions ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:string ; + owl:onProperty labop:sampleDescriptions ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleDescriptions ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:forSamples ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleCollection ; + owl:onProperty labop:forSamples ], + sbol:Identified . + +labop:Dataset a owl:Class ; + rdfs:comment """The Dataset class is used to associate a set of data and metadata for a collection of samples, + thereby producing a collection of data and attributes ready for analysis. + + The fromSamples property of the data and the forSamples property of the metadata must be the same SampleCollection + """ ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:data ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleData ; + owl:onProperty labop:data ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleMetadata ; + owl:onProperty labop:metadata ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleMetadata ; + owl:onProperty labop:linkedMetadata ], + [ a owl:Restriction ; + owl:allValuesFrom labop:Dataset ; + owl:onProperty labop:dataset ], + sbol:Identified . + +labop:SampleMap a owl:Class ; + rdfs:comment """The SampleMap class is used to associate SampleCollections to SampleCollections. It references + the ActivityNode objects that are sources or destinations.""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleMapValues ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:string ; + owl:onProperty labop:sampleMapValues ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleMapValues ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleMapSources ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleCollection ; + owl:onProperty labop:sampleMapSources ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:sampleMapTargets ], + [ a owl:Restriction ; + owl:allValuesFrom labop:SampleCollection ; + owl:onProperty labop:sampleMapTargets ], + sbol:Identified . + +labop:sampleMapSources a owl:ObjectProperty ; + rdfs:label "sources" ; + rdfs:comment """The sources property indicates the SampleCollection that is a source in a SampleMap.""" ; + rdfs:domain labop:SampleMap ; + rdfs:range labop:SampleCollection . + +labop:sampleMapTargets a owl:ObjectProperty ; + rdfs:label "targets" ; + rdfs:comment """The targets property indicates the SampleCollection that is a target in a SampleMap.""" ; + rdfs:domain labop:SampleMap ; + rdfs:range labop:SampleCollection . + +labop:sampleMapValues a owl:DatatypeProperty ; + rdfs:comment """The sampleMapValues are an encoded JSON representation of an XArray Dataset. + The XArray Dataset represents fan-in or fan-out maps so that the elements of the Dataset + are source-to-destination XArrays (fan-in) or destination-to-source XArrays (fan-out). + """; + rdfs:domain labop:SampleMap ; + rdfs:range xsd:string ; + rdfs:label "values" . + +labop:ProtocolExecution a owl:Class ; + rdfs:comment """A ProtocolExecution expands on the information in a BehaviorExecution by including records for + the nodes and edges defining the Protocol's behavior as a uml:Activity. Specifically, the execution property + is used to record each firing of a uml:ActivityNode and the flow property is used to record each time a token + moves along a uml:ActivityEdge. + Otherwise, a ProtocolExecution is used exactly the same way as its parent class BehaviorExecution. + + TODO: consider dropping the protocol field as redundant with use prov:type field in its parent""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:protocol ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:protocol ], + [ a owl:Restriction ; + owl:allValuesFrom labop:Protocol ; + owl:onProperty labop:protocol ], + [ a owl:Restriction ; + owl:allValuesFrom labop:ActivityNodeExecution ; + owl:onProperty labop:execution ], + [ a owl:Restriction ; + owl:allValuesFrom labop:ActivityEdgeFlow ; + owl:onProperty labop:flow ], + [ a owl:Restriction ; + owl:allValuesFrom labop:edge ; + owl:onProperty labop:activityCallEdge ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityNode ; + owl:onProperty labop:activityCallNode ], + labop:BehaviorExecution . + +labop:activityCallEdge a owl:ObjectProperty ; + rdfs:label "activity_call_edge" ; + rdfs:comment """ActivityEdge list for CallBehaviorAction to Activity invocations""" ; + rdfs:domain labop:ProtocolExecution ; + rdfs:range labop:edge ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:activityCallNode a owl:ObjectProperty ; + rdfs:label "activity_call_node" ; + rdfs:comment """ActivityNode list for CallBehaviorAction to Activity invocations""" ; + rdfs:domain labop:ProtocolExecution ; + rdfs:range uml:ActivityNode ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:amount a owl:ObjectProperty ; + rdfs:label "amount" ; + rdfs:comment """The amount property of a Material is used to indicate the quantity of material used. + For example, 2.5 mL (referring to a fluid) or 3 (with unit "number", referring to a group of microplates)""" ; + rdfs:domain labop:Material ; + rdfs:range om:Measure ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:call a owl:ObjectProperty ; + rdfs:label "call" ; + rdfs:comment "This property indicates the BehaviorExecution record for the uml:Behavior that was called." ; + rdfs:domain labop:CallBehaviorExecution ; + rdfs:range labop:BehaviorExecution . + +labop:completedNormally a owl:DatatypeProperty ; + rdfs:label "completed_normally" ; + rdfs:comment """This boolean should be set to true if the Behavior completed normally and false if there + was some exception condition. At present, no further information is being encoded about exceptions, but this + is an extension that is anticipated for the future.""" ; + rdfs:domain labop:BehaviorExecution ; + rdfs:range xsd:boolean . + +labop:containerType a owl:ObjectProperty ; + rdfs:label "container_type" ; + rdfs:comment "" ; + rdfs:domain labop:SampleArray ; + rdfs:range labop:ContainerSpec . + +labop:initial_contents a owl:DatatypeProperty ; + rdfs:label "initial_contents" ; + rdfs:comment """Description of the initial contents of a SampleArray. + TODO: need to decide whether this is a multi-valued property with associated array coordinates or a + single-valued property with an array value. + Currently set to string as a "dummy" value that can serialize anything.""" ; + rdfs:domain labop:SampleArray ; + rdfs:range xsd:string . + +labop:edge a owl:ObjectProperty ; + rdfs:label "edge" ; + rdfs:comment "This property is used to indicate the uml:ActivityEdge down which the token moved." ; + rdfs:domain labop:ActivityEdgeFlow ; + rdfs:range uml:ActivityEdge . + +labop:edgeValue a owl:ObjectProperty ; + rdfs:label "value" ; + rdfs:comment "This property is used to indicate the value of a token that moved on a uml:ObjectFlow edge." ; + rdfs:domain labop:ActivityEdgeFlow ; + rdfs:range uml:LiteralSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:sampleDataValues a owl:DatatypeProperty ; + rdfs:comment """The sampleDataValues are an array of data values, one for each sample, format to be determined."""; + rdfs:domain labop:SampleData ; + rdfs:range xsd:string ; # TODO: consider https://github.com/SynBioDex/sbol_factory/issues/7 + rdfs:label "values" . + +labop:fromSamples a owl:ObjectProperty ; + rdfs:label "from_samples" ; + rdfs:comment """The fromSamples property indicates the SampleCollection from which the data were collected.""" ; + rdfs:domain labop:SampleData ; + rdfs:range labop:SampleCollection . + +labop:sampleDescriptions a owl:DatatypeProperty ; + rdfs:comment """The sampleDescriptions are an array of SBOL Implementations, one for each sample, array format to be determined."""; + rdfs:domain labop:SampleMetadata ; + rdfs:range xsd:string ; # TODO: consider https://github.com/SynBioDex/sbol_factory/issues/7 + rdfs:label "descriptions" . + +labop:forSamples a owl:ObjectProperty ; + rdfs:label "for_samples" ; + rdfs:comment """The forSamples property indicates the SampleCollection that are described by a SampleMetadata.""" ; + rdfs:domain labop:SampleMetadata ; + rdfs:range labop:SampleCollection . + +labop:data a owl:ObjectProperty ; + rdfs:label "data" ; + rdfs:comment """The data property indicates the SampleData used in a Dataset.""" ; + rdfs:domain labop:Dataset ; + rdfs:range labop:SampleData ; + rdfs:subPropertyOf sbol:directlyComprises . + + +labop:metadata a owl:ObjectProperty ; + rdfs:label "metadata" ; + rdfs:comment """The metadata property indicates the SampleMetadata used in a Dataset.""" ; + rdfs:domain labop:Dataset ; + rdfs:range labop:SampleMetadata ; + rdfs:subPropertyOf sbol:directlyComprises . + + +labop:dataset a owl:ObjectProperty ; + rdfs:label "dataset" ; + rdfs:comment """The data property indicates the sub Dataset used in a Dataset.""" ; + rdfs:domain labop:Dataset ; + rdfs:range labop:Dataset . + + +labop:linkedMetadata a owl:ObjectProperty ; + rdfs:label "linked_metadata" ; + rdfs:comment """The metadata property indicates the (referenced) SampleMetadata used in a Dataset.""" ; + rdfs:domain labop:Dataset ; + rdfs:range labop:SampleMetadata . + + +labop:node a owl:ObjectProperty ; + rdfs:label "node" ; + rdfs:comment "This property is used to indicate the uml:ActivityNode that has been executed." ; + rdfs:domain labop:ActivityNodeExecution ; + rdfs:range uml:ActivityNode . + +labop:parameter a owl:ObjectProperty ; + rdfs:label "parameter" ; + rdfs:comment """This property points to the uml:Parameter associated with the value (e.g., wavelength for a + plate reader absorbance measurement behavior).""" ; + rdfs:domain labop:ParameterValue ; + rdfs:range uml:OrderedPropertyValue . + +labop:parameterValue a owl:ObjectProperty ; + rdfs:label "value" ; + rdfs:comment """This property points to the literal value used for the parameter during execution (e.g., a + uml:LiteralIdentified for an om:Measure representing a 600 nm wavelength).""" ; + rdfs:domain labop:ParameterValue ; + rdfs:range uml:LiteralSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +labop:protocol a owl:ObjectProperty ; + rdfs:label "protocol" ; + rdfs:comment "This property appears to be redundant with the use of prov:type specified by BehaviorExecution, and is likely to be deleted" ; + rdfs:domain labop:ProtocolExecution ; + rdfs:range labop:Protocol . + +labop:sampleDataValues a owl:ObjectProperty ; + rdfs:label "values" ; + rdfs:comment "The sampleDataValues are an array of data values, one for each sample, format to be determined." ; + rdfs:domain labop:SampleData ; + rdfs:range xsd:string . + +labop:source a owl:ObjectProperty ; + rdfs:label "source" ; + rdfs:comment "The source indicates the SampleCollection that is being subsetted via the mask" ; + rdfs:domain labop:SampleMask ; + rdfs:range labop:SampleCollection . + +labop:specification a owl:ObjectProperty ; + rdfs:label "specification" ; + rdfs:comment """The specification property is used to indicate the type of material used. + For example a DNA sample would be described by an sbol:Component. + + TODO: add example for glucose and for 96-well plate""" ; + rdfs:domain labop:Material ; + rdfs:range sbol:TopLevel . + +labop:tokenSource a owl:ObjectProperty ; + rdfs:label "token_source" ; + rdfs:comment "This property is used to indicate the ActivityNodeExecution that produced the token." ; + rdfs:domain labop:ActivityEdgeFlow ; + rdfs:range labop:ActivityNodeExecution . + +labop:Material a owl:Class ; + rdfs:comment """An amount of material allocated for use during the execution of a behavior. + For example a Material might be used to specify 1 96-well flat-bottom microplate or 2.5 mL of 10 millimolar glucose. + + TODO: consider changing type of specification to allow non-TopLevel descriptions, such as a ContainerSpec or sbol:ExternallyDefined + TODO: consider adding a field to distinguish between expended vs. reusable materials.""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:specification ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:amount ], + [ a owl:Restriction ; + owl:allValuesFrom sbol:TopLevel ; + owl:onProperty labop:specification ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:amount ], + [ a owl:Restriction ; + owl:allValuesFrom om:Measure ; + owl:onProperty labop:amount ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:specification ], + sbol:Identified . + +labop:ParameterValue a owl:Class ; + rdfs:comment """This class is used to represent the assignment of a value to a parameter in a BehaviorExecution + that records the execution of a uml:Behavior. This class is similar to prov:Usage, but instead of always + pointing to an object it uses an arbitrary literal (which might or might not be an object). An example would + be recording that a plate reader absorbance measurement was taken with its absorbance wavelength parameter set + to 600 nm""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:parameter ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:parameter ], + [ a owl:Restriction ; + owl:allValuesFrom uml:LiteralSpecification ; + owl:onProperty labop:parameterValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:parameterValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty labop:parameter ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:parameterValue ], + sbol:Identified . + +labop:mask a owl:DatatypeProperty ; + rdfs:label "mask" ; + rdfs:comment """The mask is an N-dimensional array of Booleans values, where each Boolean indicates whether the + sample at the corresponding location in the source is included in the subset. + + TODO: format of mask array needs to match the array format chosen for the SampleArray initial_contents property""" ; + rdfs:domain labop:mask ; + rdfs:range xsd:string . + +labop:BehaviorExecution a owl:Class ; + rdfs:comment """A BehaviorExecution is a record of how a Protocol, Primitive, or other uml:Behavior was carried out. + The execution of the behavior could be either real or simulated. + + In specifying a BehaviorExecution, the prov:type field inherited from prov:Activity is used to indicate the + uml:Behavior whose execution is being recorded. Precisely one value of prov:type MUST be a URI for a uml:Behavior. + The prov:startedAtTime and prov:endedAtTime fields SHOULD be used to record timing information as this becomes + available. + Finally, the entity carrying out the execution SHOULD be recorded as a prov:Agent indicated using a + prov:Association. + + Note that a BehaviorExecution can be used to record both the state of an in-progress execution as well as an + execution that has completed. As a BehaviorExecution proceeds, all values of its properties are monotonic, + i.e., they are only added to and never changed. + + TODO: need to changing completedNormally to allow indication of an in-progress BehaviorExecution + TODO: Is there a good ontology for agent roles in association?""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty labop:completedNormally ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:completedNormally ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:completedNormally ], + [ a owl:Restriction ; + owl:allValuesFrom labop:ParameterValue ; + owl:onProperty labop:parameterValuePair ], + [ a owl:Restriction ; + owl:allValuesFrom labop:Material ; + owl:onProperty labop:consumedMaterial ], + prov:Activity . + +labop:SampleCollection a owl:Class ; + rdfs:comment """SampleCollection is the base class for describing the collections of physical materials that are + acted upon by a Protocol. For example, a SampleCollection might describe a set of 10 cell cultures growing in + 96-well plate cells, or a set of 6 streaked agar plates, or a single 500 mL flask filled with media. + + There are two types of SampleCollection. A SampleArray specifies an n-dimensional rectangular array of samples, + all stored in the same type of container. A SampleMask specifies a subset of a SampleCollection by means of an + array of Boolean values indicating whether each element is included or excluded from the subset. + + Note, however, that a SampleCollection is a logical object and not a physical object. Thus, while a + SampleCollection might describe a set of samples in 96-well plate wells, it does not necessarily identify + a particular 96-well plate or the location of those wells. In practice, these will be determined as a + result of the specific library calls made to generate SampleCollection objects, and may not be determined + until the protocol is actually run in a particular execution environment. + + This is important for increasing the flexibility with which a Protocol can be specified and applied. + Consider, for example, a cell culturing protocol that includes a step to measure sample absorbance on a plate + reader. Describing this step does not require knowing how the samples are laid out on the plate, and in many + cases is even acceptable to run on samples across multiple plates. This flexibility will allow the cell + culturing protocol to be applied for experiments with different numbers and arrangements of samples.""" ; + rdfs:subClassOf sbol:Identified . + +labop:PrimitiveArray a owl:Class ; + rdfs:comment """A PrimitiveArray is a one-dimensional array of primtitive types represented as strings""" ; + rdfs:subClassOf sbol:Identified , + [ a owl:Restriction ; + owl:onProperty labop:elements ; + owl:allValuesFrom uml:OrderedPropertyValue ], + [ a owl:Restriction ; + owl:onProperty labop:elements ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ] + . + +labop:elements a owl:ObjectProperty ; + rdfs:comment """The elements of a PrimitiveArray""" ; + rdfs:subPropertyOf sbol:directlyComprises ; + rdfs:domain labop:PrimitiveArray ; + rdfs:range uml:OrderedPropertyValue ; + rdfs:label "elements" . + + +labop:SampleMask a owl:Class ; + rdfs:comment """A SampleMask is a subset of a SampleCollection. The subset of samples to be included is defined + by an array of Boolean values, where true values indicate that a sample is included and false values indicate + that it is excluded. + + The dimensions of the mask MUST be identical to the dimensions of the source SampleCollection. For this purpose, + the dimensions of a masked subset are not reduced, but remain the same as the original SampleArray. This allows + masks to be composed, such that SampleMask(source=SampleMask(source=X,mask=mask1),mask=mask2) is equivalent to + SampleMask(source=X,mask=mask1 AND mask2). Note that this implies masks are commutative and idempotent.""" ; + rdfs:subClassOf labop:SampleCollection , + [ a owl:Restriction ; + owl:onProperty labop:source ; + owl:allValuesFrom labop:SampleCollection ], + [ a owl:Restriction ; + owl:onProperty labop:source ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; + owl:onProperty labop:source ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; + owl:onProperty labop:mask ; + # need to replace this with an serializable array model + owl:allValuesFrom xsd:string ], + [ a owl:Restriction ; + owl:onProperty labop:mask ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ], + [ a owl:Restriction ; + owl:onProperty labop:mask ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ] + . + +labop:source a owl:ObjectProperty ; + rdfs:comment """The source indicates the SampleCollection that is being subsetted via the mask""" ; + rdfs:domain labop:SampleMask ; + rdfs:range labop:SampleCollection ; + rdfs:label "source" . + +labop:mask a owl:DatatypeProperty ; + rdfs:comment """The mask is an N-dimensional array of Booleans values, where each Boolean indicates whether the + sample at the corresponding location in the source is included in the subset. + + TODO: format of mask array needs to match the array format chosen for the SampleArray initial_contents property""" ; + rdfs:domain labop:mask ; + rdfs:range xsd:string ; + rdfs:label "mask" . + + + +labop:ActivityEdgeFlow a owl:Class ; + rdfs:comment """An ActivityEdgeFlow records one movement of a UML token along a uml:ActivityEdge during the + execution of its containing Protocol. If the edge is a uml:ObjectFlow, then the value MUST be set. + If the edge is a uml:ControlFlow, then the value MUST NOT be set. + + For instance, the ActivityEdgeFlow for a uml:ObjectFlow might record a measurement being sent to an output + uml:Parameter, while the ActivityEdgeFlow for a uml:ControlFlow might record a decision to proceed down a + particular branch from a uml:DecisionNode. + + Note that a uml:ActivityEdge might appear in multiple ActivityEdgeFlow records associated with a single + ProtocolExecution, e.g., due to a loop in the Protocol. It also might not appear in any, if the + uml:ActivityEdge is on a path not taken due to branching control flow. + + TODO: correct the cardinality: edgeValue is supposed to be optional, not edge + """ ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:LiteralSpecification ; + owl:onProperty labop:edgeValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:edge ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:tokenSource ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:edgeValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:tokenSource ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityEdge ; + owl:onProperty labop:edge ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty labop:edge ], + [ a owl:Restriction ; + owl:allValuesFrom labop:ActivityNodeExecution ; + owl:onProperty labop:tokenSource ], + sbol:Identified . + +labop:ActivityNodeExecution a owl:Class ; + rdfs:comment """An ActivityNodeExecution records one instance in which a uml:ActivityNode is executed during the + execution of its containing Protocol. + + For instance, the ActivityNodeExecution for a uml:CallBehaviorAction to measure absorbance on a plate reader + would set its node property to point to the uml:CallBehaviorAction and might have incomingFlow properties + indicating arrival of information about the samples to measure via a uml:ObjectFlow and the arrival a + of permission to begin via a uml:ControlFlow. + + Note that a uml:ActivityNode might appear in multiple ActivityNodeExecution records associated with a single + ProtocolExecution, e.g., due to a loop in the Protocol. It also might not appear in any, if the + uml:ActivityNode is on a path not taken due to branching control flow.""" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:node ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty labop:node ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityNode ; + owl:onProperty labop:node ], + [ a owl:Restriction ; + owl:allValuesFrom labop:ActivityEdgeFlow ; + owl:onProperty labop:incomingFlow ], + sbol:Identified . + + + +################################################################# +# Container specification +################################################################# +labop:queryString a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:domain labop:ContainerSpec ; + rdfs:range xsd:string ; + rdfs:label "queryString" ; + rdfs:comment "A query string, in OWL Manchester syntax, to be used to find matching containers in the ContainerSpec." . + +labop:prefixMap a owl:DatatypeProperty , + owl:FunctionalProperty ; + rdfs:domain labop:ContainerSpec ; + rdfs:range xsd:string ; + rdfs:label "prefixMap" ; + rdfs:comment "A prefix map in JSON-LD format, to be applied to a queryString." . diff --git a/src/lab/labop/resources/liquid_handling.ttl b/src/lab/labop/resources/liquid_handling.ttl new file mode 100644 index 0000000..70ab21a --- /dev/null +++ b/src/lab/labop/resources/liquid_handling.ttl @@ -0,0 +1,1526 @@ +@prefix ns1: . +@prefix om: . +@prefix sbol: . +@prefix xsd: . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + , + , + , + ; + sbol:description "Dilute" ; + sbol:displayId "Dilute" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + , + , + ; + sbol:description "Dilute" ; + sbol:displayId "DiluteToTargetOD" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Discard part or all of a sample" ; + sbol:displayId "Discard" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Move a measured volume of liquid from one source sample to create samples at multiple destination locations" ; + sbol:displayId "Dispense" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Mix by cycling a measured volume of liquid in and out at an array of samples a fixed number of times" ; + sbol:displayId "PipetteMix" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Place a measured amount (mass or volume) of a specified component into a location, where it may then be used in executing the protocol." ; + sbol:displayId "Provision" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + , + ; + sbol:description "Serial Dilution" ; + sbol:displayId "SerialDilution" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + , + , + , + ; + sbol:description "Move a measured volume taken from a collection of source samples to a location whose shape can contain them in a destination locations" ; + sbol:displayId "Transfer" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + , + , + ; + sbol:description "Move volumes from a collection of source samples to a collection of destination samples following a plan of value given for each location" ; + sbol:displayId "TransferByMap" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + , + ; + sbol:description "Mix a measured volume taken from an collection of source samples into a collection of destination samples whose shape can contain them" ; + sbol:displayId "TransferInto" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Vortex a sample in order to homogeneously mix or suspend its contents" ; + sbol:displayId "Vortex" ; + sbol:hasNamespace . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Component ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "diluent" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 4 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue5" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "replicates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 5 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue6" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dilution_factor" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 6 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue7" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "temperature" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Component ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "diluent" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 4 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue5" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "target_od" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 5 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue6" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "temperature" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dispenseVelocity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dispenseVelocity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "cycleCount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Component ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "resource" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dispenseVelocity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "direction" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Component ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "diluent" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 4 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue5" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dilution_factor" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "coordinates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "replicates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 4 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue5" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "temperature" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 5 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue6" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 6 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue7" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dispenseVelocity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "plan" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 4 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue5" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "temperature" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 5 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue6" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dispenseVelocity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "amount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "mixCycles" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 4 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue5" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dispenseVelocity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "duration" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . diff --git a/src/lab/labop/resources/sample_arrays.ttl b/src/lab/labop/resources/sample_arrays.ttl new file mode 100644 index 0000000..7391045 --- /dev/null +++ b/src/lab/labop/resources/sample_arrays.ttl @@ -0,0 +1,1742 @@ +@prefix ns1: . +@prefix om: . +@prefix prov: . +@prefix sbol: . +@prefix xsd: . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Select only the samples with specified columns from a sample collection" ; + sbol:displayId "Columns" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Compute Metadata describing samples at the time that this primitive executes." ; + sbol:displayId "ComputeMetadata" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Specify an instrument configuration consisting of optional instrument modules, such as pipettes, heat blocks, thermocyclers, etc, which are represented by Agents" ; + sbol:displayId "ConfigureRobot" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Create a new sample collection containing a set of replicate slots for every sample in the input" ; + sbol:displayId "ContainerSet" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Create a new sample collection with identical parameters to the input collection" ; + sbol:displayId "DuplicateCollection" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:displayId "EmbeddedImage" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Allocate a sample array with size and type based on an empty container" ; + sbol:displayId "EmptyContainer" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Allocate a sample array with size and type based on the instrument configuration" ; + sbol:displayId "EmptyInstrument" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Allocate a sample array with dimensions based on a rack as specified by an instance of cont:Rack" ; + sbol:displayId "EmptyRack" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Parse sample descriptions and metadata from an Excel file" ; + sbol:displayId "ExcelMetadata" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Group several labop.Dataset to create a labop.Dataset" ; + sbol:displayId "JoinDatasets" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Associate a labop:SampleMetadata with a labop.Dataset to create a labop.Dataset that also includes the new metadata" ; + sbol:displayId "JoinMetadata" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Insert cont:Containers into a rack at the indicated rack coordinates. A call to this Primitive should be preceded by EmptyRack" ; + sbol:displayId "LoadContainerInRack" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Insert cont:Containers directly into an instrument, such as a PCR machine, heat block, etc. at the specified slot cooordinates. A call to this Primitive should be preceded by EmptyInstrument" ; + sbol:displayId "LoadContainerOnInstrument" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Insert a tube rack, pipette tip rack, or microwell plate into an addressed location on a robotic platform" ; + sbol:displayId "LoadRackOnInstrument" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Select only the samples with specified row/column combination from a sample collection" ; + sbol:displayId "PlateCoordinates" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + , + ; + sbol:description "Create a new sample collection containing a set of replicate slots for every sample in the input" ; + sbol:displayId "PoolSamples" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Create a new sample collection containing a set of replicate slots for every sample in the input" ; + sbol:displayId "ReplicateCollection" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + , + ; + sbol:description "Select only the samples with specified rows from a sample collection" ; + sbol:displayId "Rows" ; + sbol:hasNamespace . + + a , + sbol:TopLevel ; + ns1:ownedParameter , + ; + sbol:description "Allocate a SampleArray object representing a stock reagent" ; + sbol:displayId "StockReagent" ; + sbol:hasNamespace . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "col" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "for_samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "metadata" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type prov:Agent ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "instrument" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "mount" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "quantity" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "specification" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "replicates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "image" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "caption" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Identified ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "specification" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "sample_array" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type prov:Agent ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "instrument" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "sample_array" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "slots" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Identified ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "specification" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "sample_array" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "slots" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "filename" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "for_samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "metadata" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "metadata" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + sbol:displayId "Parameter1" ; + sbol:name "dataset" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "joint_dataset" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "metadata" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "dataset" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "enhanced_dataset" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "slots" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "container" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "coordinates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "specification" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "slots" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type prov:Agent ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "instrument" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "rack" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "coordinates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 0 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "coordinates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "destination" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type om:Measure ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "volume" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 3 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue4" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "replicates" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "source" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ns1:ValueSpecification ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "row" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 2 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue3" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "samples" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 0 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue1" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:in ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type sbol:Identified ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "initial_contents" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . + + a ns1:OrderedPropertyValue, + sbol:Identified ; + ns1:indexValue 1 ; + ns1:propertyValue ; + sbol:displayId "OrderedPropertyValue2" . + + a ns1:Parameter, + sbol:Identified ; + ns1:direction ns1:out ; + ns1:isOrdered true ; + ns1:isUnique true ; + ns1:lowerValue ; + ns1:type ; + ns1:upperValue ; + sbol:displayId "Parameter1" ; + sbol:name "reagent" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger1" . + + a ns1:LiteralInteger, + sbol:Identified ; + ns1:integerValue 1 ; + sbol:displayId "LiteralInteger2" . diff --git a/src/lab/labop/resources/uml.ttl b/src/lab/labop/resources/uml.ttl new file mode 100644 index 0000000..f927fcf --- /dev/null +++ b/src/lab/labop/resources/uml.ttl @@ -0,0 +1,901 @@ +@prefix owl: . +@prefix rdfs: . +@prefix sbol: . +@prefix uml: . +@prefix xsd: . + + a owl:Ontology ; + rdfs:comment "Unified Modeling Languge (UML) subset, translated to an SBOL factory ontology." ; + owl:imports , + ; + owl:versionInfo "1.0-alpha1" . + +uml:ControlFlow a owl:Class ; + rdfs:comment "A ControlFlow is an ActivityEdge traversed by control tokens or object tokens of control type, which are use to control the execution of ExecutableNodes. See UML 2.5.1 specification section 15.2." ; + rdfs:subClassOf uml:ActivityEdge . + +uml:FlowFinalNode a owl:Class ; + rdfs:comment "A FlowFinalNode is a FinalNode that terminates a flow. All tokens accepted by a FlowFinalNode are destroyed. This has no effect on other flows in the Activity. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:FinalNode . + +uml:ForkNode a owl:Class ; + rdfs:comment "A ForkNode is a ControlNode that splits a flow into multiple concurrent flows. A ForkNode shall have exactly one incoming ActivityEdge, though it may have multiple outgoing ActivityEdges. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:ControlNode . + +uml:InitialNode a owl:Class ; + rdfs:comment "An InitialNode acts as a starting point for executing an Activity. An Activity may have more than one InitialNodes that start multiple concurrent control flows. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:ControlNode . + +uml:JoinNode a owl:Class ; + rdfs:comment "A JoinNode is a ControlNode that synchronizes multiple flows. A JoinNode shall have exactly one outgoing ActivityEdge but may have multiple incoming ActivityEdges. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:ControlNode . + +uml:LiteralNull a owl:Class ; + rdfs:comment "A LiteralNull specifies the lack of a value. See UML 2.5.1 specification section 8.2." ; + rdfs:subClassOf uml:LiteralSpecification . + +uml:MergeNode a owl:Class ; + rdfs:comment "A MergeNode is a control node that brings together multiple flows without synchronization. A MergeNode shall have exactly one outgoing ActivityEdge but may have multiple incoming ActivityEdges. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:ControlNode . + +xsd:anySimpleType a rdfs:Datatype . + +uml:ActivityParameterNode a owl:Class ; + rdfs:comment "An ActivityParameterNode is an ObjectNode for accepting values from the input Parameters or providing values to the output Parameters of an Activity. UML 2.5.1 specification section 15.4." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:parameter ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:parameter ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:parameter ], + uml:ObjectNode . + +uml:CallAction a owl:Class ; + rdfs:comment "A CallAction is an abstract class for Actions that invoke a Behavior with given argument values and (if the invocation is synchronous) receive reply values. See UML 2.5.1 specification section 16.3." ; + rdfs:subClassOf uml:InvocationAction . + +uml:CallBehaviorAction a owl:Class ; + rdfs:comment "A CallBehaviorAction is a CallAction that invokes a Behavior directly. The argument values of the CallBehaviorAction are passed on the input Parameters of the invoked Behavior. UML 2.5.1 specification section 16.3" ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:Behavior ; + owl:onProperty uml:behavior ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:behavior ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:behavior ], + uml:CallAction . + +uml:ExecutableNode a owl:Class ; + rdfs:comment "An ExecutableNode is an abstract class for ActivityNodes whose execution may be controlled using ControlFlows and to which ExceptionHandlers may be attached. See UML 2.5.1 specification section 15.5." ; + rdfs:subClassOf uml:ActivityNode . + +uml:FinalNode a owl:Class ; + rdfs:comment "A FinalNode is a ControlNode at which a flow in an Activity stops. A FinalNode shall not have outgoing ActivityEdges. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:ControlNode . + +uml:InvocationAction a owl:Class ; + rdfs:comment "UML 2.5.1 specification section 16.3" ; + rdfs:subClassOf uml:Action . + +uml:LiteralBoolean a owl:Class ; + rdfs:comment "A LiteralBoolean is a specification of a Boolean value. See UML 2.5.1 specification section 8.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty uml:booleanValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:booleanValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:booleanValue ], + uml:LiteralSpecification . + +uml:LiteralIdentified a owl:Class ; + rdfs:comment "A LiteralIdentified is used for linking SBOL objects as a child object to UML objects." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom sbol:Identified ; + owl:onProperty uml:identifiedValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:identifiedValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:identifiedValue ], + uml:LiteralSpecification . + +uml:LiteralInteger a owl:Class ; + rdfs:comment "A LiteralInteger is a specification of an Integer value. See UML 2.5.1 specification section 8.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:integer ; + owl:onProperty uml:integerValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:integerValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:integerValue ], + uml:LiteralSpecification . + +uml:LiteralReal a owl:Class ; + rdfs:comment "A LiteralReal is a specification of a Real value. See UML 2.5.1 specification section 8.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:float ; + owl:onProperty uml:realValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:realValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:realValue ], + uml:LiteralSpecification . + +uml:LiteralReference a owl:Class ; + rdfs:comment "A LiteralReference is used for embedding SBOL objects as a reference." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:referenceValue ], + [ a owl:Restriction ; + owl:allValuesFrom sbol:Identified ; + owl:onProperty uml:referenceValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:referenceValue ], + uml:LiteralSpecification . + +uml:LiteralString a owl:Class ; + rdfs:comment "A LiteralSpecification identifies a literal constant being modeled. See UML 2.5.1 specification section 8.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:string ; + owl:onProperty uml:stringValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:stringValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:stringValue ], + uml:LiteralSpecification . + +uml:ValuePin a owl:Class ; + rdfs:comment "A ValuePin is an InputPin that provides a value by evaluating a ValueSpecification. See UML 2.5.1 specification section 16.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:value ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:value ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:value ], + uml:InputPin . + +uml:constrainedElement a owl:ObjectProperty ; + rdfs:label "constrained_elements" ; + rdfs:comment "The OrderedPropertyValue referenced by this Constraint." ; + rdfs:domain uml:Constraint ; + rdfs:range uml:OrderedPropertyValue ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:edge a owl:ObjectProperty ; + rdfs:label "edges" ; + rdfs:comment "ActivityEdges expressing flow between the nodes of the Activity." ; + rdfs:domain uml:Activity ; + rdfs:range uml:ActivityEdge ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:input a owl:ObjectProperty ; + rdfs:label "inputs" ; + rdfs:comment "The ordered set of InputPins representing the inputs to the Action." ; + rdfs:domain uml:Action ; + rdfs:range uml:InputPin ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:node a owl:ObjectProperty ; + rdfs:label "nodes" ; + rdfs:comment "ActivityNodes coordinated by the Activity." ; + rdfs:domain uml:Activity ; + rdfs:range uml:ActivityNode ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:operandValue a owl:ObjectProperty ; + rdfs:label "operand" ; + rdfs:comment "Specifies a sequence of operand ValueSpecifications." ; + rdfs:domain uml:Expression ; + rdfs:range uml:OrderedPropertyValue ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:output a owl:ObjectProperty ; + rdfs:label "outputs" ; + rdfs:comment "The ordered set of OutputPins representing outputs from the Action." ; + rdfs:domain uml:Action ; + rdfs:range uml:OutputPin ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:ownedParameter a owl:ObjectProperty ; + rdfs:label "parameters" ; + rdfs:comment " a list of Parameters to the Behavior which describes the order and type of arguments that can be given when the Behavior is invoked and of the values which will be returned when the Behavior completes its execution." ; + rdfs:domain uml:Behavior ; + rdfs:range uml:OrderedPropertyValue ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:postcondition a owl:ObjectProperty ; + rdfs:label "postconditions" ; + rdfs:comment "An optional set of Constraints specifying what is fulfilled after the execution of the Behavior is completed, if its precondition was fulfilled before its invocation." ; + rdfs:domain uml:Behavior ; + rdfs:range uml:Constraint ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:precondition a owl:ObjectProperty ; + rdfs:label "preconditions" ; + rdfs:comment "An optional set of Constraints specifying what must be fulfilled before the Behavior is invoked." ; + rdfs:domain uml:Behavior ; + rdfs:range uml:Constraint ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:Activity a owl:Class ; + rdfs:comment "An Activity coordinates and groups steps in a protocol or workflow. See UML 2.5.1 specification section 15." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityNode ; + owl:onProperty uml:node ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityEdge ; + owl:onProperty uml:edge ], + uml:Behavior . + +uml:DecisionNode a owl:Class ; + rdfs:comment "A DecisionNode is a ControlNode that chooses between outgoing flows. A DecisionNode shall have at least one and at most two incoming ActivityEdges, and at least one outgoing ActivityEdge. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:Behavior ; + owl:onProperty uml:decisionInput ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:decisionInput ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ObjectFlow ; + owl:onProperty uml:decisionInputFlow ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:decisionInputFlow ], + uml:ControlNode . + +uml:DurationConstraint a owl:Class ; + rdfs:comment "A DurationConstraint is a Constraint that refers to a DurationInterval." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "2"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:durationSpecification ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:durationSpecification ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:firstEventValue ], + uml:IntervalConstraint . + +uml:DurationObservation a owl:Class ; + rdfs:comment "A DurationObservation is a reference to a duration during an execution. It points out the entities in the model to observe and whether the observations are when these entities are entered or exited." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:durationObservationValue ], + [ a owl:Restriction ; + owl:allValuesFrom sbol:Identified ; + owl:onProperty uml:durationObservationValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:maxCardinality "2"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:maxCardinality "2"^^xsd:nonNegativeInteger ; + owl:onProperty uml:durationObservationValue ], + uml:Observation . + +uml:Expression a owl:Class ; + rdfs:comment "An Expression represents a node in an expression tree, which may be non-terminal or terminal. It defines a symbol, and has a possibly empty sequence of operands that are ValueSpecifications. See UML 2.5.1 specification section 8.6.5.1." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty uml:symbolValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:symbolValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:string ; + owl:onProperty uml:symbolValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:operandValue ], + uml:ValueSpecification . + +uml:Interval a owl:Class ; + rdfs:comment "An Interval defines the range between two ValueSpecifications." ; + rdfs:subClassOf uml:ValueSpecification . + +uml:IntervalConstraint a owl:Class ; + rdfs:comment "An IntervalConstraint is a Constraint that is specified by an Interval." ; + rdfs:subClassOf uml:Constraint . + +uml:ObjectFlow a owl:Class ; + rdfs:comment "An ObjectFlow is an ActivityEdge that is traversed by object tokens that may hold values. Object flows also support multicast/receive, token selection from object nodes, and transformation of tokens. See UML 2.5.1 specification section 15.2." ; + rdfs:subClassOf uml:ActivityEdge . + +uml:ObjectNode a owl:Class ; + rdfs:comment "An ObjectNode is a kind of ActivityNode used to hold value-containing object tokens during the course of the execution of an Activity. See UML 2.5.1 specification section 15.4." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:anyURI ; + owl:onProperty uml:type ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:type ], + uml:ActivityNode . + +uml:OutputPin a owl:Class ; + rdfs:comment "An OutputPin is a Pin that holds output values produced by an Action. See UML 2.5.1 specification section 16.2." ; + rdfs:subClassOf uml:Pin . + +uml:Parameter a owl:Class ; + rdfs:comment "A Parameter is a specification of an argument used to pass information into or out of an invocation of a Behavior. See UML 2.5.1 specification section 9.4." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:anyURI ; + owl:onProperty uml:direction ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:direction ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:direction ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:defaultValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:defaultValue ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:anyURI ; + owl:onProperty uml:type ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:type ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty uml:isUnique ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isUnique ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isUnique ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:lowerValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:lowerValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:upperValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:upperValue ], + sbol:Identified . + +uml:Pin a owl:Class ; + rdfs:comment "A Pin is an ObjectNode and MultiplicityElement that provides input values to an Action or accepts output values from an Action. See UML 2.5.1 specification section 16.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isOrdered ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:boolean ; + owl:onProperty uml:isUnique ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isUnique ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:isUnique ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:lowerValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:lowerValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:upperValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:upperValue ], + uml:ObjectNode . + +uml:TimeConstraint a owl:Class ; + rdfs:comment "A TimeConstraint is a Constraint that refers to a TimeInterval." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:timeSpecification ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:timeSpecification ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:firstEventValue ], + uml:IntervalConstraint . + +uml:TimeObservation a owl:Class ; + rdfs:comment "A TimeObservation is a reference to a time instant during an execution. It points out which entity in the model to observe and whether the observation is when this entity is entered or when it is exited." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:timeObservationValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:timeObservationValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:allValuesFrom sbol:Identified ; + owl:onProperty uml:timeObservationValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:firstEventValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:firstEventValue ], + uml:Observation . + +uml:decisionInput a owl:ObjectProperty ; + rdfs:label "decision_input" ; + rdfs:comment "A Behavior that is executed to provide an input to guard ValueSpecifications on ActivityEdges outgoing from the DecisionNode." ; + rdfs:domain uml:DecisionNode ; + rdfs:range uml:Behavior . + +uml:decisionInputFlow a owl:ObjectProperty ; + rdfs:label "decision_input_flow" ; + rdfs:comment "An additional ActivityEdge incoming to the DecisionNode that provides a decision input value for the guards ValueSpecifications on ActivityEdges outgoing from the DecisionNode." ; + rdfs:domain uml:DecisionNode ; + rdfs:range uml:ObjectFlow . + +uml:defaultValue a owl:ObjectProperty ; + rdfs:label "default_value" ; + rdfs:comment "A ValueSpecification that represents a value to be used when no argument is supplied for the Parameter." ; + rdfs:domain uml:Parameter ; + rdfs:range uml:ValueSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:observationValue a owl:ObjectProperty ; + rdfs:label "observation" ; + rdfs:comment "Refers to the Observations that are involved in the computation of the Duration value." ; + rdfs:domain uml:Duration, + uml:TimeExpression ; + rdfs:range uml:Observation . + +uml:Action a owl:Class ; + rdfs:comment "An Action is the fundamental unit of executable functionality. The execution of an Action represents some transformation or processing in the modeled system. Actions provide the ExecutableNodes within Activities and may also be used within Interactions. See UML 2.5.1 specification section 16." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:InputPin ; + owl:onProperty uml:input ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OutputPin ; + owl:onProperty uml:output ], + uml:ExecutableNode . + +uml:InputPin a owl:Class ; + rdfs:comment "An InputPin is a Pin that holds input values to be consumed by an Action. See UML 2.5.1 specification section 16.2." ; + rdfs:subClassOf uml:Pin . + +uml:behavior a owl:ObjectProperty ; + rdfs:label "behavior" ; + rdfs:comment "The Behavior being invoked." ; + rdfs:domain uml:CallBehaviorAction ; + rdfs:range uml:Behavior . + +uml:booleanValue a owl:DatatypeProperty ; + rdfs:label "value" ; + rdfs:comment "The specified Boolean value." ; + rdfs:domain uml:LiteralBoolean ; + rdfs:range xsd:boolean . + +uml:direction a owl:DatatypeProperty ; + rdfs:label "direction" ; + rdfs:comment "Indicates whether a parameter is being sent into or out of a behavioral element." ; + rdfs:domain uml:Parameter ; + rdfs:range xsd:anyURI . + +uml:durationObservationValue a owl:ObjectProperty ; + rdfs:label "event" ; + rdfs:comment "The DurationObservation is determined as the duration between the entering or exiting of a single event during execution, or the entering/exiting of one event and the entering/exiting of a second." ; + rdfs:domain uml:DurationObservation ; + rdfs:range sbol:Identified . + +uml:durationSpecification a owl:ObjectProperty ; + rdfs:label "specification" ; + rdfs:comment "The DurationInterval constraining the duration." ; + rdfs:domain uml:DurationConstraint ; + rdfs:range uml:DurationInterval ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:identifiedValue a owl:ObjectProperty ; + rdfs:label "value" ; + rdfs:comment "The embedded SBOL object" ; + rdfs:domain uml:LiteralIdentified ; + rdfs:range sbol:Identified ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:indexValue a owl:DatatypeProperty ; + rdfs:label "index" ; + rdfs:domain uml:OrderedPropertyValue ; + rdfs:range xsd:integer . + +uml:integerValue a owl:DatatypeProperty ; + rdfs:label "value" ; + rdfs:comment "The specified Integer value." ; + rdfs:domain uml:LiteralInteger ; + rdfs:range xsd:integer . + +uml:maxDurationValue a owl:ObjectProperty ; + rdfs:label "max" ; + rdfs:comment "Refers to the Duration denoting the maximum value of the range." ; + rdfs:domain uml:DurationInterval ; + rdfs:range uml:Duration ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:maxTimeValue a owl:ObjectProperty ; + rdfs:label "max" ; + rdfs:comment "Refers to the TimeExpression denoting the maximum value of the range." ; + rdfs:domain uml:TimeInterval ; + rdfs:range uml:TimeExpression ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:minDurationValue a owl:ObjectProperty ; + rdfs:label "min" ; + rdfs:comment "Refers to the Duration denoting the minimum value of the range." ; + rdfs:domain uml:DurationInterval ; + rdfs:range uml:Duration ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:minTimeValue a owl:ObjectProperty ; + rdfs:label "min" ; + rdfs:comment "Refers to the TimeExpression denoting the minimum value of the range." ; + rdfs:domain uml:TimeInterval ; + rdfs:range uml:TimeExpression ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:parameter a owl:ObjectProperty ; + rdfs:label "parameter" ; + rdfs:comment "The Parameter for which the ActivityParameterNode will be accepting or providing values." ; + rdfs:domain uml:ActivityParameterNode ; + rdfs:range uml:OrderedPropertyValue . + +uml:propertyValue a owl:ObjectProperty ; + rdfs:label "property_value" ; + rdfs:domain uml:OrderedPropertyValue ; + rdfs:range sbol:Identified ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:realValue a owl:DatatypeProperty ; + rdfs:label "value" ; + rdfs:comment "The specified Real value." ; + rdfs:domain uml:LiteralReal ; + rdfs:range xsd:float . + +uml:referenceValue a owl:ObjectProperty ; + rdfs:label "value" ; + rdfs:comment "The referenced SBOL object." ; + rdfs:domain uml:LiteralReference ; + rdfs:range sbol:Identified . + +uml:source a owl:ObjectProperty ; + rdfs:label "source" ; + rdfs:comment "The ActivityNode from which tokens are taken when they traverse the ActivityEdge." ; + rdfs:domain uml:ActivityEdge ; + rdfs:range uml:ActivityNode . + +uml:stringValue a owl:DatatypeProperty ; + rdfs:label "value" ; + rdfs:comment "The specified String value." ; + rdfs:domain uml:LiteralString ; + rdfs:range xsd:string . + +uml:symbolValue a owl:DatatypeProperty ; + rdfs:label "symbol" ; + rdfs:comment "The symbol associated with this node in the expression tree." ; + rdfs:domain uml:Expression ; + rdfs:range xsd:anyURI . + +uml:target a owl:ObjectProperty ; + rdfs:label "target" ; + rdfs:comment "The ActivityNode to which tokens are put when they traverse the ActivityEdge." ; + rdfs:domain uml:ActivityEdge ; + rdfs:range uml:ActivityNode . + +uml:timeObservationValue a owl:ObjectProperty ; + rdfs:label "event" ; + rdfs:comment "The TimeObservation is determined by the entering or exiting of the event during execution." ; + rdfs:domain uml:TimeObservation ; + rdfs:range sbol:Identified . + +uml:timeSpecification a owl:ObjectProperty ; + rdfs:label "specification" ; + rdfs:comment "TheTimeInterval constraining the duration." ; + rdfs:domain uml:TimeConstraint ; + rdfs:range uml:TimeInterval ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:value a owl:ObjectProperty ; + rdfs:label "value" ; + rdfs:comment "The ValueSpecification that is evaluated to obtain the value that the ValuePin will provide." ; + rdfs:domain uml:ValuePin ; + rdfs:range uml:ValueSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:Duration a owl:Class ; + rdfs:comment "A Duration is a ValueSpecification that specifies the temporal distance between two time instants." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:exprValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:exprValue ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty uml:exprValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:Observation ; + owl:onProperty uml:observationValue ], + uml:ValueSpecification . + +uml:DurationInterval a owl:Class ; + rdfs:comment "A DurationInterval defines the range between two Durations." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:maxDurationValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:minDurationValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:minDurationValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:maxDurationValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:minDurationValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:maxDurationValue ], + uml:Interval . + +uml:TimeExpression a owl:Class ; + rdfs:comment "A TimeExpression is a ValueSpecification that represents a time value." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:exprValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:exprValue ], + [ a owl:Restriction ; + owl:minCardinality "0"^^xsd:nonNegativeInteger ; + owl:onProperty uml:exprValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:Observation ; + owl:onProperty uml:observationValue ], + uml:ValueSpecification . + +uml:TimeInterval a owl:Class ; + rdfs:comment "A TimeInterval defines the range between two TimeExpressions." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:maxTimeValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:minTimeValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:minTimeValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:maxTimeValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:maxTimeValue ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ValueSpecification ; + owl:onProperty uml:minTimeValue ], + uml:Interval . + +uml:lowerValue a owl:ObjectProperty ; + rdfs:label "lower_value" ; + rdfs:comment "For MultiplicityElement abstract class; UML 2.5.1 specification section 7.5" ; + rdfs:domain sbol:Identified ; + rdfs:range uml:ValueSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:upperValue a owl:ObjectProperty ; + rdfs:label "upper_value" ; + rdfs:comment "For MultiplicityElement abstract class; UML 2.5.1 specification section 7.5" ; + rdfs:domain sbol:Identified ; + rdfs:range uml:ValueSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:Observation a owl:Class ; + rdfs:comment "Observation specifies a value determined by observing an event or events that occur relative to other model entities." ; + rdfs:subClassOf sbol:Identified . + +uml:ActivityEdge a owl:Class ; + rdfs:comment "An ActivityEdge is an abstract class for directed connections between two ActivityNodes. See UML 2.5.1 specification section 15.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityNode ; + owl:onProperty uml:source ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:source ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:source ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityNode ; + owl:onProperty uml:target ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:target ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:target ], + [ a owl:Restriction ; + owl:allValuesFrom uml:ActivityNode ; + owl:onProperty uml:guard ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:guard ], + sbol:Identified . + +uml:guard a owl:ObjectProperty ; + rdfs:label "guard" ; + rdfs:comment "A ValueSpecification that guards an ActivityEdge." ; + rdfs:domain uml:ActivityEdge ; + rdfs:range uml:ValueSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:Constraint a owl:Class ; + rdfs:comment "A Constraint is a condition or restriction expressed in natural language text or in a machine readable language. See UML 2.5.1 specification section 7.6." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:constrainedElement ], + sbol:Identified . + +uml:ControlNode a owl:Class ; + rdfs:comment "A ControlNode is a kind of ActivityNode used to manage the flow of tokens between other nodes in an Activity. It can manage branching and merging of workflows and the implementation of logic for flow control. See UML 2.5.1 specification section 15.3." ; + rdfs:subClassOf uml:ActivityNode . + +uml:exprValue a owl:ObjectProperty ; + rdfs:label "expr" ; + rdfs:comment "A ValueSpecification that evaluates to the value of the Duration." ; + rdfs:domain uml:Duration, + uml:TimeExpression ; + rdfs:range uml:ValueSpecification ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:isUnique a owl:DatatypeProperty ; + rdfs:label "is_unique" ; + rdfs:comment "For MultiplicityElement abstract class; UML 2.5.1 specification section 7.5" ; + rdfs:domain sbol:Identified ; + rdfs:range xsd:boolean . + +uml:type a owl:DatatypeProperty ; + rdfs:label "type" ; + rdfs:comment "Specifies a set of Type instances constraining the allowed values. See UML 2.5.1 specification section 7.5." ; + rdfs:domain sbol:Identified ; + rdfs:range xsd:anyURI . + +uml:LiteralSpecification a owl:Class ; + rdfs:comment "A LiteralSpecification identifies a literal constant being modeled. See UML 2.5.1 specification section 8.2." ; + rdfs:subClassOf uml:ValueSpecification . + +uml:Behavior a owl:Class ; + rdfs:comment "Behavior is an abstract specification of how a state changes over time. This specification may be a prospective definition of a protocol or a capture of an execution trace. See UML 2.5.1 specification section 13.2." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom uml:Constraint ; + owl:onProperty uml:precondition ], + [ a owl:Restriction ; + owl:allValuesFrom uml:Constraint ; + owl:onProperty uml:postcondition ], + [ a owl:Restriction ; + owl:allValuesFrom uml:OrderedPropertyValue ; + owl:onProperty uml:ownedParameter ], + sbol:TopLevel . + +uml:ActivityNode a owl:Class ; + rdfs:comment "ActivityNode is an abstract class for points in the flow of an Activity connected by ActivityEdges. See UML 2.5.1 specification section 15.2." ; + rdfs:subClassOf sbol:Identified . + +uml:isOrdered a owl:DatatypeProperty ; + rdfs:label "is_ordered" ; + rdfs:comment "For MultiplicityElement abstract class; UML 2.5.1 specification section 7.5" ; + rdfs:domain sbol:Identified ; + rdfs:range xsd:boolean . + +uml:firstEventValue a owl:ObjectProperty ; + rdfs:label "firstEvent" ; + rdfs:comment "The value of firstEvent[i] is related to event[i] (where i is 1 or 2). If firstEvent[i] is true, then the correspondingobservation event is the first time instant the execution enters event[i]. If firstEvent[i] is false, then the corresponding observation event is the time instant the execution exits event[i]." ; + rdfs:domain uml:DurationConstraint, + uml:DurationObservation, + uml:TimeConstraint, + uml:TimeObservation ; + rdfs:range uml:OrderedPropertyValue ; + rdfs:subPropertyOf sbol:directlyComprises . + +uml:OrderedPropertyValue a owl:Class ; + rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:indexValue ], + [ a owl:Restriction ; + owl:allValuesFrom sbol:Identified ; + owl:onProperty uml:propertyValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:indexValue ], + [ a owl:Restriction ; + owl:allValuesFrom xsd:integer ; + owl:onProperty uml:indexValue ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:propertyValue ], + [ a owl:Restriction ; + owl:minCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:propertyValue ], + sbol:Identified . + +uml:ValueSpecification a owl:Class ; + rdfs:label "ValueSpecification" ; + rdfs:comment "A ValueSpecification is the specification of a (possibly empty) set of values. See UML 2.5.1 specification section 8." ; + rdfs:subClassOf [ a owl:Restriction ; + owl:allValuesFrom xsd:anyURI ; + owl:onProperty uml:type ], + [ a owl:Restriction ; + owl:maxCardinality "1"^^xsd:nonNegativeInteger ; + owl:onProperty uml:type ], + sbol:Identified . + +sbol:directlyComprises a owl:ObjectProperty . diff --git a/src/lab/labop/resources/upstream.json b/src/lab/labop/resources/upstream.json new file mode 100644 index 0000000..cec0962 --- /dev/null +++ b/src/lab/labop/resources/upstream.json @@ -0,0 +1,26 @@ +{ + "repository": "https://github.com/Bioprotocols/labop", + "commit": "2e2bd88150c71a440771fd369f40295dfd622324", + "files": { + "uml.ttl": { + "path": "uml/inner/uml.ttl", + "sha256": "698921e4482a4f43348f62e8e51e7c4bdc079010d910e9bc2f10e8a5c4586a2a" + }, + "labop.ttl": { + "path": "labop/inner/labop.ttl", + "sha256": "914ee4cce8abe1982aaa9cac2197f853a878bb3972c97a3528f850dbd32efb3a" + }, + "liquid_handling.ttl": { + "path": "labop/lib/liquid_handling.ttl", + "sha256": "f848017ab3366f6e453caa48b8325b77ffcdc0bdb729f30a476ade52864a3355" + }, + "LICENSE.txt": { + "path": "LICENSE.txt", + "sha256": "6b14a3ec0069fab52046c0f1a967e7ffd43bd756d60874ca1e0065789e0ec99d" + }, + "sample_arrays.ttl": { + "path": "labop/lib/sample_arrays.ttl", + "sha256": "826ceac438e9d54f16040ee1802db8a6f3b2a975674fc8ce3b9cfd26daaaf97e" + } + } +} diff --git a/tests/test_labop_resources.py b/tests/test_labop_resources.py new file mode 100644 index 0000000..a5a2a03 --- /dev/null +++ b/tests/test_labop_resources.py @@ -0,0 +1,16 @@ +import hashlib +import json +from importlib.resources import files + +from rdflib import Graph + + +def test_vendored_labop_resources_match_upstream_hashes_and_parse(): + resources = files("lab.labop").joinpath("resources") + manifest = json.loads(resources.joinpath("upstream.json").read_text()) + for name, item in manifest["files"].items(): + data = resources.joinpath(name).read_bytes() + assert hashlib.sha256(data).hexdigest() == item["sha256"] + if name.endswith(".ttl"): + assert Graph().parse(data=data, format="turtle") + assert Graph().parse(data=resources.joinpath("lab.ttl").read_text(), format="turtle")