Le type IDREF permet à une valeur d'attribut de faire référence à l'identificateur (ID) d'un autre élément.

De cette manière, il est possible de relier des éléments entre eux, à l'instar des clés d'enregistrements, dans une base de données, permettant de relier des tables entre elles.

IDREFS permet d'associer plusieurs identificateurs (ID) en les séparant par des espaces blancs dans la valeur d'un attribut.

Exemple :
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE société [
<!ELEMENT division EMPTY>
<!ATTLIST division
              id ID #REQUIRED
              services IDREFS #REQUIRED
>
<!ELEMENT divisions (division+)>
<!ELEMENT employe (nom, prenom)>
<!ATTLIST employe
              id ID #REQUIRED
              service IDREF #REQUIRED
>
<!ELEMENT employes (employe+)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT service (nom)>
<!ATTLIST service id ID #REQUIRED>
<!ELEMENT services (service+)>
<!ELEMENT societe (services, divisions, employes)>
]>
<societe>
  <services>
    <service id="DG001">
      <nom>Direction générale</nom>
    </service>
    <service id="ST001">
      <nom>Service technique</nom>
    </service>
    <service id="SC001">
      <nom>Service commercial</nom>
    </service>
    <service id="SC101">
      <nom>Service clientèle</nom>
    </service>
    <service id="RH001">
      <nom>Ressources humaines</nom>
    </service>
    <service id="SQ001">
      <nom>Service qualité</nom>
    </service>
    <service id="SP001">
      <nom>Service production</nom>
    </service>
    <service id="RD001">
      <nom>Recherche et développement</nom>
    </service>
  </services>
  <divisions>
    <division id="A001" services="DG001 RH001"/>
    <division id="B001" services="SC001 SC101"/>
    <division id="C001" services="SP001 SQ001 RD001"/>
  </divisions>
  <employes>
    <employe id="RJ1002" service="DG001">
      <nom>Robierre</nom>
      <prenom>Jean</prenom>
    </employe>
    <employe id="LA1012" service="DG001">
      <nom>Lardut</nom>
      <prenom>Anne</prenom>
    </employe>
    <employe id="GA1013" service="ST001">
      <nom>Guilde</nom>
      <prenom>Angélique</prenom>
    </employe>
    <employe id="HP1022" service="SC001">
      <nom>Henry</nom>
      <prenom>Paul</prenom>
    </employe>
    <employe id="MM1045" service="RH001">
      <nom>Mortier</nom>
      <prenom>Marc</prenom>
    </employe>
    <employe id="LS1102" service="SQ001">
      <nom>Lebreton</nom>
      <prenom>Sophie</prenom>
    </employe>
    <employe id="JM1095" service="RD001">
      <nom>Jolie</nom>
      <prenom>Martine</prenom>
    </employe>
    <employe id="MT1036" service="SC101">
      <nom>Marcelin</nom>
      <prenom>Tania</prenom>
    </employe>
    <employe id="LL1029" service="SC101">
      <nom>Léger</nom>
      <prenom>Laurence</prenom>
    </employe>
    <employe id="DM1052" service="SC001">
      <nom>Duroi</nom>
      <prenom>Maxime</prenom>
    </employe>
  </employes>
</societe>