Xsd 如何将xs:unique应用于两个对象
我正在尝试为我的xsd编写xs:unique,以约束容器的名称,并列出具有唯一名称的对象,但无法使其工作。你能帮忙吗 详情如下 我的对象结构类似于下面的树Xsd 如何将xs:unique应用于两个对象,xsd,Xsd,我正在尝试为我的xsd编写xs:unique,以约束容器的名称,并列出具有唯一名称的对象,但无法使其工作。你能帮忙吗 详情如下 我的对象结构类似于下面的树 App | ---container | --list | ---container | --list 每个“容器”可以有0个或多个“列表”,每个“列表”可
App
|
---container
|
--list
|
---container
|
--list
每个“容器”可以有0个或多个“列表”,每个“列表”可以有0个或多个“容器”。列表和容器都有“name”属性和其他不同的属性。我想约束整个实例的容器和列表的“名称”都是唯一的。我应该如何编写唯一选择器xpath?这是模式
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my_app="http://www.cisco.com/myapp" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="app">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="container" type="containerType"/>
</xs:sequence>
</xs:complexType>
<xs:unique name="uniquename">
<xs:selector xpath=""/>
<xs:field xpath="@name"/>
</xs:unique>
</xs:element>
<xs:complexType name="listType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="container" type="containerType"/>
</xs:sequence>
<xs:attribute name="name"/>
</xs:complexType>
<xs:complexType name="containerType">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="list" type="listType"/>
</xs:sequence>
<xs:attribute name="name"/>
</xs:complexType>
</xs:schema>
描述根元素的注释
我想你在找
<xs:selector xpath="//container | //list"/>
C.M.Sperberg-McQueen几乎正确。受限XPath语法(如第3.11.16节所示)的问题在于,在您的情况下,它需要以。(点) 因此,正确的解决方案是
<xs:selector xpath=".//container|.//list"/>
@C.M.Sperberg-McQueen也正确地指出,空白是合法的,不应引起任何问题。我确认股票Java和.NET验证器没有上述问题(带或不带空格)。如果在任何级别复制name属性的值,下面的XML将无效
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my_app="http://www.cisco.com/myapp">
<container name="anySimpleType1">
<list name="anySimpleType2">
<container name="anySimpleType3">
<list name="anySimpleType4">
<container name="anySimpleType5">
<list name="anySimpleType6"/>
<list name="anySimpleType7"/>
</container>
<container name="anySimpleType8">
<list name="anySimpleType9"/>
<list name="anySimpleType10"/>
</container>
</list>
<list name="anySimpleType11">
<container name="anySimpleType12">
<list name="anySimpleType13"/>
<list name="anySimpleType14"/>
</container>
</list>
</container>
<container name="anySimpleType16">
<list name="anySimpleType17">
<container name="anySimpleType18">
<list name="anySimpleType19"/>
<list name="anySimpleType20"/>
</container>
</list>
</container>
</list>
</container>
</app>
我尝试了这一点,但我的xmlspy出现了一个错误:“xpath属性值'//container |//list'不是有效的受限xpath表达式。”;这是合法的,但这是一些XPath解析器不知道应该接受的事情。它不喜欢“/”。但是,xmlspy工具可以在其他上下文中识别“//container |//list”。您知道任何可以识别约束的工具(API)吗?