217 lines
9.6 KiB
XML
217 lines
9.6 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" version="1.0" xmlns:gdml="http://cern.ch/2001/Schemas/GDML" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
|
<xs:include schemaLocation="gdml_core.xsd"/>
|
|
<xs:include schemaLocation="gdml_define.xsd"/>
|
|
<xs:include schemaLocation="gdml_materials.xsd"/>
|
|
<xs:include schemaLocation="gdml_solids.xsd"/>
|
|
<xs:include schemaLocation="gdml_replicas.xsd"/>
|
|
<xs:include schemaLocation="gdml_parameterised.xsd"/>
|
|
<xs:include schemaLocation="gdml_extensions.xsd"/>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:complexType abstract="true" name="IdentifiableVolumeType">
|
|
<xs:attribute name="name" type="xs:ID" use="required"/>
|
|
</xs:complexType>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:complexType name="SinglePlacementType">
|
|
<xs:annotation>
|
|
<xs:documentation>Represents a single unique copy a of an associated logical volume
|
|
in geometrical hierarchy</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:sequence>
|
|
<xs:choice minOccurs="1">
|
|
<xs:element name="file" type="FileReferenceType"/>
|
|
<xs:element name="volumeref" type="ReferenceType"/>
|
|
</xs:choice>
|
|
<xs:choice minOccurs="0">
|
|
<xs:element name="position" type="positionType"/>
|
|
<xs:element name="positionref" type="ReferenceType"/>
|
|
</xs:choice>
|
|
<xs:choice minOccurs="0">
|
|
<xs:element name="rotation" type="rotationType"/>
|
|
<xs:element name="rotationref" type="ReferenceType"/>
|
|
</xs:choice>
|
|
<xs:choice minOccurs="0">
|
|
<xs:element name="scale" type="scaleType"/>
|
|
<xs:element name="scaleref" type="ReferenceType"/>
|
|
</xs:choice>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" type="xs:ID"></xs:attribute>
|
|
</xs:complexType>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:complexType name="DivisionPlacementType">
|
|
<xs:annotation>
|
|
<xs:documentation>Represents a division of the associated logical volume
|
|
in geometrical hierarchy</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:sequence>
|
|
<xs:element name="volumeref" type="ReferenceType"/>
|
|
</xs:sequence>
|
|
<xs:attribute name="axis" type="xs:string" use="required"></xs:attribute>
|
|
<xs:attribute name="number" type="ExpressionOrIDREFType" use="required"></xs:attribute>
|
|
<xs:attribute name="width" type="ExpressionOrIDREFType" use="required"></xs:attribute>
|
|
<xs:attribute name="offset" type="ExpressionOrIDREFType" use="required"></xs:attribute>
|
|
<xs:attribute default="mm" name="unit" type="xs:string"></xs:attribute>
|
|
</xs:complexType>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:complexType name="VolumeType">
|
|
<xs:annotation>
|
|
<xs:documentation>Represents a top of a geometrical sub-hierarchy not placed in space
|
|
None of its children can coincide with its boundary defined by an associated solid
|
|
Two different placements of the same logical volume represent two different geometrical
|
|
hierarchies in space</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:complexContent>
|
|
<xs:extension base="IdentifiableVolumeType">
|
|
<xs:sequence>
|
|
<xs:element name="materialref" type="ReferenceType"/>
|
|
<xs:element name="solidref" type="ReferenceType"/>
|
|
<xs:choice minOccurs="0">
|
|
<xs:element maxOccurs="unbounded" name="physvol" type="SinglePlacementType"/>
|
|
<xs:element maxOccurs="1" minOccurs="1" name="divisionvol" type="DivisionPlacementType"/>
|
|
<xs:element maxOccurs="1" minOccurs="1" ref="replicavol"/>
|
|
<xs:element maxOccurs="1" minOccurs="1" name="paramvol" type="ParameterisedPlacementType"/>
|
|
</xs:choice>
|
|
<xs:element maxOccurs="unbounded" minOccurs="0" ref="loop"/>
|
|
<xs:element name="auxiliary" maxOccurs="unbounded" minOccurs="0" type="AuxiliaryType"/>
|
|
</xs:sequence>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:complexType name="AssemblyVolumeType">
|
|
<xs:annotation>
|
|
<xs:documentation>Allows to create a group of volumes bound together without a boundary
|
|
All the volumes exits inside the same virtual reference system of the assmebly volume
|
|
they belong to
|
|
When assembly volume is placed all its children follow the global transformation applied
|
|
to their assembly volume
|
|
After the assembly volume is placed its children exist as standalone placements in space
|
|
independent of each other</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:complexContent>
|
|
<xs:extension base="IdentifiableVolumeType">
|
|
<xs:choice>
|
|
<xs:element maxOccurs="unbounded" name="physvol" type="SinglePlacementType"/>
|
|
<xs:element maxOccurs="1" minOccurs="1" ref="replicavol"/>
|
|
<xs:element maxOccurs="1" minOccurs="1" name="paramvol" type="ParameterisedPlacementType"/>
|
|
</xs:choice>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:complexType name="LogicalSurfaceType">
|
|
<xs:annotation>
|
|
<xs:documentation>Base type for logical surfaces (for the moment only optical)
|
|
</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:attribute name="name" type="xs:ID" use="required"></xs:attribute>
|
|
<xs:attribute name="surfaceproperty" type="ExpressionOrIDREFType" use="required"></xs:attribute>
|
|
</xs:complexType>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:element abstract="true" name="Surface" type="LogicalSurfaceType">
|
|
<xs:annotation>
|
|
<xs:documentation>Abstract element for all solids substitution group</xs:documentation>
|
|
</xs:annotation>
|
|
</xs:element>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:element name="bordersurface" substitutionGroup="Surface">
|
|
<xs:annotation>
|
|
<xs:documentation>Surface between two physical volumes</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:complexType>
|
|
<xs:complexContent>
|
|
<xs:extension base="LogicalSurfaceType">
|
|
<xs:sequence>
|
|
<xs:element name="physvolref" type="ReferenceType"/>
|
|
<xs:element name="physvolref" type="ReferenceType"/>
|
|
</xs:sequence>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:element name="skinsurface" substitutionGroup="Surface">
|
|
<xs:annotation>
|
|
<xs:documentation>Surface between two physical volumes</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:complexType>
|
|
<xs:complexContent>
|
|
<xs:extension base="LogicalSurfaceType">
|
|
<xs:sequence>
|
|
<xs:element name="volumeref" type="ReferenceType"/>
|
|
</xs:sequence>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:element name="structure">
|
|
<xs:annotation>
|
|
<xs:documentation>Definitions of a geometrical hierarchy of a set of volumes</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:complexType>
|
|
<xs:sequence>
|
|
<xs:choice maxOccurs="unbounded">
|
|
<xs:element name="volume" type="VolumeType"/>
|
|
<xs:element name="assembly" type="AssemblyVolumeType"/>
|
|
<xs:element maxOccurs="unbounded" minOccurs="0" ref="loop"/>
|
|
<xs:element ref="ParameterisationAlgorithm"/>
|
|
</xs:choice>
|
|
<xs:element minOccurs="0" maxOccurs="unbounded" ref="Surface"/>
|
|
</xs:sequence>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
|
|
<xs:element name="gdml">
|
|
<xs:complexType>
|
|
<xs:sequence>
|
|
<xs:element ref="define"/>
|
|
<xs:element ref="materials"/>
|
|
<xs:element ref="solids"/>
|
|
<xs:element ref="structure"/>
|
|
<xs:element maxOccurs="unbounded" name="setup">
|
|
<xs:annotation>
|
|
<xs:documentation>Geometry setup representing the particular geometry hierarchy by refferring to
|
|
a given volume which becomes the top level volume</xs:documentation>
|
|
</xs:annotation>
|
|
<xs:complexType>
|
|
<xs:sequence>
|
|
<xs:element name="world" type="ReferenceType">
|
|
<xs:annotation>
|
|
<xs:documentation>A reference to the previously defined volume
|
|
in the structure block chosen by this setup
|
|
World volumme can't be an assembly volume</xs:documentation>
|
|
</xs:annotation>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
<xs:attribute name="name" type="xs:ID" use="required"/>
|
|
<xs:attribute name="version" type="xs:string" use="required"/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:sequence>
|
|
<xs:attribute fixed="2.10.0" name="version" type="xs:string">
|
|
<xs:annotation>
|
|
<xs:documentation>The GDML Schema version consists of 3 digits X.Y.Z
|
|
where these mean:
|
|
X - major number, increased when major new
|
|
features or backward incompatible bug fixes
|
|
are added and means the GDML Processor is
|
|
allowed to refuse processing of such a
|
|
document if this is using the more recent
|
|
version of the GDML Schema then GDML Processor
|
|
understands
|
|
Y - minor number, increased when incremental and
|
|
backward compatible changes or improvements
|
|
are made into the GDML Schema. GDML Processor
|
|
should be able to process such a document
|
|
using higher minor version number then that of
|
|
the GDML Processor
|
|
Z - bugfix revision number, increased when fully
|
|
backward compatible changes which resolve a
|
|
problem in GDML Schema are applied</xs:documentation>
|
|
</xs:annotation>
|
|
</xs:attribute>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:schema>
|