Deprecate the h5dump XML feature. (#5490)

This commit is contained in:
Allen Byrne
2025-04-30 08:09:41 -05:00
committed by GitHub
parent e0dbcebe0d
commit 62b12872cc
4 changed files with 893 additions and 0 deletions
+6
View File
@@ -490,6 +490,12 @@ New Features
Tools:
------
- Deprecated h5dump XML option
The h5dump XML option is deprecated and will be removed in a future
release. The XML output format has not been maintained and is not
up-to-date with the latest features of HDF5.
- Added h5dump command option to set the floating point format for long double
The new option is --lformat, which allows the user to set the
+7
View File
@@ -193,6 +193,13 @@
*
* h5dump --dataset=/foo --filedriver=family fam%05d.h5
*
* \subsubsection subsubsec_cltools_h5dump_xml XML Deprecated
* The XML option for h5dump has been deprecated. The methods for displaying XML output
* has not been updated since 1.10.0 was released. Many new features introduced into the
* library have never been added to the XML generation functions. Also the dtd and xsd
* files for XML have been archived, and copies of the files, HDF5-File.dtd and HDF5-File.xsd,
* have been saved in the "source"/tools/test/h5dump/testfiles/xml folder.
*
*/
#include "hdf5.h"
@@ -0,0 +1,306 @@
<!--
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the files COPYING and Copyright.html. COPYING can be found at the root *
* of the source code distribution tree; Copyright.html can be found at the *
* root level of an installed copy of the electronic HDF5 document set and *
* is linked from the top-level documents page. It can also be found at *
* https://support.hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
* access to either file, you may request a copy from help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-->
<!ELEMENT HDF5-File (UserBlock?, SuperBlock?, RootGroup)>
<!ELEMENT UserBlock (#PCDATA)>
<!ELEMENT SuperBlock EMPTY>
<!ATTLIST SuperBlock
FormatVersion CDATA #REQUIRED
LengthSize CDATA #REQUIRED
OffsetSize CDATA #REQUIRED
>
<!--
The root group is the same as any other group, except
its name is fixed. Also, the RootGroup may not be
a GroupPtr.
-->
<!ELEMENT RootGroup (Attribute*, (Group | Dataset | NamedDataType | SoftLink)*)>
<!ATTLIST RootGroup
Name CDATA #FIXED "/"
OBJ-XID ID #REQUIRED
H5Path CDATA #FIXED "/"
>
<!--
A Group may belong to 1 or more Groups.
The "Parents" lists the Groups it is a member of.
The Group should be described fully in one element. If it appears
in additional Groups, it should be represented as a "GroupPtr", which
has the IDREF of the element with the full description.
This rule is the same for Datasets and NamedDatatypes, below.
-->
<!ELEMENT GroupPtr EMPTY>
<!ATTLIST GroupPtr
OBJ-XID IDREF #REQUIRED
H5Path CDATA #REQUIRED
Parents IDREFS #REQUIRED
H5ParentPaths CDATA #REQUIRED
>
<!ELEMENT Group (GroupPtr | (Attribute*, (Group | Dataset | NamedDataType | SoftLink)*))>
<!ATTLIST Group
Name CDATA #REQUIRED
OBJ-XID ID #REQUIRED
Parents IDREFS #REQUIRED
H5ParentPaths CDATA #REQUIRED
H5Path CDATA #REQUIRED
>
<!ELEMENT Attribute (Dataspace, DataType, Data)>
<!ATTLIST Attribute
Name CDATA #REQUIRED
>
<!ELEMENT SoftLink EMPTY>
<!ATTLIST SoftLink
LinkName CDATA #REQUIRED
TargetPath CDATA #REQUIRED
TargetObj IDREF #IMPLIED
OBJ-XID ID #REQUIRED
Parents IDREFS #REQUIRED
H5ParentPaths CDATA #REQUIRED
H5SourcePath CDATA #REQUIRED
>
<!ELEMENT DatasetPtr EMPTY>
<!ATTLIST DatasetPtr
OBJ-XID IDREF #REQUIRED
H5Path CDATA #REQUIRED
>
<!ELEMENT Dataset (DatasetPtr | (StorageLayout?, FillValueInfo?, Dataspace, (DataType | NamedDataTypePtr), Attribute*, Data))>
<!ATTLIST Dataset
Name CDATA #REQUIRED
H5Path CDATA #REQUIRED
OBJ-XID ID #REQUIRED
Parents IDREFS #REQUIRED
H5ParentPaths CDATA #REQUIRED
>
<!ELEMENT Dataspace (ScalarDataspace | SimpleDataspace | ComplexDataspace)>
<!ELEMENT ScalarDataspace EMPTY>
<!ELEMENT Dimension EMPTY>
<!ATTLIST Dimension
DimSize CDATA "0"
MaxDimSize CDATA #IMPLIED
>
<!ELEMENT SimpleDataspace (Dimension)+>
<!ATTLIST SimpleDataspace
Ndims CDATA #REQUIRED
>
<!--
Note: ComplexDataspace is not defined or implemented by the
HDF5.1.4 library
-->
<!ELEMENT ComplexDataspace EMPTY>
<!ELEMENT NamedDataTypePtr EMPTY>
<!ATTLIST NamedDataTypePtr
OBJ-XID IDREF #REQUIRED
H5Path CDATA #IMPLIED
>
<!ELEMENT NamedDataType (NamedDataTypePtr | (Attribute*, DataType))>
<!ATTLIST NamedDataType
Name CDATA #REQUIRED
OBJ-XID ID #REQUIRED
Parents IDREFS #REQUIRED
H5Path CDATA #IMPLIED
H5ParentPaths CDATA #REQUIRED
>
<!--
The DataType elements describe the HDF5 DataType Object, which describes
the layout of a data element in the HDF-5 file.
For HDF5.1.4, note new <ArrayType>
-->
<!ELEMENT DataType (AtomicType | CompoundType | VLType | ArrayType)>
<!ELEMENT AtomicType (IntegerType | FloatType | StringType | TimeType | BitfieldType | OpaqueType | ReferenceType | EnumType)>
<!ELEMENT IntegerType EMPTY>
<!ATTLIST IntegerType
ByteOrder (BE | LE) #REQUIRED
Sign (true | false) #REQUIRED
Size (1 | 2 | 4 | 8) #REQUIRED
>
<!ELEMENT FloatType EMPTY>
<!ATTLIST FloatType
ByteOrder (BE | LE) #REQUIRED
Size (4 | 8) #REQUIRED
SignBitLocation CDATA #REQUIRED
ExponentBits CDATA #REQUIRED
ExponentLocation CDATA #REQUIRED
MantissaBits CDATA #REQUIRED
MantissaLocation CDATA #REQUIRED
>
<!ELEMENT TimeType EMPTY>
<!ELEMENT StringType EMPTY>
<!ATTLIST StringType
Cset (H5T_CSET_ASCII) #REQUIRED
StrSize CDATA #REQUIRED
StrPad (H5T_STR_NULLTERM | H5T_STR_NULLPAD | H5T_STR_SPACEPAD) #REQUIRED
>
<!-- BitField was not specified in earlier versions of the DTD -->
<!ELEMENT BitfieldType EMPTY>
<!ATTLIST BitfieldType
ByteOrder (BE | LE) #REQUIRED
Size (1 | 2 | 4 | 8) #REQUIRED
>
<!-- OpaqueType was not specified in earlier versions of the DTD -->
<!ELEMENT OpaqueType EMPTY>
<!ATTLIST OpaqueType
Tag CDATA #REQUIRED
Size CDATA #REQUIRED
>
<!ELEMENT ReferenceType (ObjectReferenceType | RegionReferenceType)>
<!ELEMENT ObjectReferenceType EMPTY>
<!ELEMENT RegionReferenceType EMPTY>
<!ELEMENT EnumType (DataType, (EnumElement, EnumValue)+)>
<!ATTLIST EnumType
Nelems CDATA #REQUIRED
>
<!ELEMENT EnumElement (#PCDATA)>
<!ELEMENT EnumValue (#PCDATA)>
<!--
CompoundType is simplified in 5.1.4, eliminating the dimensions.
See the ArrayType below.
-->
<!ELEMENT CompoundType (Field)+>
<!ELEMENT Field (DataType)>
<!ATTLIST Field
FieldName CDATA #REQUIRED
>
<!ELEMENT VLType (DataType)>
<!--
ArrayType is new in 1.4. This replaces the dimensions in the
CompoundType
-->
<!ELEMENT ArrayType (ArrayDimension+, DataType)>
<!ATTLIST ArrayType
Ndims CDATA #IMPLIED
>
<!-- Note: Dim permutations not implemented yet in library -->
<!ELEMENT ArrayDimension EMPTY>
<!ATTLIST ArrayDimension
DimSize CDATA "0"
DimPerm CDATA "0"
>
<!--
The StorageLayout describes optional schemes for organizing the storage
in the HDF-5 file.
-->
<!ELEMENT StorageLayout (ContiguousLayout | ChunkedLayout | CompactLayout | ExternalLayout)>
<!--
Note: ContiguousLayout is the default. If no StorageLayout is
specified, ContiguousLayout must be used.
-->
<!ELEMENT CompactLayout EMPTY>
<!--
Minor change: Compression information is optional.
Note that Compression element is not defined yet.
-->
<!ELEMENT RequiredFilter (Shuffle? | Fletcher32? | SZIP? | Deflate?)>
<!ELEMENT ChunkedLayout (Compression?, ChunkDimension+, RequiredFilter*)>
<!ATTLIST ChunkedLayout
Ndims CDATA #REQUIRED
>
<!ELEMENT ChunkDimension EMPTY>
<!ATTLIST ChunkDimension
DimSize CDATA "0"
>
<!ELEMENT Compression EMPTY>
<!ELEMENT ContiguousLayout EMPTY>
<!ELEMENT ExternalLayout (ExternalFileInfo)+>
<!ELEMENT ExternalFileInfo EMPTY>
<!ATTLIST ExternalFileInfo
FileName CDATA #IMPLIED
ExternalFileOffset CDATA #IMPLIED
ExternalFileSize CDATA #IMPLIED
>
<!--
The Data element describes the data in the HDF-5 file (as
opposed to the description of the data objects, above).
This element is not specified in detail. Future versions
of the DTD will add more detailed mark-up for describing
the data.
In version 5.1.4, the h5dump utility emits XML. The
output of this utility is the default format for
<DataFromFile>
-->
<!-- The description above of the object that contains this data -->
<!ELEMENT Data (NativeHDF5 | DataFromFile | NoData)>
<!ATTLIST Data
HDF5OBJ IDREF #IMPLIED
>
<!--
The NativeHDF5 element points to data in an HDF5 file.
The XML processor must pass this information to software
that can call the HDF5 library to access the data.
In the future, this should use the xlink facility as
strongly as possible. In particular;
a) there should be an 'xlink:role' defined for 'data in
an HDF-5 file'
b) there should be an 'xlink:title' with a standard
string, such as "Data from HDF5 file, <file name> <path>"
or equivalent for attributes, subsets, etc.
-->
<!ELEMENT NativeHDF5 EMPTY>
<!ATTLIST NativeHDF5
xlink_type CDATA #FIXED "locator"
xlink_href CDATA #REQUIRED
H5Path CDATA #REQUIRED
H5ObjectType (HDF5Attribute | HDF5Dataset) #REQUIRED
OBJ-XID ID #REQUIRED
start CDATA #IMPLIED
nelems CDATA #REQUIRED
stride CDATA #IMPLIED
block CDATA #IMPLIED
>
<!--
The DataFromFile element contains text which represents the values of
data from the HDF5 file.
The format and structure of this element is not fully specified
at this time, but a proposal for representing common types of
data can be found at https://support.hdfgroup.org/HDF5/XML/.
-->
<!ELEMENT DataFromFile (#PCDATA)>
<!--
The HDF5 object may be uninitialized. If so, use this element to describe
the data.
-->
<!ELEMENT NoData EMPTY>
<!ATTLIST NoData
FillValue CDATA "0"
>
<!ELEMENT Shuffle (#PCDATA)>
<!ELEMENT Fletcher32 (#PCDATA)>
<!ATTLIST Deflate
Level CDATA #REQUIRED
>
<!ELEMENT Deflate (#PCDATA)>
<!ELEMENT SZIP (#PCDATA)>
<!ATTLIST SZIP
Mode CDATA #IMPLIED
Coding CDATA #REQUIRED
ByteOrder CDATA #REQUIRED
Header CDATA #IMPLIED
>
<!ELEMENT FillValueInfo (FillValue)>
<!ATTLIST FillValueInfo
AllocationTime CDATA #REQUIRED
FillTime CDATA #REQUIRED
>
<!ELEMENT FillValue (Data | NoFill)>
<!ELEMENT NoFill (#PCDATA)>
@@ -0,0 +1,574 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy v4.2 U (http://www.xmlspy.com) by Robert McGrath (NCSA) -->
<!--W3C Schema generated by XML Spy v4.2 U (http://www.xmlspy.com)-->
<xs:schema targetNamespace="/HDF5/XML/schema/HDF5-File" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:hdf5="/HDF5/XML/schema/HDF5-File" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:element name="ArrayDimension">
<xs:complexType>
<xs:attribute name="DimSize" type="xs:string" default="0"/>
<xs:attribute name="DimPerm" type="xs:string" default="0">
<xs:annotation>
<xs:documentation>This feature is not implemented in HDF5. This attribute should be ignored (and deleted as soon as possible).</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="ArrayType">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:ArrayDimension" maxOccurs="32"/>
<xs:element ref="hdf5:DataType"/>
</xs:sequence>
<xs:attribute name="Ndims" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="AtomicType">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:IntegerType"/>
<xs:element ref="hdf5:FloatType"/>
<xs:element ref="hdf5:StringType"/>
<xs:element ref="hdf5:TimeType"/>
<xs:element ref="hdf5:BitfieldType"/>
<xs:element ref="hdf5:OpaqueType"/>
<xs:element ref="hdf5:ReferenceType"/>
<xs:element ref="hdf5:EnumType"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Attribute">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:Dataspace"/>
<xs:element ref="hdf5:DataType"/>
<xs:element ref="hdf5:Data"/>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="BitfieldType">
<xs:complexType>
<xs:attribute name="ByteOrder" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="BE"/>
<xs:enumeration value="LE"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Size" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="4"/>
<xs:enumeration value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="ChunkDimension">
<xs:complexType>
<xs:attribute name="DimSize" type="xs:string" default="0"/>
</xs:complexType>
</xs:element>
<xs:element name="ChunkedLayout">
<xs:complexType>
<xs:sequence>
<xs:element name="Compression" minOccurs="0">
<xs:annotation>
<xs:documentation>This element is denigrated. Compression is one of the required filters</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="hdf5:ChunkDimension" maxOccurs="32"/>
<xs:element ref="hdf5:RequiredFilter" minOccurs="0" maxOccurs="32"/>
</xs:sequence>
<xs:attribute name="Ndims" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="CompactLayout">
<xs:complexType/>
</xs:element>
<xs:element name="ComplexDataspace">
<xs:annotation>
<xs:documentation>This option is not implemented.</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="CompoundType">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="hdf5:Field"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Compression">
<xs:annotation>
<xs:documentation>This element is denigrated, compression filters are under RequiredFilters</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
<xs:element name="ContiguousLayout">
<xs:complexType/>
</xs:element>
<xs:element name="Data">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:NativeHDF5"/>
<xs:element ref="hdf5:DataFromFile"/>
<xs:element ref="hdf5:NoData"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="DataFromFile" type="xs:string">
<xs:annotation>
<xs:documentation>Format of the data in this element is not defined.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="DataType">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:AtomicType"/>
<xs:element ref="hdf5:CompoundType"/>
<xs:element ref="hdf5:VLType"/>
<xs:element ref="hdf5:ArrayType"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Dataset">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:DatasetPtr"/>
<xs:sequence>
<xs:element ref="hdf5:StorageLayout" minOccurs="0"/>
<xs:element ref="hdf5:FillValueInfo" minOccurs="0"/>
<xs:element ref="hdf5:Dataspace"/>
<xs:choice>
<xs:element ref="hdf5:DataType"/>
<xs:element ref="hdf5:NamedDataTypePtr"/>
</xs:choice>
<xs:element ref="hdf5:Attribute" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="hdf5:Data"/>
</xs:sequence>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="OBJ-XID" type="xs:ID" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="required"/>
<xs:attribute name="Parents" type="xs:IDREFS" use="required"/>
<xs:attribute name="H5ParentPaths" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="DatasetPtr">
<xs:complexType>
<xs:attribute name="OBJ-XID" type="xs:IDREF" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Dataspace">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:ScalarDataspace"/>
<xs:element ref="hdf5:SimpleDataspace"/>
<xs:element ref="hdf5:ComplexDataspace"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Dimension">
<xs:complexType>
<xs:attribute name="DimSize" type="xs:string" default="0"/>
<xs:attribute name="MaxDimSize" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="EnumElement" type="xs:string"/>
<xs:element name="EnumType">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="hdf5:DataType"/>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="hdf5:EnumElement"/>
<xs:element ref="hdf5:EnumValue"/>
</xs:sequence>
</xs:sequence>
<xs:attribute name="Nelems" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="EnumValue" type="xs:string"/>
<xs:element name="ExternalFileInfo">
<xs:complexType>
<xs:attribute name="FileName" type="xs:string"/>
<xs:attribute name="ExternalFileOffset" type="xs:string"/>
<xs:attribute name="ExternalFileSize" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="ExternalLayout">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element ref="hdf5:ExternalFileInfo"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Field">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:DataType"/>
</xs:sequence>
<xs:attribute name="FieldName" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="FloatType">
<xs:complexType>
<xs:attribute name="ByteOrder" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="BE"/>
<xs:enumeration value="LE"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Size" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="4"/>
<xs:enumeration value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="SignBitLocation" type="xs:string" use="required"/>
<xs:attribute name="ExponentBits" type="xs:string" use="required"/>
<xs:attribute name="ExponentLocation" type="xs:string" use="required"/>
<xs:attribute name="MantissaBits" type="xs:string" use="required"/>
<xs:attribute name="MantissaLocation" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Group">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:GroupPtr"/>
<xs:sequence>
<xs:element ref="hdf5:Attribute" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="hdf5:Group"/>
<xs:element ref="hdf5:Dataset"/>
<xs:element ref="hdf5:NamedDataType"/>
<xs:element ref="hdf5:SoftLink"/>
</xs:choice>
</xs:sequence>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="OBJ-XID" type="xs:ID" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="required"/>
<xs:attribute name="Parents" type="xs:IDREFS" use="required"/>
<xs:attribute name="H5ParentPaths" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="GroupPtr">
<xs:complexType>
<xs:attribute name="OBJ-XID" type="xs:IDREF" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="required"/>
<xs:attribute name="Parents" type="xs:IDREFS" use="required"/>
<xs:attribute name="H5ParentPaths" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="HDF5-File">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:UserBlock" minOccurs="0"/>
<xs:element ref="hdf5:SuperBlock" minOccurs="0"/>
<xs:element ref="hdf5:RootGroup"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="IntegerType">
<xs:complexType>
<xs:attribute name="ByteOrder" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="BE"/>
<xs:enumeration value="LE"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Sign" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="true"/>
<xs:enumeration value="false"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Size" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="4"/>
<xs:enumeration value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="NamedDataType">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:NamedDataTypePtr"/>
<xs:sequence>
<xs:element ref="hdf5:Attribute" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="hdf5:DataType"/>
</xs:sequence>
</xs:choice>
<xs:attribute name="Name" type="xs:string" use="required"/>
<xs:attribute name="OBJ-XID" type="xs:ID" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="optional"/>
<xs:attribute name="Parents" type="xs:IDREFS" use="required"/>
<xs:attribute name="H5ParentPaths" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="NamedDataTypePtr">
<xs:complexType>
<xs:attribute name="OBJ-XID" type="xs:IDREF" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="NativeHDF5">
<xs:annotation>
<xs:documentation>This element needs to be refined to implement a structured pointer to a file+dataset+selection</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="xlink_type" type="xs:string" fixed="locator"/>
<xs:attribute name="xlink_href" type="xs:string" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="required"/>
<xs:attribute name="H5ObjectType" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="HDF5Attribute"/>
<xs:enumeration value="HDF5Dataset"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="OBJ-XID" type="xs:ID" use="required"/>
<xs:attribute name="start" type="xs:string"/>
<xs:attribute name="nelems" type="xs:string" use="required"/>
<xs:attribute name="stride" type="xs:string"/>
<xs:attribute name="block" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="NoData">
<xs:complexType>
<xs:attribute name="FillValue" type="xs:string" default="0"/>
</xs:complexType>
</xs:element>
<xs:element name="ObjectReferenceType">
<xs:complexType/>
</xs:element>
<xs:element name="OpaqueType">
<xs:complexType>
<xs:attribute name="Tag" type="xs:string" use="required"/>
<xs:attribute name="Size" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="ReferenceType">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:ObjectReferenceType"/>
<xs:element ref="hdf5:RegionReferenceType"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="RegionReferenceType">
<xs:annotation>
<xs:documentation>This element is not specified yet in this schema.</xs:documentation>
</xs:annotation>
<xs:complexType/>
</xs:element>
<xs:element name="RootGroup">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:Attribute" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="hdf5:Group"/>
<xs:element ref="hdf5:Dataset"/>
<xs:element ref="hdf5:NamedDataType"/>
<xs:element ref="hdf5:SoftLink"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" fixed="/"/>
<xs:attribute name="OBJ-XID" type="xs:ID" use="required"/>
<xs:attribute name="H5Path" type="xs:string" use="required" fixed="/"/>
</xs:complexType>
</xs:element>
<xs:element name="ScalarDataspace">
<xs:complexType/>
</xs:element>
<xs:element name="SimpleDataspace">
<xs:complexType>
<xs:sequence maxOccurs="32">
<xs:element ref="hdf5:Dimension"/>
</xs:sequence>
<xs:attribute name="Ndims" use="required">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="32"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="SoftLink">
<xs:complexType>
<xs:attribute name="LinkName" type="xs:string" use="required"/>
<xs:attribute name="TargetPath" type="xs:string" use="required"/>
<xs:attribute name="TargetObj" type="xs:IDREF"/>
<xs:attribute name="OBJ-XID" type="xs:ID" use="required"/>
<xs:attribute name="H5SourcePath" type="xs:string" use="required"/>
<xs:attribute name="Parents" type="xs:IDREFS" use="required"/>
<xs:attribute name="H5ParentPaths" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="StorageLayout">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:ContiguousLayout"/>
<xs:element ref="hdf5:ChunkedLayout"/>
<xs:element ref="hdf5:CompactLayout"/>
<xs:element ref="hdf5:ExternalLayout"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="StringType">
<xs:complexType>
<xs:attribute name="Cset" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="H5T_CSET_ASCII"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="StrSize" type="xs:string" use="required"/>
<xs:attribute name="StrPad" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="H5T_STR_NULLTERM"/>
<xs:enumeration value="H5T_STR_NULLPAD"/>
<xs:enumeration value="H5T_STR_SPACEPAD"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="SuperBlock">
<xs:complexType>
<xs:attribute name="FormatVersion" type="xs:string" use="required"/>
<xs:attribute name="LengthSize" type="xs:string" use="required"/>
<xs:attribute name="OffsetSize" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="TimeType">
<xs:complexType/>
</xs:element>
<xs:element name="UserBlock" type="xs:string"/>
<xs:element name="VLType">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:DataType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="RequiredFilter">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:Deflate" minOccurs="0"/>
<xs:element ref="hdf5:Fletcher32" minOccurs="0"/>
<xs:element ref="hdf5:Shuffle" minOccurs="0"/>
<xs:element ref="hdf5:SZIP" minOccurs="0"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="Deflate">
<xs:complexType>
<xs:attribute name="Level" use="optional" default="6">
<xs:simpleType>
<xs:restriction base="xs:int">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="9"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Fletcher32"/>
<xs:element name="Shuffle"/>
<xs:element name="SZIP">
<xs:complexType>
<xs:attribute name="Pixels_per_block" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="Mode" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Hardware"/>
<xs:enumeration value="K13"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Coding" use="optional" default="Entropy">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Entropy"/>
<xs:enumeration value="NN"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="ByteOrder" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="LSB"/>
<xs:enumeration value="MSB"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Header" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Raw"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="FillValueInfo">
<xs:complexType>
<xs:sequence>
<xs:element ref="hdf5:FillValue"/>
</xs:sequence>
<xs:attribute name="AllocationTime" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Early"/>
<xs:enumeration value="Late"/>
<xs:enumeration value="Incremental"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="FillTime" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="FillOnAlloc"/>
<xs:enumeration value="FillNever"/>
<xs:enumeration value="FillIfSet"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="FillValue">
<xs:complexType>
<xs:choice>
<xs:element ref="hdf5:Data"/>
<xs:element ref="hdf5:NoFill"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="NoFill"/>
</xs:schema>