繁体   English   中英

XML模式-顺序键

[英]XML Schema - Key in sequence

我试图按顺序放置一个键,并被错误轰炸。 看来我做不到。 另外,有人告诉我我的钥匙需要一个字段和选择器,而我只能在上面找到很少的文档。 (实际上,无奈之下,我下载了Liquid XML Studio [vs. Notepad]并搜索了它的帮助文件...甚至找不到对“选择器”一词的引用。)不管怎样,我可以使用另一种方法来保证唯一性,不是序列中元素的null值? (有问题的内容是字符串)

请注意,如果没有key元素,该模式将进行验证。

错误

每个cvc-complex-type.1.2.4无效:元素{http://www.w3.org/2001/XMLSchema}:此处不允许在元素{http://www.w3.org/2001(1)中使用键/ XMLSchema}:序列,期望[{http://www.w3.org/2001/XMLSchema}:注释,$,{http://www.w3.org/2001/XMLSchema}:元素,{http:/ /www.w3.org/2001/XMLSchema}:组,{http://www.w3.org/2001/XMLSchema}:选择,{http://www.w3.org/2001/XMLSchema}:序列, {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>

不应将key元素放入sequence元素内。 相反,您将其作为定义ReferralCollectionxs:element的子级。 selectorfieldkey元素的子元素,这些元素定义了应该是唯一的。 两者都是XPath表达式。 selector值设置XPath上下文,并且field元素(可以有多个)定义应该唯一的值的组合。 因此,在您的情况下, key元素可能看起来像这样:

<xs:key name="URL">
  <xs:selector xpath="."/>
  <xs:field xpath="rd:keyword"/>
</xs:key>

此处的选择selector选择元素本身,即ReferralCollection 然后,在该上下文中, field元素表示keyword元素的值,因此将其约束为唯一的。 XPath中元素的值是其文本内容。

我没有对key元素(或一般来说为XML Schema)做很多事情,因此上面的一些细节可能不正确,但是基本思想是我所解释的,因此应该很容易解决我犯的任何错误。 哦,还请注意,我为您的READOO名称空间使用了rd前缀; 以我的经验,在处理XPath时,最好使用显式前缀,因此您需要在架构中使用适当的xmlns:rd属性来使其正常工作。

编辑:所以看来您想要这样的东西:

<xs:element name="ReferralCollection">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="URL" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="stem" type="xsd:string"/>
            <xs:element name="keyword" maxOccurs="unbounded">
            ...
            </xs:element>
          ...
  </xs:complexType>

  <xs:key name="URL">
    <xs:selector xpath="./URL"/>
    <xs:field xpath="stem"/>
  </xs:key>
</xs:element>

这更接近您的意思了吗? 它具有一个或多个URL元素,每个元素都包含一个stem元素,后跟一个或多个keyword元素。 key约束应使stem元素的内容唯一。

请查看此链接是否可以帮助您:

编辑 :我几年前建立架构; 请查看适合您的问题:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:asp4d"
    xmlns:asp4d="urn:asp4d">
  <xs:element name="ASP4Developers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Links" minOccurs="1" maxOccurs="1">
          <xs:keyref name="kUserId" refer="asp4d:UserId">
            <xs:selector xpath="Link"/>
            <xs:field xpath="@UserId"/>
          </xs:keyref>
        </xs:element>
      </xs:sequence>
    </xs:complexType>

    <xs:key name="UserId">
      <xs:selector xpath="Users/User"/>
      <xs:field xpath="@UserId"/>
    </xs:key>

  </xs:element>

</xs:schema>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM