Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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主键并在xml文件中验证_Xml_Xsd - Fatal编程技术网

如何在xsd文件中定义xml主键并在xml文件中验证

如何在xsd文件中定义xml主键并在xml文件中验证,xml,xsd,Xml,Xsd,建筑物.xsd <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="buildings"> <xs:complexType> <xs:sequence> <xs:element name="building" maxOccurs="unbounded"&

建筑物.xsd

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="buildings">
<xs:complexType>
<xs:sequence>

<xs:element name="building" maxOccurs="unbounded">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="BuildingCode">
        <xs:simpleType>
                <xs:restriction base="xs:string">
                <xs:pattern value="[A-Z]{3}"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>

      <xs:element name="BuildingName" type="xs:string"/>
      <xs:element name="Position" type="Position"/>
     <xs:element name="Address" type="Address" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="PKBuildingCode">
            <xs:selector xpath="building"/>
            <xs:field xpath="BuildingCode"/>
        </xs:key>
</xs:element>
<xs:complexType name="Position">
    <xs:sequence>
        <xs:element name="Latitude" type="xs:decimal"/>
        <xs:element name="Longitude" type="xs:decimal"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="Address">
    <xs:sequence>
        <xs:element name="StreetNo">
            <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[0-9]+"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="StrName" type="xs:string"/>
        <xs:element name="City"   type="xs:string"/>
        <xs:element name="State">
            <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[A-Z]{2}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>

        <xs:element name="Zip">
            <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[0-9]{5}"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
</xs:schema>

buildings.xml

<?xml version="1.0" encoding="UTF-8"?>

<buildings>

<building>
    <BuildingCode>KOH</BuildingCode>
    <BuildingName>King Olympic Hall</BuildingName>
    <Position>
        <Latitude>34.024547</Latitude>
        <Longitude>-118.288</Longitude>
    </Position>
    <Address>
        <StreetNo>1027</StreetNo>
        <StrName>W 34th St</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90007</Zip>
    </Address>
</building>

<building>
    <BuildingCode>CFX</BuildingCode>
    <BuildingName>Cromwell Field</BuildingName>
    <Position>
        <Latitude>34.021631</Latitude>
        <Longitude>-118.289</Longitude>
    </Position>
    <Address>
        <StreetNo>1026</StreetNo>
        <StrName>W 34th St</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>JEP</BuildingCode>
    <BuildingName>JEP House</BuildingName>
    <Position>
        <Latitude>34.022947</Latitude>
        <Longitude>-118.284</Longitude>
    </Position>
    <Address>
        <StreetNo>801</StreetNo>
        <StrName>W 34th St</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>SHC</BuildingCode>
    <BuildingName>Student Health Center</BuildingName>
    <Position>
        <Latitude>34.023303</Latitude>
        <Longitude>-118.285</Longitude>
    </Position>
    <Address>
        <StreetNo>849</StreetNo>
        <StrName>W 34th St</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>LVY</BuildingCode>
    <BuildingName>Leavey Library</BuildingName>
    <Position>
        <Latitude>34.021595</Latitude>
        <Longitude>-118.282</Longitude>
    </Position>
    <Address>
        <StreetNo>651</StreetNo>
        <StrName>W 35th St</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>VKC</BuildingCode>
    <BuildingName>Von KleinSmid Center</BuildingName>
    <Position>
        <Latitude>34.021649</Latitude>
        <Longitude>-118.284</Longitude>
    </Position>
    <Address>
        <StreetNo>3518</StreetNo>
        <StrName>Trousdale</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>WPH</BuildingCode>
    <BuildingName>Waite Phillips Hall</BuildingName>
    <Position>
        <Latitude>34.022289</Latitude>
        <Longitude>-118.284</Longitude>
    </Position>
    <Address>
        <StreetNo>3550</StreetNo>
        <StrName>Trousdale</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>JHH</BuildingCode>
    <BuildingName>John Hubbard Hall</BuildingName>
    <Position>
        <Latitude>34.020101</Latitude>
        <Longitude>-118.284</Longitude>
    </Position>
    <Address>
        <StreetNo>615</StreetNo>
        <StrName>ChildsWay</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>REG</BuildingCode>
    <BuildingName>Registration Builing</BuildingName>
    <Position>
        <Latitude>34.019603</Latitude>
        <Longitude>-118.282</Longitude>
    </Position>
    <Address>
        <StreetNo>611</StreetNo>
        <StrName>ChildsWay</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>STU</BuildingCode>
    <BuildingName>Student Union</BuildingName>
    <Position>
        <Latitude>34.020226</Latitude>
        <Longitude>-118.286</Longitude>
    </Position>
    <Address>
        <StreetNo>3551</StreetNo>
        <StrName>Trousdale</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>BKS</BuildingCode>
    <BuildingName>Bookstore</BuildingName>
    <Position>
        <Latitude>34.020635</Latitude>
        <Longitude>-118.286</Longitude>
    </Position>
    <Address>
        <StreetNo>840</StreetNo>
        <StrName>ChildsWay</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>RTH</BuildingCode>
    <BuildingName>Ronald Tutor Hall</BuildingName>
    <Position>
        <Latitude>34.020137</Latitude>
        <Longitude>-118.29</Longitude>
    </Position>
    <Address>
        <StreetNo>3710</StreetNo>
        <StrName>McClintock</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>SAL</BuildingCode>
    <BuildingName>Salvatori Com. Center</BuildingName>
    <Position>
        <Latitude>34.01955</Latitude>
        <Longitude>-118.289</Longitude>
    </Position>
    <Address>
        <StreetNo>941</StreetNo>
        <StrName>W 37th Place</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>EEB</BuildingCode>
    <BuildingName>Electrical Engr Center</BuildingName>
    <Position>
        <Latitude>34.019728</Latitude>
        <Longitude>-118.29</Longitude>
    </Position>
    <Address>
        <StreetNo>3715</StreetNo>
        <StrName>McClintock</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>

