Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xsd 为什么赢了';XML模式允许我定义一对多键吗?我该怎么做?_Xsd_Foreign Keys_Primary Key - Fatal编程技术网

Xsd 为什么赢了';XML模式允许我定义一对多键吗?我该怎么做?

Xsd 为什么赢了';XML模式允许我定义一对多键吗?我该怎么做?,xsd,foreign-keys,primary-key,Xsd,Foreign Keys,Primary Key,我在XML模式中遇到了一个令人沮丧的任意限制。出于某种原因,它坚持PK-FK关系必须是一对一的。为什么? 例如,给定模式: <?xml version="1.0" encoding="utf-8"?> <xs:schema id="FutureSchema" targetNamespace="http://tempuri.org/FutureSchema.xsd" elementFormDefault="unqualified" xmlns="http:

我在XML模式中遇到了一个令人沮丧的任意限制。出于某种原因,它坚持PK-FK关系必须是一对一的。为什么?

例如,给定模式:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="FutureSchema"
    targetNamespace="http://tempuri.org/FutureSchema.xsd"
    elementFormDefault="unqualified"
    xmlns="http://tempuri.org/FutureSchena.xsd"
    xmlns:mstns="http://tempuri.org/FutureSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="FUTUREFILE">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Configuration">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Experiments">

                <xs:complexType>
                  <xs:sequence>

                    <xs:element name="Experiment">

                      <xs:complexType>
                        <xs:attribute name="ID" type="xs:integer"/>
                        <xs:attribute name="Profile" type="xs:integer"/>
                      </xs:complexType>

                      <xs:keyref name="dummy" refer="LP">
                        <xs:selector xpath="Experiment"/>
                        <xs:field xpath="@Profile"/>
                      </xs:keyref>

                    </xs:element>

                  </xs:sequence>
                </xs:complexType>

                <xs:key name="LP">
                  <xs:selector xpath="*/Configuration/Profiles/Profile"/>
                  <xs:field xpath="@ID"/>
                </xs:key>

              </xs:element>
              <xs:element name="Profiles">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Profile">
                      <xs:complexType>
                        <xs:attribute name="ID" type="xs:integer"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

举个例子:

<?xml version="1.0" encoding="utf-8" ?>
<b:FUTUREFILE xmlns:b="http://tempuri.org/FutureSchena.xsd">
  <Configuration>
    <Experiments>
      <Experiment ID="1" Profile="1"/>
      <Experiment ID="2" Profile="1"/>
    </Experiments>
    <Profiles>
      <Profile ID="1"/>
    </Profiles>
  </Configuration>
</b:FUTUREFILE>

例如,如果我定义了
,文档验证就会抛出一个错误;i、 e.一个以上的试验可能不会参考同一个剖面。但我为什么要使用关键关系呢?如果我不能做一些如此基本的事情,那么关键的关系有什么用呢

好吧,如果不让我这么做,我该怎么做

编辑#1:根据要求,我已经填充了我的代码示例,以包含完整的模式和一个基本实例


编辑#2:有趣。SharpDevelop的XML编辑器(与VisualStudio相反)似乎并不反对。它也不反对外键值引用不存在的主键(依我看应该是这样),但这是一个开始。

什么不清楚?。。。我的英语,全是:-)

有些问题,我不确定是不是解决方案:

在示例中,最好使用
xmlns:b=”http://tempuri.org/FutureSchema.xsd“>
,而不是
xmlns:b=”http://tempuri.org/FutureSchena.xsd“>
(n->m)

此外,最好将b:放在所有元素名称前面

根据你的模式,你不能有两个实验,只能有一个


在xsd上,放
,这对我最合适;这是因为xpath表达式不理解默认名称空间,请参见。

请提供完整的简短模式和实例,这样我可以自己做一些实验。谢谢,完成了。出于好奇,考虑到我之前的(不完整的)示例,有什么不清楚这是如何工作的?我觉得这足以涵盖所有的基础;我的模式是我在工作中编写的模式的复制版本,因此我没有完全正确地理解它。该版本确实允许使用不同的配置文件进行多个实验。模式中的拼写错误也是如此。我们开始吧。这让我找到了正确的答案——由于默认名称空间问题,它似乎没有正确地应用键约束。此外,在重新编写了相同的逻辑之后,.NETXMLDOM现在可以正确地接受一对多PK-FK。第一次出了什么问题,我真的说不出来。尽管如此,它现在仍然有效。非常感谢。