如何进行XML交叉引用?

时间:2013-12-06 22:10:42

标签: xml validation xls cross-reference idref

我正在尝试在XML中进行元素交叉引用而没有成功。这是我的架构:

<?xml version="1.0"?>
<xs:schema version="1.0"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       elementFormDefault="qualified">

<xs:complexType name="guestType">
    <xs:sequence>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="address" type="addressType"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:ID"/>
    <xs:attribute name="ref" type="xs:IDREF"/>
</xs:complexType>

<xs:complexType name="addressType">
    <xs:sequence>
        <xs:element name="houseNumber" type="xs:integer"/>
        <xs:element name="roadName" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:ID" />
    <xs:attribute name="ref" type="xs:IDREF"/>
</xs:complexType>

<xs:element name="event">
<xs:complexType>
    <xs:sequence>
        <xs:element name="time" type="xs:time"/>
        <xs:choice maxOccurs="unbounded">
           <xs:element name="guest" type="guestType"/>
        </xs:choice>
    </xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

XML文档的代码是:

<eventxmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation='src/tests/newXmlSchema.xsd'>
    <time>14:00:00</time>
    <guest id="1">
        <name>John</name>
        <address id="add1">
           <houseNumber>222</houseNumber>
           <roadName>Meat Street</roadName>
        </address>
    </guest>
    <guest id="2">
        <name>Henry</name>
        <address ref="add1"/>
    </guest>
</event>

我正在使用Netbeans进行验证。验证会在以下位置引发错误:

<address ref="add1"/>

错误是:

cvc-complex-type.2.4.b: The content of element 'address' is not complete. One of '{houseNumber}' is expected.

我做错了什么?提前谢谢。

PS。我找不到任何先前的问题。其他人正在使用XLS,这是我应该使用的吗?

0 个答案:

没有答案