OCS Inventory utiliza XML para casi todas las transacciones, las DTD se han escrito para tener XML estricto.
Tenemos 7 DTD, una para cada tipo de XML:
- dtd
- dtd
- dtd
- dtd
- dtd
- dtd
- dtd
Cada vez que realiza cambios en un XML en particular o tiene datos (modificando Inventory.pm en un Agente, por ejemplo) necesita actualizar el DTD correspondiente.
El más grande es para la solicitud de inventario, tenemos todos los campos definidos en.
Por ejemplo:
Cuando se realiza un inventario de almacenamiento, tiene un XML como ese:
<STORAGES>
<DESCRIPTION>SATA</DESCRIPTION>
<DISKSIZE>117220</DISKSIZE>
<FIRMWARE>3.AD</FIRMWARE>
<MANUFACTURER>Seagate</MANUFACTURER>
<MODEL>ST9120823AS</MODEL>
<NAME>sda</NAME>
<SERIALNUMBER>5NJ0NJ09</SERIALNUMBER>
<TYPE>disk</TYPE>
</STORAGES>
Para cada campo tiene una línea correspondiente en el DTD:
Éste define el subárbol ALMACENAMIENTOS, tiene una lista de todos los campos permitidos, el separador es un | porque no queremos un pedido especial, y ponemos un * después de los corchetes, porque no todos son obligatorios.
<!ELEMENT STORAGES (MANUFACTURER | NAME | MODEL | DESCRIPTION | TYPE | DISKSIZE | FIRMWARE |
SERIALNUMBER)*>
Luego, tiene una línea para cada campo que puede contener datos de texto (#PCDATA).
<!ELEMENT MANUFACTURER (#PCDATA)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT MODEL (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ELEMENT TYPE (#PCDATA)>
<!ELEMENT DISKSIZE (#PCDATA)>
<!ELEMENT FIRMWARE (#PCDATA)>
<!ELEMENT SERIALNUMBER (#PCDATA)>
Por lo tanto, cada vez que desee agregar un campo en un archivo XML, debe crear el campo y agregarlo a la lista del subárbol donde va. Cada campo se puede usar en cada subárbol, solo tiene que agregarlo a la lista si ya existe.