XSD序列在末尾具有特殊条件

  • 本文关键字:条件 XSD xml xsd
  • 更新时间 :
  • 英文 :


我正在尝试使用XSD方案找到XML文件的以下结构的最佳方法:

<Vertice></Vertice>
<Edge></Edge>
...any number of Vertices and Edges between...
<Vertice></Vertice>
<Edge></Edge>

因此,它必须始终包含启动范围,最终室外和它们之间的一个边缘,但可选地可能在中间包含尽可能多的顶点,每个顶点都被边缘包围(XML将在稍后由JAXB基于JAXB创建在这个方案上)。我试图使用这样的东西,但没有编译。有没有适当的实施方法?

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!-- declaration -->
    <xs:complexType name="graphType">
        <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:element name="vertice" type="xs:string"/>
            <xs:element name="edge" type="xs:string"/>
        </xs:sequence>
        <xs:element name="vertice" type="xs:string"/>       <!-- this line is not working -->
    </xs:complexType>
    <!-- printing -->
    <xs:element name="Graph" type="graphType"/>
</xs:schema>

我还弄清楚了这样的东西,但是不允许再次使用相同的名称,因此我需要更改最后一个Vertice的名称。但是也许有一种方法可以找到解决方法?

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!-- declaration -->
    <xs:complexType name="graphType">
        <xs:sequence>
            <xs:sequence minOccurs="2" maxOccurs="unbounded">
                <xs:element name="vertice" type="xs:string"/>
                <xs:element name="edge" type="xs:string"/>
            </xs:sequence>
            <xs:element name="vertice-end" type="xs:string"/>  
            <!-- is there a workaround to repeat the name "vertice" for this element? -->
        </xs:sequence>
    </xs:complexType>
    <!-- printing -->
    <xs:element name="Graph" type="graphType"/>
</xs:schema>

简单地以另一种方式进行操作,即认为您的模型必须以vertice开头,然后是edge vertice的序列(是一样的,不是吗?)。这样,您可以确保您始终以vertice元素结束。

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <!-- declaration -->
    <xs:complexType name="graphType">
        <xs:sequence>
            <xs:element name="vertice" type="xs:string"/>
            <xs:sequence minOccurs="1" maxOccurs="unbounded">
                <xs:element name="edge" type="xs:string"/>
                <xs:element name="vertice" type="xs:string"/>
            </xs:sequence>
        </xs:sequence>
    </xs:complexType>
    <!-- printing -->
    <xs:element name="Graph" type="graphType"/>
</xs:schema>

您可能面临一个称为唯一粒子归因的问题,您可以在此处阅读更多https://www.w.org/wiki/wiki/niqueparticleattribution(或进行您自己的搜索)。<<<<<<<<<<<<<<<<<<

最新更新