{
  "openapi" : "3.0.0",
  "info" : {
    "title" : "BaSyx Shared Models",
    "description" : "All BaSyx shared model classes including the classes of the Asset Administration Shell meta model",
    "version" : "v1"
  },
  "components" : {
    "schemas" : {
      "Result" : {
        "type" : "object",
        "properties" : {
          "entityType" : {
            "type" : "string",
            "readOnly" : true
          },
          "entity" : {
            "type" : "object",
            "readOnly" : true
          },
          "success" : {
            "type" : "boolean",
            "readOnly" : true
          },
          "isException" : {
            "type" : "boolean",
            "readOnly" : true
          },
          "messages" : {
            "uniqueItems" : false,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Message"
            },
            "readOnly" : true
          }
        }
      },
      "Message" : {
        "type" : "object",
        "properties" : {
          "messageType" : {
            "enum" : [ "Unspecified", "Debug", "Information", "Warning", "Error", "Fatal", "Exception" ],
            "type" : "string"
          },
          "code" : {
            "type" : "string"
          },
          "text" : {
            "type" : "string"
          }
        }
      },
      "InvocationRequest" : {
        "type" : "object",
        "properties" : {
          "requestId" : {
            "type" : "string"
          },
          "inoutputArguments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OperationVariable"
            }
          },
          "inputArguments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OperationVariable"
            }
          },
          "timeout" : {
            "type" : "integer"
          }
        }
      },
      "CallbackReponse" : {
        "type" : "object",
        "properties" : {
          "requestId" : {
            "type" : "string"
          },
          "callbackUrl" : {
            "type" : "string"
          }
        }
      },
      "InvocationResponse" : {
        "type" : "object",
        "properties" : {
          "requestId" : {
            "type" : "string"
          },
          "inoutputArguments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OperationVariable"
            }
          },
          "outputArguments" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/OperationVariable"
            }
          },
          "operationResult" : {
            "$ref" : "#/components/schemas/Result"
          },
          "executionState" : {
            "type" : "string",
            "enum" : [ "Initiated", "Running", "Completed", "Canceled", "Failed", "Timeout" ]
          }
        }
      },
      "EventSubscription" : {
        "type" : "object",
        "properties" : {
          "clientId" : {
            "type" : "string"
          },
          "endpoint" : {
            "$ref" : "#/components/schemas/Endpoint"
          }
        }
      },
      "AssetAdministrationShellDescriptor" : {
        "type" : "object",
        "properties" : {
          "idShort" : {
            "type" : "string"
          },
          "identification" : {
            "$ref" : "#/components/schemas/Identifier"
          },
          "administration" : {
            "$ref" : "#/components/schemas/AdministrativeInformation"
          },
          "description" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/LangString"
            }
          },
          "asset" : {
            "$ref" : "#/components/schemas/Asset"
          },
          "endpoints" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Endpoint"
            }
          },
          "submodelDescriptors" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SubmodelDescriptor"
            }
          }
        }
      },
      "SubmodelDescriptor" : {
        "type" : "object",
        "properties" : {
          "idShort" : {
            "type" : "string"
          },
          "identification" : {
            "$ref" : "#/components/schemas/Identifier"
          },
          "administration" : {
            "$ref" : "#/components/schemas/AdministrativeInformation"
          },
          "description" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/LangString"
            }
          },
          "semanticId" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "endpoints" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Endpoint"
            }
          }
        }
      },
      "Endpoint" : {
        "type" : "object",
        "properties" : {
          "address" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "parameters" : {
            "type" : "object"
          }
        }
      },
      "Referable" : {
        "type" : "object",
        "properties" : {
          "idShort" : {
            "type" : "string"
          },
          "category" : {
            "type" : "string"
          },
          "description" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/LangString"
            }
          },
          "parent" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "modelType" : {
            "$ref" : "#/components/schemas/ModelType"
          }
        },
        "required" : [ "idShort", "modelType" ]
      },
      "Identifiable" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Referable"
        }, {
          "properties" : {
            "identification" : {
              "$ref" : "#/components/schemas/Identifier"
            },
            "administration" : {
              "$ref" : "#/components/schemas/AdministrativeInformation"
            }
          },
          "required" : [ "identification" ]
        } ]
      },
      "Qualifiable" : {
        "type" : "object",
        "properties" : {
          "qualifiers" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Constraint"
            }
          }
        }
      },
      "HasSemantics" : {
        "type" : "object",
        "properties" : {
          "semanticId" : {
            "$ref" : "#/components/schemas/Reference"
          }
        }
      },
      "HasDataSpecification" : {
        "type" : "object",
        "properties" : {
          "embeddedDataSpecifications" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/EmbeddedDataSpecification"
            }
          }
        }
      },
      "AssetAdministrationShell" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Identifiable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "properties" : {
            "derivedFrom" : {
              "$ref" : "#/components/schemas/Reference"
            },
            "asset" : {
              "$ref" : "#/components/schemas/Reference"
            },
            "submodels" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            },
            "views" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/View"
              }
            },
            "conceptDictionaries" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/ConceptDictionary"
              }
            },
            "security" : {
              "$ref" : "#/components/schemas/Security"
            }
          },
          "required" : [ "asset" ]
        } ]
      },
      "Identifier" : {
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "string"
          },
          "idType" : {
            "$ref" : "#/components/schemas/KeyType"
          }
        },
        "required" : [ "id", "idType" ]
      },
      "KeyType" : {
        "type" : "string",
        "enum" : [ "Custom", "IRDI", "IRI", "IdShort", "FragmentId" ]
      },
      "AdministrativeInformation" : {
        "type" : "object",
        "properties" : {
          "version" : {
            "type" : "string"
          },
          "revision" : {
            "type" : "string"
          }
        }
      },
      "LangString" : {
        "type" : "object",
        "properties" : {
          "language" : {
            "type" : "string"
          },
          "text" : {
            "type" : "string"
          }
        },
        "required" : [ "language", "text" ]
      },
      "Reference" : {
        "type" : "object",
        "properties" : {
          "keys" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Key"
            }
          }
        },
        "required" : [ "keys" ]
      },
      "Key" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "$ref" : "#/components/schemas/KeyElements"
          },
          "idType" : {
            "$ref" : "#/components/schemas/KeyType"
          },
          "value" : {
            "type" : "string"
          },
          "local" : {
            "type" : "boolean"
          }
        },
        "required" : [ "type", "idType", "value", "local" ]
      },
      "KeyElements" : {
        "type" : "string",
        "enum" : [ "Asset", "AssetAdministrationShell", "ConceptDescription", "Submodel", "AccessPermissionRule", "AnnotatedRelationshipElement", "BasicEvent", "Blob", "Capability", "ConceptDictionary", "DataElement", "File", "Entity", "Event", "MultiLanguageProperty", "Operation", "Property", "Range", "ReferenceElement", "RelationshipElement", "SubmodelElement", "SubmodelElementCollection", "View", "GlobalReference", "FragmentReference" ]
      },
      "ModelTypes" : {
        "type" : "string",
        "enum" : [ "Asset", "AssetAdministrationShell", "ConceptDescription", "Submodel", "AccessPermissionRule", "AnnotatedRelationshipElement", "BasicEvent", "Blob", "Capability", "ConceptDictionary", "DataElement", "File", "Entity", "Event", "MultiLanguageProperty", "Operation", "Property", "Range", "ReferenceElement", "RelationshipElement", "SubmodelElement", "SubmodelElementCollection", "View", "GlobalReference", "FragmentReference", "Constraint", "Formula", "Qualifier" ]
      },
      "ModelType" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "$ref" : "#/components/schemas/ModelTypes"
          }
        },
        "required" : [ "name" ]
      },
      "EmbeddedDataSpecification" : {
        "type" : "object",
        "properties" : {
          "dataSpecification" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "dataSpecificationContent" : {
            "$ref" : "#/components/schemas/DataSpecificationContent"
          }
        },
        "required" : [ "dataSpecification", "dataSpecificationContent" ]
      },
      "DataSpecificationContent" : {
        "oneOf" : [ {
          "$ref" : "#/components/schemas/DataSpecificationIEC61360Content"
        }, {
          "$ref" : "#/components/schemas/DataSpecificationPhysicalUnitContent"
        } ]
      },
      "DataSpecificationPhysicalUnitContent" : {
        "type" : "object",
        "properties" : {
          "unitName" : {
            "type" : "string"
          },
          "unitSymbol" : {
            "type" : "string"
          },
          "definition" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/LangString"
            }
          },
          "siNotation" : {
            "type" : "string"
          },
          "siName" : {
            "type" : "string"
          },
          "dinNotation" : {
            "type" : "string"
          },
          "eceName" : {
            "type" : "string"
          },
          "eceCode" : {
            "type" : "string"
          },
          "nistName" : {
            "type" : "string"
          },
          "sourceOfDefinition" : {
            "type" : "string"
          },
          "conversionFactor" : {
            "type" : "string"
          },
          "registrationAuthorityId" : {
            "type" : "string"
          },
          "supplier" : {
            "type" : "string"
          }
        },
        "required" : [ "unitName", "unitSymbol", "definition" ]
      },
      "DataSpecificationIEC61360Content" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/ValueObject"
        }, {
          "type" : "object",
          "properties" : {
            "dataType" : {
              "enum" : [ "DATE", "STRING", "STRING_TRANSLATABLE", "REAL_MEASURE", "REAL_COUNT", "REAL_CURRENCY", "BOOLEAN", "URL", "RATIONAL", "RATIONAL_MEASURE", "TIME", "TIMESTAMP" ]
            },
            "definition" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/LangString"
              }
            },
            "preferredName" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/LangString"
              }
            },
            "shortName" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/LangString"
              }
            },
            "sourceOfDefinition" : {
              "type" : "string"
            },
            "symbol" : {
              "type" : "string"
            },
            "unit" : {
              "type" : "string"
            },
            "unitId" : {
              "$ref" : "#/components/schemas/Reference"
            },
            "valueFormat" : {
              "type" : "string"
            },
            "valueList" : {
              "$ref" : "#/components/schemas/ValueList"
            },
            "levelType" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/LevelType"
              }
            }
          },
          "required" : [ "preferredName" ]
        } ]
      },
      "LevelType" : {
        "type" : "string",
        "enum" : [ "Min", "Max", "Nom", "Typ" ]
      },
      "ValueList" : {
        "type" : "object",
        "properties" : {
          "valueReferencePairTypes" : {
            "type" : "array",
            "minItems" : 1,
            "items" : {
              "$ref" : "#/components/schemas/ValueReferencePairType"
            }
          }
        },
        "required" : [ "valueReferencePairTypes" ]
      },
      "ValueReferencePairType" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/ValueObject"
        } ]
      },
      "ValueObject" : {
        "type" : "object",
        "properties" : {
          "value" : {
            "type" : "string"
          },
          "valueId" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "valueType" : {
            "type" : "string",
            "enum" : [ "anyUri", "base64Binary", "boolean", "date", "dateTime", "dateTimeStamp", "decimal", "integer", "long", "int", "short", "byte", "nonNegativeInteger", "positiveInteger", "unsignedLong", "unsignedInt", "unsignedShort", "unsignedByte", "nonPositiveInteger", "negativeInteger", "double", "duration", "dayTimeDuration", "yearMonthDuration", "float", "gDay", "gMonth", "gMonthDay", "gYear", "gYearMonth", "hexBinary", "NOTATION", "QName", "string", "normalizedString", "token", "language", "Name", "NCName", "ENTITY", "ID", "IDREF", "NMTOKEN", "time" ]
          }
        }
      },
      "Asset" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Identifiable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "properties" : {
            "kind" : {
              "$ref" : "#/components/schemas/AssetKind"
            },
            "assetIdentificationModel" : {
              "$ref" : "#/components/schemas/Reference"
            },
            "billOfMaterial" : {
              "$ref" : "#/components/schemas/Reference"
            }
          },
          "required" : [ "kind" ]
        } ]
      },
      "AssetKind" : {
        "type" : "string",
        "enum" : [ "Type", "Instance" ]
      },
      "ModelingKind" : {
        "type" : "string",
        "enum" : [ "Template", "Instance" ]
      },
      "Submodel" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Identifiable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "$ref" : "#/components/schemas/Qualifiable"
        }, {
          "$ref" : "#/components/schemas/HasSemantics"
        }, {
          "properties" : {
            "kind" : {
              "$ref" : "#/components/schemas/ModelingKind"
            },
            "submodelElements" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/SubmodelElement"
              }
            }
          }
        } ]
      },
      "Constraint" : {
        "type" : "object",
        "properties" : {
          "modelType" : {
            "$ref" : "#/components/schemas/ModelType"
          }
        },
        "required" : [ "modelType" ]
      },
      "Operation" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "inputVariable" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/OperationVariable"
              }
            },
            "outputVariable" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/OperationVariable"
              }
            },
            "inoutputVariable" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/OperationVariable"
              }
            }
          }
        } ]
      },
      "OperationVariable" : {
        "type" : "object",
        "properties" : {
          "value" : {
            "oneOf" : [ {
              "$ref" : "#/components/schemas/Blob"
            }, {
              "$ref" : "#/components/schemas/File"
            }, {
              "$ref" : "#/components/schemas/Capability"
            }, {
              "$ref" : "#/components/schemas/Entity"
            }, {
              "$ref" : "#/components/schemas/Event"
            }, {
              "$ref" : "#/components/schemas/BasicEvent"
            }, {
              "$ref" : "#/components/schemas/MultiLanguageProperty"
            }, {
              "$ref" : "#/components/schemas/Operation"
            }, {
              "$ref" : "#/components/schemas/Property"
            }, {
              "$ref" : "#/components/schemas/Range"
            }, {
              "$ref" : "#/components/schemas/ReferenceElement"
            }, {
              "$ref" : "#/components/schemas/RelationshipElement"
            }, {
              "$ref" : "#/components/schemas/SubmodelElementCollection"
            } ]
          }
        },
        "required" : [ "value" ]
      },
      "SubmodelElement" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Referable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "$ref" : "#/components/schemas/HasSemantics"
        }, {
          "$ref" : "#/components/schemas/Qualifiable"
        }, {
          "properties" : {
            "kind" : {
              "$ref" : "#/components/schemas/ModelingKind"
            }
          }
        } ]
      },
      "Event" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        } ]
      },
      "BasicEvent" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Event"
        }, {
          "properties" : {
            "observed" : {
              "$ref" : "#/components/schemas/Reference"
            }
          },
          "required" : [ "observed" ]
        } ]
      },
      "EntityType" : {
        "type" : "string",
        "enum" : [ "CoManagedEntity", "SelfManagedEntity" ]
      },
      "Entity" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "statements" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/SubmodelElement"
              }
            },
            "entityType" : {
              "$ref" : "#/components/schemas/EntityType"
            },
            "asset" : {
              "$ref" : "#/components/schemas/Reference"
            }
          },
          "required" : [ "entityType" ]
        } ]
      },
      "View" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Referable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "$ref" : "#/components/schemas/HasSemantics"
        }, {
          "properties" : {
            "containedElements" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            }
          }
        } ]
      },
      "ConceptDictionary" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Referable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "properties" : {
            "conceptDescriptions" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            }
          }
        } ]
      },
      "ConceptDescription" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Identifiable"
        }, {
          "$ref" : "#/components/schemas/HasDataSpecification"
        }, {
          "properties" : {
            "isCaseOf" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            }
          }
        } ]
      },
      "Capability" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        } ]
      },
      "Property" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "$ref" : "#/components/schemas/ValueObject"
        } ]
      },
      "Range" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "valueType" : {
              "type" : "string",
              "enum" : [ "anyUri", "base64Binary", "boolean", "date", "dateTime", "dateTimeStamp", "decimal", "integer", "long", "int", "short", "byte", "nonNegativeInteger", "positiveInteger", "unsignedLong", "unsignedInt", "unsignedShort", "unsignedByte", "nonPositiveInteger", "negativeInteger", "double", "duration", "dayTimeDuration", "yearMonthDuration", "float", "gDay", "gMonth", "gMonthDay", "gYear", "gYearMonth", "hexBinary", "NOTATION", "QName", "string", "normalizedString", "token", "language", "Name", "NCName", "ENTITY", "ID", "IDREF", "NMTOKEN", "time" ]
            },
            "min" : {
              "type" : "string"
            },
            "max" : {
              "type" : "string"
            }
          },
          "required" : [ "valueType", "min", "max" ]
        } ]
      },
      "MultiLanguageProperty" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "value" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/LangString"
              }
            },
            "valueId" : {
              "$ref" : "#/components/schemas/Reference"
            }
          }
        } ]
      },
      "File" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "value" : {
              "type" : "string"
            },
            "mimeType" : {
              "type" : "string"
            }
          },
          "required" : [ "mimeType", "value" ]
        } ]
      },
      "Blob" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "value" : {
              "type" : "string"
            },
            "mimeType" : {
              "type" : "string"
            }
          },
          "required" : [ "mimeType", "value" ]
        } ]
      },
      "ReferenceElement" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "value" : {
              "$ref" : "#/components/schemas/Reference"
            }
          }
        } ]
      },
      "SubmodelElementCollection" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "value" : {
              "type" : "array",
              "items" : {
                "oneOf" : [ {
                  "$ref" : "#/components/schemas/Blob"
                }, {
                  "$ref" : "#/components/schemas/File"
                }, {
                  "$ref" : "#/components/schemas/Capability"
                }, {
                  "$ref" : "#/components/schemas/Entity"
                }, {
                  "$ref" : "#/components/schemas/Event"
                }, {
                  "$ref" : "#/components/schemas/BasicEvent"
                }, {
                  "$ref" : "#/components/schemas/MultiLanguageProperty"
                }, {
                  "$ref" : "#/components/schemas/Operation"
                }, {
                  "$ref" : "#/components/schemas/Property"
                }, {
                  "$ref" : "#/components/schemas/Range"
                }, {
                  "$ref" : "#/components/schemas/ReferenceElement"
                }, {
                  "$ref" : "#/components/schemas/RelationshipElement"
                }, {
                  "$ref" : "#/components/schemas/SubmodelElementCollection"
                } ]
              }
            },
            "allowDuplicates" : {
              "type" : "boolean"
            },
            "ordered" : {
              "type" : "boolean"
            }
          }
        } ]
      },
      "RelationshipElement" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/SubmodelElement"
        }, {
          "properties" : {
            "first" : {
              "$ref" : "#/components/schemas/Reference"
            },
            "second" : {
              "$ref" : "#/components/schemas/Reference"
            }
          },
          "required" : [ "first", "second" ]
        } ]
      },
      "AnnotatedRelationshipElement" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/RelationshipElement"
        }, {
          "properties" : {
            "annotation" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            }
          }
        } ]
      },
      "Qualifier" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Constraint"
        }, {
          "$ref" : "#/components/schemas/HasSemantics"
        }, {
          "$ref" : "#/components/schemas/ValueObject"
        }, {
          "properties" : {
            "type" : {
              "type" : "string"
            }
          },
          "required" : [ "type" ]
        } ]
      },
      "Formula" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Constraint"
        }, {
          "properties" : {
            "dependsOn" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            }
          }
        } ]
      },
      "Security" : {
        "type" : "object",
        "properties" : {
          "accessControlPolicyPoints" : {
            "$ref" : "#/components/schemas/AccessControlPolicyPoints"
          },
          "certificate" : {
            "type" : "array",
            "items" : {
              "oneOf" : [ {
                "$ref" : "#/components/schemas/BlobCertificate"
              } ]
            }
          },
          "requiredCertificateExtension" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Reference"
            }
          }
        },
        "required" : [ "accessControlPolicyPoints" ]
      },
      "Certificate" : {
        "type" : "object"
      },
      "BlobCertificate" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Certificate"
        }, {
          "properties" : {
            "blobCertificate" : {
              "$ref" : "#/components/schemas/Blob"
            },
            "containedExtension" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/Reference"
              }
            },
            "lastCertificate" : {
              "type" : "boolean"
            }
          }
        } ]
      },
      "AccessControlPolicyPoints" : {
        "type" : "object",
        "properties" : {
          "policyAdministrationPoint" : {
            "$ref" : "#/components/schemas/PolicyAdministrationPoint"
          },
          "policyDecisionPoint" : {
            "$ref" : "#/components/schemas/PolicyDecisionPoint"
          },
          "policyEnforcementPoint" : {
            "$ref" : "#/components/schemas/PolicyEnforcementPoint"
          },
          "policyInformationPoints" : {
            "$ref" : "#/components/schemas/PolicyInformationPoints"
          }
        },
        "required" : [ "policyAdministrationPoint", "policyDecisionPoint", "policyEnforcementPoint" ]
      },
      "PolicyAdministrationPoint" : {
        "type" : "object",
        "properties" : {
          "localAccessControl" : {
            "$ref" : "#/components/schemas/AccessControl"
          },
          "externalAccessControl" : {
            "type" : "boolean"
          }
        },
        "required" : [ "externalAccessControl" ]
      },
      "PolicyInformationPoints" : {
        "type" : "object",
        "properties" : {
          "internalInformationPoint" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Reference"
            }
          },
          "externalInformationPoint" : {
            "type" : "boolean"
          }
        },
        "required" : [ "externalInformationPoint" ]
      },
      "PolicyEnforcementPoint" : {
        "type" : "object",
        "properties" : {
          "externalPolicyEnforcementPoint" : {
            "type" : "boolean"
          }
        },
        "required" : [ "externalPolicyEnforcementPoint" ]
      },
      "PolicyDecisionPoint" : {
        "type" : "object",
        "properties" : {
          "externalPolicyDecisionPoints" : {
            "type" : "boolean"
          }
        },
        "required" : [ "externalPolicyDecisionPoints" ]
      },
      "AccessControl" : {
        "type" : "object",
        "properties" : {
          "selectableSubjectAttributes" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "defaultSubjectAttributes" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "selectablePermissions" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "defaultPermissions" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "selectableEnvironmentAttributes" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "defaultEnvironmentAttributes" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "accessPermissionRule" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/AccessPermissionRule"
            }
          }
        }
      },
      "AccessPermissionRule" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Referable"
        }, {
          "$ref" : "#/components/schemas/Qualifiable"
        }, {
          "properties" : {
            "targetSubjectAttributes" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/SubjectAttributes"
              },
              "minItems" : 1
            },
            "permissionsPerObject" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/PermissionsPerObject"
              }
            }
          },
          "required" : [ "targetSubjectAttributes" ]
        } ]
      },
      "SubjectAttributes" : {
        "type" : "object",
        "properties" : {
          "subjectAttributes" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Reference"
            },
            "minItems" : 1
          }
        }
      },
      "PermissionsPerObject" : {
        "type" : "object",
        "properties" : {
          "object" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "targetObjectAttributes" : {
            "$ref" : "#/components/schemas/ObjectAttributes"
          },
          "permission" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Permission"
            }
          }
        }
      },
      "ObjectAttributes" : {
        "type" : "object",
        "properties" : {
          "objectAttribute" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Property"
            },
            "minItems" : 1
          }
        }
      },
      "Permission" : {
        "type" : "object",
        "properties" : {
          "permission" : {
            "$ref" : "#/components/schemas/Reference"
          },
          "kindOfPermission" : {
            "type" : "string",
            "enum" : [ "Allow", "Deny", "NotApplicable", "Undefined" ]
          }
        },
        "required" : [ "permission", "kindOfPermission" ]
      }
    },
    "links" : { },
    "callbacks" : { }
  }
}