I had a brain fart and thought that AI could write a blender python api ontology.  Here’s the first version.  Do with it what you will.<div dir="auto"><br></div><div dir="auto"><div>@prefix bpy: <<a href="http://blender.org/ontology/bpy#">http://blender.org/ontology/bpy#</a>> .<br>@prefix rdf: <<a href="http://www.w3.org/1999/02/22-rdf-syntax-ns#">http://www.w3.org/1999/02/22-rdf-syntax-ns#</a>> .<br>@prefix rdfs: <<a href="http://www.w3.org/2000/01/rdf-schema#">http://www.w3.org/2000/01/rdf-schema#</a>> .<br>@prefix owl: <<a href="http://www.w3.org/2002/07/owl#">http://www.w3.org/2002/07/owl#</a>> .<br>@prefix xsd: <<a href="http://www.w3.org/2001/XMLSchema#">http://www.w3.org/2001/XMLSchema#</a>> .<br>@prefix foaf: <<a href="http://xmlns.com/foaf/0.1/">http://xmlns.com/foaf/0.1/</a>> .<br>@prefix dc: <<a href="http://purl.org/dc/elements/1.1/">http://purl.org/dc/elements/1.1/</a>> .<br><br># Ontology Declaration<br><<a href="http://blender.org/ontology/bpy">http://blender.org/ontology/bpy</a>> a owl:Ontology ;<br>    dc:title "Blender Python API Ontology" ;<br>    dc:description "An ontology describing the structure and components of the Blender Python API (bpy)" ;<br>    dc:creator "Generated for Blender 3D modeling software" ;<br>    owl:versionInfo "1.0" .<br><br># ==========================================<br># CORE CLASSES<br># ==========================================<br><br># Base Blender Object<br>bpy:BlenderObject a owl:Class ;<br>    rdfs:label "Blender Object" ;<br>    rdfs:comment "Base class for all objects in Blender" .<br><br># Scene Management<br>bpy:Scene a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Scene" ;<br>    rdfs:comment "A scene in Blender containing objects, cameras, lights, etc." .<br><br>bpy:Collection a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Collection" ;<br>    rdfs:comment "A collection of objects in Blender for organization" .<br><br># 3D Objects<br>bpy:Object a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "3D Object" ;<br>    rdfs:comment "A 3D object in Blender scene" .<br><br>bpy:Mesh a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Mesh" ;<br>    rdfs:comment "3D mesh data containing vertices, edges, and faces" .<br><br>bpy:Camera a owl:Class ;<br>    rdfs:subClassOf bpy:Object ;<br>    rdfs:label "Camera" ;<br>    rdfs:comment "Camera object for rendering views" .<br><br>bpy:Light a owl:Class ;<br>    rdfs:subClassOf bpy:Object ;<br>    rdfs:label "Light" ;<br>    rdfs:comment "Light source object" .<br><br>bpy:Curve a owl:Class ;<br>    rdfs:subClassOf bpy:Object ;<br>    rdfs:label "Curve" ;<br>    rdfs:comment "Curve or surface object" .<br><br>bpy:Armature a owl:Class ;<br>    rdfs:subClassOf bpy:Object ;<br>    rdfs:label "Armature" ;<br>    rdfs:comment "Bone system for animation and deformation" .<br><br># Materials and Textures<br>bpy:Material a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Material" ;<br>    rdfs:comment "Material defining surface appearance" .<br><br>bpy:Texture a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Texture" ;<br>    rdfs:comment "Texture for materials or procedural generation" .<br><br>bpy:Image a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Image" ;<br>    rdfs:comment "Image data for textures" .<br><br># Animation<br>bpy:Action a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Action" ;<br>    rdfs:comment "Animation action containing keyframes" .<br><br>bpy:Keyframe a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Keyframe" ;<br>    rdfs:comment "Animation keyframe at specific time" .<br><br># Modifiers<br>bpy:Modifier a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Modifier" ;<br>    rdfs:comment "Modifier that affects object geometry or behavior" .<br><br>bpy:SubsurfModifier a owl:Class ;<br>    rdfs:subClassOf bpy:Modifier ;<br>    rdfs:label "Subdivision Surface Modifier" ;<br>    rdfs:comment "Subdivision surface modifier for smoothing" .<br><br>bpy:ArrayModifier a owl:Class ;<br>    rdfs:subClassOf bpy:Modifier ;<br>    rdfs:label "Array Modifier" ;<br>    rdfs:comment "Array modifier for duplicating objects" .<br><br># Geometry Elements<br>bpy:Vertex a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Vertex" ;<br>    rdfs:comment "3D point in mesh geometry" .<br><br>bpy:Edge a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Edge" ;<br>    rdfs:comment "Line connecting two vertices" .<br><br>bpy:Face a owl:Class ;<br>    rdfs:subClassOf bpy:BlenderObject ;<br>    rdfs:label "Face" ;<br>    rdfs:comment "Polygon face in mesh" .<br><br># Context and Data<br>bpy:Context a owl:Class ;<br>    rdfs:label "Context" ;<br>    rdfs:comment "Current Blender context state" .<br><br>bpy:Data a owl:Class ;<br>    rdfs:label "Data" ;<br>    rdfs:comment "Blender data blocks container" .<br><br># Operators<br>bpy:Operator a owl:Class ;<br>    rdfs:label "Operator" ;<br>    rdfs:comment "Blender operation or command" .<br><br># ==========================================<br># OBJECT PROPERTIES<br># ==========================================<br><br># Spatial Properties<br>bpy:hasLocation a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:string ;<br>    rdfs:label "has location" ;<br>    rdfs:comment "3D location coordinates (x, y, z)" .<br><br>bpy:hasRotation a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:string ;<br>    rdfs:label "has rotation" ;<br>    rdfs:comment "3D rotation values" .<br><br>bpy:hasScale a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:string ;<br>    rdfs:label "has scale" ;<br>    rdfs:comment "3D scale values" .<br><br># Relationships<br>bpy:containsObject a owl:ObjectProperty ;<br>    rdfs:domain bpy:Scene ;<br>    rdfs:range bpy:Object ;<br>    rdfs:label "contains object" ;<br>    rdfs:comment "Scene contains this object" .<br><br>bpy:hasMesh a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Mesh ;<br>    rdfs:label "has mesh" ;<br>    rdfs:comment "Object uses this mesh data" .<br><br>bpy:hasMaterial a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Material ;<br>    rdfs:label "has material" ;<br>    rdfs:comment "Object has assigned material" .<br><br>bpy:hasModifier a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Modifier ;<br>    rdfs:label "has modifier" ;<br>    rdfs:comment "Object has applied modifier" .<br><br>bpy:hasParent a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Object ;<br>    rdfs:label "has parent" ;<br>    rdfs:comment "Object has parent object" .<br><br>bpy:hasChild a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Object ;<br>    rdfs:label "has child" ;<br>    rdfs:comment "Object has child object" ;<br>    owl:inverseOf bpy:hasParent .<br><br>bpy:inCollection a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Collection ;<br>    rdfs:label "in collection" ;<br>    rdfs:comment "Object belongs to collection" .<br><br># Mesh Relationships<br>bpy:hasVertex a owl:ObjectProperty ;<br>    rdfs:domain bpy:Mesh ;<br>    rdfs:range bpy:Vertex ;<br>    rdfs:label "has vertex" ;<br>    rdfs:comment "Mesh contains this vertex" .<br><br>bpy:hasEdge a owl:ObjectProperty ;<br>    rdfs:domain bpy:Mesh ;<br>    rdfs:range bpy:Edge ;<br>    rdfs:label "has edge" ;<br>    rdfs:comment "Mesh contains this edge" .<br><br>bpy:hasFace a owl:ObjectProperty ;<br>    rdfs:domain bpy:Mesh ;<br>    rdfs:range bpy:Face ;<br>    rdfs:label "has face" ;<br>    rdfs:comment "Mesh contains this face" .<br><br>bpy:connectsVertex a owl:ObjectProperty ;<br>    rdfs:domain bpy:Edge ;<br>    rdfs:range bpy:Vertex ;<br>    rdfs:label "connects vertex" ;<br>    rdfs:comment "Edge connects these vertices" .<br><br># Material Relationships<br>bpy:hasTexture a owl:ObjectProperty ;<br>    rdfs:domain bpy:Material ;<br>    rdfs:range bpy:Texture ;<br>    rdfs:label "has texture" ;<br>    rdfs:comment "Material uses this texture" .<br><br>bpy:usesImage a owl:ObjectProperty ;<br>    rdfs:domain bpy:Texture ;<br>    rdfs:range bpy:Image ;<br>    rdfs:label "uses image" ;<br>    rdfs:comment "Texture uses this image" .<br><br># Animation Relationships<br>bpy:hasAction a owl:ObjectProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range bpy:Action ;<br>    rdfs:label "has action" ;<br>    rdfs:comment "Object has animation action" .<br><br>bpy:hasKeyframe a owl:ObjectProperty ;<br>    rdfs:domain bpy:Action ;<br>    rdfs:range bpy:Keyframe ;<br>    rdfs:label "has keyframe" ;<br>    rdfs:comment "Action contains this keyframe" .<br><br># ==========================================<br># DATA PROPERTIES<br># ==========================================<br><br># Identification<br>bpy:name a owl:DatatypeProperty ;<br>    rdfs:domain bpy:BlenderObject ;<br>    rdfs:range xsd:string ;<br>    rdfs:label "name" ;<br>    rdfs:comment "Object name identifier" .<br><br>bpy:type a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:string ;<br>    rdfs:label "type" ;<br>    rdfs:comment "Object type (MESH, CAMERA, LIGHT, etc.)" .<br><br># Numerical Properties<br>bpy:vertexCount a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Mesh ;<br>    rdfs:range xsd:integer ;<br>    rdfs:label "vertex count" ;<br>    rdfs:comment "Number of vertices in mesh" .<br><br>bpy:faceCount a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Mesh ;<br>    rdfs:range xsd:integer ;<br>    rdfs:label "face count" ;<br>    rdfs:comment "Number of faces in mesh" .<br><br>bpy:frame a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Keyframe ;<br>    rdfs:range xsd:integer ;<br>    rdfs:label "frame" ;<br>    rdfs:comment "Frame number for keyframe" .<br><br>bpy:value a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Keyframe ;<br>    rdfs:range xsd:float ;<br>    rdfs:label "value" ;<br>    rdfs:comment "Keyframe value" .<br><br># Boolean Properties<br>bpy:isVisible a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:boolean ;<br>    rdfs:label "is visible" ;<br>    rdfs:comment "Object visibility state" .<br><br>bpy:isSelected a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:boolean ;<br>    rdfs:label "is selected" ;<br>    rdfs:comment "Object selection state" .<br><br>bpy:isActive a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Object ;<br>    rdfs:range xsd:boolean ;<br>    rdfs:label "is active" ;<br>    rdfs:comment "Object is active object" .<br><br># Camera Properties<br>bpy:focalLength a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Camera ;<br>    rdfs:range xsd:float ;<br>    rdfs:label "focal length" ;<br>    rdfs:comment "Camera focal length in mm" .<br><br>bpy:sensorWidth a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Camera ;<br>    rdfs:range xsd:float ;<br>    rdfs:label "sensor width" ;<br>    rdfs:comment "Camera sensor width in mm" .<br><br># Light Properties<br>bpy:energy a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Light ;<br>    rdfs:range xsd:float ;<br>    rdfs:label "energy" ;<br>    rdfs:comment "Light energy/strength" .<br><br>bpy:color a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Light ;<br>    rdfs:range xsd:string ;<br>    rdfs:label "color" ;<br>    rdfs:comment "Light color (R, G, B)" .<br><br># Material Properties<br>bpy:roughness a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Material ;<br>    rdfs:range xsd:float ;<br>    rdfs:label "roughness" ;<br>    rdfs:comment "Material roughness value" .<br><br>bpy:metallic a owl:DatatypeProperty ;<br>    rdfs:domain bpy:Material ;<br>    rdfs:range xsd:float ;<br>    rdfs:label "metallic" ;<br>    rdfs:comment "Material metallic value" .<br><br># ==========================================<br># DEFINED INDIVIDUALS/INSTANCES<br># ==========================================<br><br># Default Scene<br>bpy:DefaultScene a bpy:Scene ;<br>    bpy:name "Scene" ;<br>    rdfs:label "Default Scene" ;<br>    rdfs:comment "Default Blender scene" .<br><br># Default Objects<br>bpy:DefaultCube a bpy:Object ;<br>    bpy:name "Cube" ;<br>    bpy:type "MESH" ;<br>    bpy:isVisible true ;<br>    rdfs:label "Default Cube" ;<br>    rdfs:comment "Default cube object in new Blender scene" .<br><br>bpy:DefaultCamera a bpy:Camera ;<br>    bpy:name "Camera" ;<br>    bpy:type "CAMERA" ;<br>    bpy:focalLength 50.0 ;<br>    rdfs:label "Default Camera" ;<br>    rdfs:comment "Default camera in new Blender scene" .<br><br>bpy:DefaultLight a bpy:Light ;<br>    bpy:name "Light" ;<br>    bpy:type "LIGHT" ;<br>    bpy:energy 10.0 ;<br>    rdfs:label "Default Light" ;<br>    rdfs:comment "Default light in new Blender scene" .</div><br></div>