У меня есть следующее XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="simple_model.xsd">
<cars>
<passengers>
<person idref="ud9e69b75-1604-4a85-9747-5ec530b3641b"/>
</passengers>
</cars>
<persons>
<person myid="ud9e69b75-1604-4a85-9747-5ec530b3641b">
<name>Paul</name>
</person>
</persons>
</root>
с соответствующей схемой:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root" type="root"/>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="cars" type="car" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="persons" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="person" type="person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="car">
<xs:sequence>
<xs:element name="passengers" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="person" type="referencePerson" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="referencePerson">
<xs:sequence/>
<xs:attribute name="idref" type="xs:IDREF"/>
</xs:complexType>
<xs:complexType name="person">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="myid" type="xs:ID"/>
</xs:complexType>
</xs:schema>
Когда я сейчас вызываю idref("ud9e69b75-1604-4a85-9747-5ec530b3641b")/..
, он возвращает меня: <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" idref="ud9e69b75-1604-4a85-9747-5ec530b3641b"/>
Пока все хорошо. Но когда я меняю idref с атрибута на элемент. Например:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="simple_model.xsd">
<cars>
<passengers>
<person>u74835c8c-e793-4fca-a370-27ff6f3f06d7</person>
</passengers>
</cars>
<persons>
<person myid="u74835c8c-e793-4fca-a370-27ff6f3f06d7">
<name>Paul</name>
</person>
</persons>
</root>
и соответствующая схема меняется на:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root" type="root"/>
<xs:complexType name="root">
<xs:sequence>
<xs:element name="cars" type="car" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="persons" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="person" type="person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="car">
<xs:sequence>
<xs:element name="passengers" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="person" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="person">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="myid" type="xs:ID"/>
</xs:complexType>
</xs:schema>
Тогда вызов idref("u74835c8c-e793-4fca-a370-27ff6f3f06d7")
ничего не возвращает. Я пробовал это с BaseX и XML автором, но оба не показывают результатов. Вы знаете, что я пропустил?