<!--**
** XML DTD for SMIv1/SMIv2/SMIng modules.
**
** Typical invocation:
** <!DOCTYPE smi PUBLIC
** "-//IETF//DTD RFCxxxx SMI v0.1//EN"
** "/some/path/smi.dtd">
**
** Contact: Juergen Schoenwaelder
** TU Braunschweig
** Bueltenweg 74/75
** 38106 Braunschweig
** Germany
**
** <schoenw@ibr.cs.tu-bs.de>
**
** Copyright (c) The Internet Society (2000).
** All Rights Reserved.
**
** $ID$
**
**-->
<!--** Entity Definitions **-->
<!ENTITY % IDENTIFIER "CDATA">
<!-- an SMI identifier (aka ASN.1 descriptor) -->
<!ENTITY % OID "CDATA">
<!-- Object Identifier in dotted notation (e.g. 1.3.6.1.2.1) -->
<!ENTITY % TEXT "#PCDATA">
<!-- text as defined in the SMI specification -->
<!ENTITY % DATE "CDATA">
<!-- date and time information (ISO date format) -->
<!ENTITY % VALUE "CDATA">
<!-- value of one of the SMI basetypes -->
<!ENTITY % STATUS "CDATA">
<!-- value of one of the SMI status values -->
<!--** Fundamental Attribute Definitions **-->
<!ENTITY % at.module 'module %IDENTIFIER; #REQUIRED'>
<!ENTITY % at.name 'name %IDENTIFIER; #REQUIRED'>
<!ENTITY % at.optname 'name %IDENTIFIER; ""'>
<!ENTITY % at.oid 'oid %OID; #REQUIRED'>
<!ENTITY % at.language 'language (SMIv1
|SMIv2
|SMIng) #REQUIRED'>
<!ENTITY % at.status 'status (current
|deprecated
|obsolete
|mandatory
|optional) "current"'>
<!ENTITY % at.basetype 'basetype %IDENTIFIER; #REQUIRED'>
<!ENTITY % at.date 'date %DATE; #REQUIRED'>
<!ENTITY % at.number 'number %VALUE; #REQUIRED'>
<!ENTITY % at.min 'min %VALUE; #REQUIRED'>
<!ENTITY % at.max 'max %VALUE; #REQUIRED'>
<!ENTITY % at.node 'node %IDENTIFIER; #REQUIRED'>
<!ENTITY % at.implied 'implied (true|false) "false"'>
<!ENTITY % at.create 'create (true|false) "false"'>
<!--** Fundamental Element Definitions **-->
<!ELEMENT description (%TEXT;)>
<!ELEMENT reference (%TEXT;)>
<!ELEMENT format (%TEXT;)>
<!ELEMENT units (%TEXT;)>
<!ELEMENT default (%TEXT;)>
<!ELEMENT access (%TEXT;)>
<!ELEMENT range EMPTY>
<!ATTLIST range %at.min;
%at.max;>
<!ELEMENT namednumber EMPTY>
<!ATTLIST namednumber %at.name;
%at.number;>
<!ELEMENT parent EMPTY>
<!ATTLIST parent %at.module;
%at.name;>
<!ELEMENT type EMPTY>
<!ATTLIST type %at.module;
%at.name;>
<!ELEMENT syntax (type|typedef)>
<!ELEMENT writesyntax (type|typedef)>
<!ELEMENT linkage (index+|augments|reorders|sparse|expands)>
<!ATTLIST linkage %at.implied;>
<!ELEMENT index EMPTY>
<!ATTLIST index %at.module;
%at.name;>
<!ELEMENT augments EMPTY>
<!ATTLIST augments %at.module;
%at.name;>
<!ELEMENT reorders EMPTY>
<!ATTLIST reorders %at.module;
%at.name;>
<!ELEMENT sparse EMPTY>
<!ATTLIST sparse %at.module;
%at.name;>
<!ELEMENT expands EMPTY>
<!ATTLIST expands %at.module;
%at.name;>
<!--** Structure Element and Attribute Definitions **-->
<!ELEMENT smi (module,
imports*,
typedefs*,
nodes*,
notifications*,
groups*,
compliances*)>
<!ELEMENT module (organization?,
contact?,
description?,
reference?,
revision*,
identity?)>
<!ATTLIST module %at.name;
%at.language;>
<!ELEMENT organization (%TEXT;)>
<!ELEMENT contact (%TEXT;)>
<!ELEMENT revision (description)>
<!ATTLIST revision %at.date;>
<!ELEMENT identity EMPTY>
<!ATTLIST identity %at.node;>
<!ELEMENT imports (import+)>
<!ELEMENT import EMPTY>
<!ATTLIST import %at.module;
%at.name;>
<!ELEMENT typedefs (typedef+)>
<!ELEMENT typedef (parent?,
range*,
namednumber*,
default?,
format?,
units?,
description?,
reference?)>
<!ATTLIST typedef %at.optname;
%at.basetype;
%at.status;>
<!ELEMENT nodes (node|scalar|table)+>
<!ELEMENT node (description?,
reference?)>
<!ATTLIST node %at.name;
%at.oid;
%at.status;>
<!ELEMENT scalar (syntax,
access,
default?,
format?,
units?,
description,
reference?)>
<!ATTLIST scalar %at.name;
%at.oid;
%at.status;>
<!ELEMENT table (description,
reference?,
row)>
<!ATTLIST table %at.name;
%at.oid;
%at.status;>
<!ELEMENT row (linkage,
description,
reference?,
column+)>
<!ATTLIST row %at.name;
%at.oid;
%at.create;
%at.status;>
<!ELEMENT column (syntax,
access,
default?,
format?,
units?,
description,
reference?)>
<!ATTLIST column %at.name;
%at.oid;
%at.status;>
<!ELEMENT notifications (notification+)>
<!ELEMENT notification (objects,
description,
reference?)>
<!ATTLIST notification %at.name;
%at.oid;
%at.status;>
<!ELEMENT objects (object*)>
<!ELEMENT object EMPTY>
<!ATTLIST object %at.module;
%at.name;>
<!ELEMENT groups (group+)>
<!ELEMENT group (members,
description,
reference?)>
<!ATTLIST group %at.name;
%at.oid;
%at.status;>
<!ELEMENT members (member+)>
<!ELEMENT member EMPTY>
<!ATTLIST member %at.module;
%at.name;>
<!ELEMENT compliances (compliance+)>
<!ELEMENT compliance (description,
requires,
refinements?)>
<!ATTLIST compliance %at.name;
%at.oid;
%at.status;>
<!ELEMENT requires (mandatory|option)+>
<!ELEMENT mandatory EMPTY>
<!ATTLIST mandatory %at.module;
%at.name;>
<!ELEMENT option (description)>
<!ATTLIST option %at.module;
%at.name;>
<!ELEMENT refinements (refinement+)>
<!ELEMENT refinement (syntax?,
writesyntax?,
access?,
description)>
<!ATTLIST refinement %at.module;
%at.name;>
<!--** End of the XML DTD for SMIv1/SMIv2/SMIng modules. **-->