如何进行XML交叉引用?

如何进行XML交叉引用?,xml,validation,xls,cross-reference,idref,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>

我试图在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>
我做错了什么?先谢谢你


顺便说一句,我以前找不到像这样基本的问题。其他人使用的是XLS,这是我应该使用的吗?

您没有将任何子元素设置为可选。按照架构的布局方式,您的序列
{houseNumber,roadName}
是必需的。假设您将在自己的代码中将'ref'解析为'id',您可以选择一个地址序列。第一个序列是具有ID属性的正常内容,第二个序列将是没有子元素的“REF”属性。@dcsohl我尝试添加minOccurs=“0”和maxOccurs=“unbounded”使它们成为可选的,但没有起作用。还有其他方法吗?在使用XML之后,我痛苦地想起了XSD1.0的局限性。您可以做您想做的事情,但需要“断言”,它需要XSD 1.1,而.Net XML库不支持XSD 1.1。查看更多关于asserts@MarvinSmit非常感谢。
<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>
<address ref="add1"/>
cvc-complex-type.2.4.b: The content of element 'address' is not complete. One of '{houseNumber}' is expected.