我正在尝试使用XSD方案找到实现XML文件的以下结构的最佳方法:
<Vertice></Vertice>
<Edge></Edge>
...any number of Vertices and Edges between...
<Vertice></Vertice>
<Edge></Edge>
因此它必须始终包含Start-Vertice,End-Vertice和它们之间的一个Edge,但可选地,它可以根据需要在中间包含尽可能多的顶点,每个顶点都被Edges包围(XML将稍后由基于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>
我也想到了这样的东西,但是不允许再次使用相同的名字,因此我需要更改最后一个顶点的名称。但也许有办法找到解决办法吗?
<?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>
答案 0 :(得分:0)
只需按照其他方式执行,即考虑您的模型必须以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>
您可能会面临一个名为 Unique Particle Attribution 的问题,您可以在此处阅读更多https://www.w3.org/wiki/UniqueParticleAttribution(或进行自己的搜索)。