Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在XSD中定义元素引用_Xml_Xsd - Fatal编程技术网

Xml 在XSD中定义元素引用

Xml 在XSD中定义元素引用,xml,xsd,Xml,Xsd,如何编写xsd来表示下面所示的xml(取自) 阿扬·波茨马 在本例中,passenger.flight引用的是另一个航班元素(在本例中,是passenger的祖父母)。在编写XSD时,您实际上如何处理这个问题?这可能包括循环引用的情况,或者只是为了方便起见,通过使用引用将表示复杂类型的元素的重复保持在最低程度。除非使用引用全局元素的建模方法(也称为“salami slice”模式),因为不能用相同的名称定义两个全局元素。如果您使用稍微基于类型的方法,这没有问题(注意,为了清楚起见,我省略了重

如何编写xsd来表示下面所示的xml(取自)


阿扬·波茨马

在本例中,passenger.flight引用的是另一个航班元素(在本例中,是passenger的祖父母)。在编写XSD时,您实际上如何处理这个问题?这可能包括循环引用的情况,或者只是为了方便起见,通过使用引用将表示复杂类型的元素的重复保持在最低程度。

除非使用引用全局元素的建模方法(也称为“salami slice”模式),因为不能用相同的名称定义两个全局元素。如果您使用稍微基于类型的方法,这没有问题(注意,为了清楚起见,我省略了重复乘客列表):



顺便说一句:我认为乘客内部的航班参考将指向其他地方,如果乘客包含在航班祖先中,这是多余的。

这似乎可行-我的问题是我在“意大利腊肠切片”中,并在xsd中到处使用元素参考。
<flight number="KL1117">
  <passengers>
    <passenger>
      <name>Arjen Poutsma</name>
      <flight href="KL1117" />
    </passenger>
  </passengers>
</flight>
<xs:complexType name="FlightDefinition">
    <xs:sequence>
        <xs:element name="passenger" type="Passenger"/>
    </xs:sequence>
    <xs:attribute name="number" type="xs:ID" use="required"/>
</xs:complexType>
<xs:complexType name="Passenger">
    <xs:sequence>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="flight" type="FlightReference"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="FlightReference">
    <xs:attribute name="href" type="xs:IDREF" use="required"/>
</xs:complexType>
<xs:element name="flight" type="FlightDefinition"/>