我正在尝试按顺序放置一个按键,然后被错误轰炸 . 我好像不能这样做 . 另外,我被告知我的密钥需要一个字段和选择器,我已经能够找到很少的文档 . (事实上,在绝望中,我下载了Liquid XML Studio [与记事本]并搜索了它的帮助文件......发现NO甚至没有引用“selector”这个词)无论如何 - 我可以使用什么另一种方法来保证一个独特的,序列中的元素不是空值? (有问题的内容是一个字符串)
请注意,如果没有key元素,架构将验证 .
错误
每个cvc-complex-type.1.2.4无效:元素{http://www.w3.org/2001/XMLSchema}:key不允许这里(1)元素{http://www.w3.org/ 2001 / XMLSchema}:sequence,expecting [{http://www.w3.org/2001/XMLSchema}:annotation,$,,http://www.w3.org/2001/XMLSchema}:element, {http: //www.w3.org/2001/XMLSchema}:group, {http://www.w3.org/2001/XMLSchema}:choice, {http://www.w3.org/2001/XMLSchema}:sequence ,{http://www.w3.org/2001/XMLSchema}:any]:
架构
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="READOO" elementFormDefault="qualified">
<xs:element name="ReferralCollection">
<xs:complexType>
<xs:sequence>
<xs:key name="URL" type="string" />
<xs:element maxOccurs="unbounded" name="keyword">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="occurrences" type="xs:int" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
2 回答
key
元素不应该进入sequence
元素 . 相反,您将其作为定义ReferralCollection
的xs:element
的子项 .selector
和field
是key
元素的子元素,用于定义应该唯一的元素 . 两者都是XPath表达式 .selector
值设置XPath上下文,field
元素(可以有多个)定义应该是唯一的值组合 . 所以在你的情况下,key
元素可能看起来像这样:selector
在这里选择元素本身,即ReferralCollection
. 然后,在该上下文中,field
元素表示keyword
元素的值,因此它们被约束为唯一的 . XPath中元素的值是其文本内容 .我对
key
元素(或者一般的XML Schema)没有做太多,所以上面的一些细节可能不正确,但基本的想法是我解释的,所以应该很容易解决我所犯的任何错误 . 哦,还要注意我为READOO
命名空间使用rd
前缀;根据我使用显式前缀的经验总是在处理XPath时最好,因此您需要在模式中使用适当的xmlns:rd
属性才能使其工作 .EDIT: 所以看起来你想要这样的东西:
这更贴近你的意思吗?它有
URL
个元素,一个或多个,每个元素包含stem
元素,后跟一个或多个keyword
元素 .key
约束应使stem
元素的内容唯一 .请查看此链接是否可以帮助您:
xsd:key Element
Identity constraints
Implementing foreign key type relationships in XSD schema
EDIT :几年前我 Build 了架构;请看,它适合你的问题: