Marcel: ID Referenz aus bestimmtem Bereich definieren

Hallo zusammen

Mit IDREF ist es ja möglich in der DTD eine Referenz auf eine existierende andere Node ID zu "erzwingen". Ist es auch Möglich zusätzlich eine bestimmte Node, bzw. deren Subnodes als ID's zu erzwingen?

Bsp:

  
<IDS>  
   <ID id="1" />  
   <ID id="2" />  
</IDS>  
  
<Objekte>  
   <Objekt id="10">A</Objekt >  
   <Objekt id="10">B</Objekt > // Gültige IDREF  
</Objekte>  

Ich möchte nun erreichen, dass alle id's der Objekte auf eine id aus ID verweisen müssen. Das heisst die id von Objekt B sollte ungültig sein...

Ist das möglich?

Gruss Marcel

  1. Hi,

    irgendwie glaube ich, du hast da was mit IDREF noch nicht verstanden, oder ich dein Problem nicht...
    <!ELEMENT ID EMPTY>
    <!ATTLIST ID id #ID>

    <!ELEMENT Objekt (#PCDATA)>
    <!ATTLIST Objekt id #IDREF>

    Damit ist sichergestellt, dass die id von Objekt auf eine gültige id von ID verweist. Der Parser sollte in dem Fall bei der Validierung den Fehler werfen, sofern du ihm mitgeteilt hast wo er die entsprechende DTD findet.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,

        
        
      <?xml version="1.0" encoding="utf-8" ?>  
        
      <!ELEMENT db (connections,queries)>  
      <!ELEMENT connections (connection*)>  
      <!ELEMENT connection EMPTY>  
      <!ATTLIST connection  
        id ID #REQUIRED  
        type (A|B|C) #REQUIRED  
        string CDATA #REQUIRED  
        >  
      <!ELEMENT queries (query*)>  
      <!ELEMENT query (command)>  
      <!ATTLIST query  
        id ID #REQUIRED  
        connection IDREF #REQUIRED  
        >  
      <!ELEMENT command (#PCDATA)>  
        
      -----------------------------------------------------  
        
      <?xml version="1.0"?>  
      <!DOCTYPE db SYSTEM "db.dtd">  
      <db>  
        <connections>  
          <connection id="a" type="A" string="dsn=abc" />  
        </connections>  
        <queries>  
          <query id="q1" connection="a">  
            <command>  
              SELECT * FROM xyz  
            </command>  
          </query>  
          <query id="q2" connection="q2"> //*  
            <command>  
              SELECT name FROM xyz  
            </command>  
          </query>  
        </queries>  
      </db>  
      
      

      * Definierte connection ist eine gültige ID. Es sollte aber nur ID "a" eine gültige ID darstellen...?

      Gruss Marcel

      1. Ah, das meinst du. Nein, das geht mittels DTD nicht. Sowas lässt sich nur mit hilfe von key und keyref in XML-Schema lösen.

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(