The Relax NG Compact schema for the Abstract Multi-Dimensional Image Model follows:
default namespace = "http://dicom.nema.org/PS3.19/models/AbstractImage"
start = AbstractImageDataSet
AbstractImageDataSet =
element AbstractImageDataSet {
element Component{
attribute idNumber { xsd:positiveInteger },
attribute datatype { ComponentDatatype },
attribute minValue { xsd:double }?,
attribute maxValue { xsd:double }?,
element Semantics { CodedTerm },
element Unit { CodedTerm }
}+,
element Dimension {
attribute idNumber { xsd:positiveInteger },
attribute numberOfSamples { xsd:positiveInteger },
element Semantics { CodedTerm },
(element Regular {
attribute width { xsd:double },
attribute spacing { xsd:double },
element Unit { CodedTerm },
element AxisDirection { CodedTerm }?,
element AxisOrientation { CodedTerm }?
}
| element Irregular {
attribute origin { xsd:double },
element SampleLocation {
attribute index { xsd:positiveInteger },
attribute width { xsd:double },
attribute distanceToOrigin { xsd:double }
}+,
element Unit { CodedTerm },
element AxisDirection { CodedTerm }?,
element AxisOrientation { CodedTerm }?
}
| element Qualitative {
element Sample {
attribute index { xsd:positiveInteger },
element Semantics { CodedTerm }
}+
}),
element Origin {
attribute index { xsd:nonNegativeInteger }?,
attribute xCoord { xsd:double },
attribute yCoord { xsd:double },
attribute zCoord { xsd:double }
}*,
element DirectionCosines {
attribute concernedSpatialDimension { xsd:positiveInteger },
attribute index { xsd:nonNegativeInteger }?,
attribute cosAlongX { xsd:double },
attribute cosAlongY { xsd:double },
attribute cosAlongZ { xsd:double }
}*
}+,
element PixelData { DimensionalData },
element PixelMapOfValidData {
attribute datatype { PixelMapDatatype },
(
attribute inValue { xsd:positiveInteger }
| attribute outValue { xsd:positiveInteger }
),
DimensionalData
}?
}
ComponentDatatype =
"SIGNED_INT8"
| "SIGNED_INT16"
| "SIGNED_INT32"
| "UNSIGNED_INT8"
| "UNSIGNED_INT16"
| "UNSIGNED_INT32"
| "FLOAT32"
| "FLOAT64"
PixelMapDatatype =
"BIT1"
| "UNSIGNED_INT8"
DimensionalData =
element DimensionalData {
attribute dimensionID { xsd:positiveInteger },
element DataAt
{
attribute indexWithinDimension { xsd:positiveInteger },
attribute descriptorUUID { xsd:string }?,
(DimensionalData | BulkDataPointer)
}+
}
BulkDataPointer =
attribute bulkDataUUID { xsd:string }
CodedTerm =
element CodeValue { xsd:string },
element CodingSchemeDesignator { xsd:string },
element CodingSchemeVersion { xsd:string }?,
element CodeMeaning { xsd:string }?,
(
element ContextIdentifier { xsd:string },
element ContextUID { xsd:string }?,
element MappingResource { xsd:string },
element MappingResourceUID { xsd:string }?,
element ContextGroupVersion { xsd:string }
)?,
(
element ContextGroupExtensionFlag { xsd:string },
element ContextGroupLocalVersion { xsd:string }?,
element ContextGroupExtensionCreatorUID { xsd:string }?
)?