Hi,

I've just noticed that if the XML Schema is used for validation of the 
document, the 
xs:IDREF type does not seem to work. It essentially behaves like an xs:NCName - 
checks 
the lexical constraints, but does not check that it refers to a valid xs:ID 
anywhere in the 
document.

Here is an example:

---8<--- 1.xml ---8<---
<?xml version="1.0"?>
<root>
  <def id="a1"/>
  <ref idref="a2"/>
</root>
---8<-------------8<---

---8<--- 1.xsd ---8<---
<?xml version="1.0"?>
<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
  xmlns:xs="http://www.w3.org/2001/XMLSchema";>
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="def" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="id" type="xs:ID" use="required"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="ref" minOccurs="0" maxOccurs="unbounded">             
                                                                                
                                                                             
          <xs:complexType>                                                      
                                                                                
                                                                             
            <xs:attribute name="idref" type="xs:IDREF" use="required"/>         
                                                                                
                                                                             
          </xs:complexType>                                                     
                                                                                
                                                                             
        </xs:element>                                                           
                                                                                
                                                                             
      </xs:sequence>                                                            
                                                                                
                                                                             
    </xs:complexType>                                                           
                                                                                
                                                                             
  </xs:element>                                                                 
                                                                                
                                                                             
</xs:schema>                                                                    
                                                                                
                                                                             
---8<-------------8<---

$ xmllint --noout --schema 1.xsd 1.xml
1.xml validates

Using libxml2 version 2.9.1. DTD validation seems to work fine with IDREF:

---8<--- 1.dtd ---8<---
<!ELEMENT root (def*,ref*)>                                                     
                                                                                
                                                                             
<!ELEMENT def EMPTY>                                                            
                                                                                
                                                                             
<!ATTLIST def id ID #REQUIRED>                                                  
                                                                                
                                                                             
<!ELEMENT ref EMPTY>                                                            
                                                                                
                                                                             
<!ATTLIST ref idref IDREF #REQUIRED>                                            
                                                                                
                                                                             
---8<-------------8<---

$ xmllint --noout --dtdvalid 1.dtd 1.xml
1.xml:5: element ref: validity error : IDREF attribute idref references an 
unknown ID "a2"

Am I missing something in the schema definition? Or is it a bug in libxml2?

Regards,
Alexey.
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to