<building>
    <BuildingCode>OHE</BuildingCode>
    <BuildingName>Olin Hall Engineering</BuildingName>
    <Position>
        <Latitude>34.020493</Latitude>
        <Longitude>-118.29</Longitude>
    </Position>
    <Address>
        <StreetNo>3650</StreetNo>
        <StrName>McClintock</StrName>
        <City>Los Angeles</City>
        <State>CA</State>
        <Zip>90089</Zip>
    </Address>
</building>
</buildings>

氢氧化钾
国王奥林匹克大厅
34.024547
-118.288
1027
西34街
洛杉矶
加利福尼亚州
90007
CFX
克伦威尔球场
34.021631
-118.289
1026
西34街
洛杉矶
加利福尼亚州
90089
杰普
杰普之家酒店
34.022947
-118.284
801
西34街
洛杉矶
加利福尼亚州
90089
SHC
学生健康中心
34.023303
-118.285
849
西34街
洛杉矶
加利福尼亚州
90089
常春藤
利维图书馆
34.021595
-118.282
651
西35街
洛杉矶
加利福尼亚州
90089
VKC
冯·克莱因米德中心
34.021649
-118.284
3518
特鲁斯代尔
洛杉矶
加利福尼亚州
90089
WPH
魏特·菲力普斯大楼
34.022289
-118.284
3550
特鲁斯代尔
洛杉矶
加利福尼亚州
90089
JHH
约翰·哈伯德·霍尔
34.020101
-118.284
615
童装
洛杉矶
加利福尼亚州
90089
规则
登记大楼
34.019603
-118.282
611
童装
洛杉矶
加利福尼亚州
90089
斯图
学生会
34.020226
-118.286
3551
特鲁斯代尔
洛杉矶
加利福尼亚州
90089
BKS
书店
34.020635
-118.286
840
童装
洛杉矶
加利福尼亚州
90089
RTH
罗纳德导师大厅
34.020137
-118.29
3710
麦克林托克
洛杉矶
加利福尼亚州
90089
萨尔
Salvatori公司。居中
34.01955
-118.289
941
西37位
洛杉矶
加利福尼亚州
90089
EEB
电气工程师中心
34.019728
-118.29
3715
麦克林托克
洛杉矶
加利福尼亚州
90089
OHE
奥林霍尔工程
34.020493
-118.29
3650
麦克林托克
洛杉矶
加利福尼亚州
90089
我想将BuildingCode设置为主键并验证buildings.xml文件。我添加了一个名为PKBuildingCode的键,但即使在xml文件中添加重复的BuildingCode,它也不会验证xml文件。
有人能帮我解决这个问题吗

<xs:unique name="PKBuildingCode">
    <xs:selector xpath="building"/>
    <xs:field xpath="BuildingCode"/>
</xs:unique>

另见:


但是我想在另一个xsd文件中引用这个元素BuildingCode作为外键。我怎么做?你在问题中没有提到这一点,是吗?这是不可能的,明白吗