繁体   English   中英

XML模式密钥/密钥引用问题

[英]XML-Schema key/keyref issue

给定以下xml片段:

<Environment>
...
    <MySqlConfiguration>
      <ActiveServer>1@db1</ActiveServer>
      <PassiveServer>2@db1</PassiveServer>
      <Replicate from="1@db1" to="2@db1" />
      <Replicate from="2@db1" to="1@db1" />
    </MySqlConfiguration>
...
</Environment>

我想限制从/到ActiveServer或PassiveServer中指定的值

在XSD中,我尝试以下操作:

 <xs:element name="Environment" type="environment" >
    <xs:key name="ServerKey">
      <xs:selector xpath=".//ActiveServer|PassiveServer"/>
      <xs:field xpath="*"/>
    </xs:key>
    <xs:keyref name="ServerKeyRef" refer="ServerKey">
      <xs:selector xpath=".//Replicate"/>
      <xs:field xpath="@from"/>
    </xs:keyref>
    ...
  </xs:element>

但是,键中的xpath="*"字段选择器不起作用(它无法获取Active / PassiveServer元素的文本节点)。 xpath="text()"也不起作用。 做类似的事情:

<xs:element name="Environment" type="environment" >
    <xs:key name="ServerKey">
      <xs:selector xpath="Environment"/>
      <xs:field xpath="ActiveServer|PassiveServer"/>
    </xs:key>
    <xs:keyref name="ServerKeyRef" refer="ServerKey">
      <xs:selector xpath=".//Replicate"/>
      <xs:field xpath="@from"/>
    </xs:keyref>
    ...
  </xs:element>

不起作用(字段必须引用一个实例;仅指定其中一个会起作用)。

我是否有某种方法可以忽略字段xpath值中元素的文本内容?

我希望以下工作:

  <xs:selector xpath=".//ActiveServer|.//PassiveServer"/>
  <xs:field xpath="."/>

注意“ |” 优先级最低,因此需要重复“ .//”。 XSD Rec中的BNF:

 Selector  ::=  Path ( '|' Path )*

暂无
暂无

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

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