Xml架构唯一不检查唯一性

时间:2018-04-14 20:38:47

标签: xml xsd namespaces schema unique

我想在“pracownik”的“imie”和“surname”上添加唯一键,但我无法弄清楚我做错了什么。我读过20个关于独特的话题。尝试了一些答案,例如添加“xmlns:m”。我也使用xpath测试器并获得“imie”我需要通过xpath =“firma / listaPracownikow / pracownik / imie”。
它是我的架构文件的一部分:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://moja_przestrzen"
    xmlns:m="http://moja_przestrzen"
    xmlns:mp="http://moja_przestrzen/inc"
    targetNamespace="http://moja_przestrzen"
    elementFormDefault="qualified"
    >   

<xsd:element name="firma">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="listaPracownikow">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name="pracownik" type="pracownik" minOccurs="1" maxOccurs="unbounded"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element ref="mp:listaDoWydania"/>
            <xsd:element name="dzial" type="typDzial" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>

        <xsd:unique name="kluczImieNazwisko">
            <xsd:selector xpath="m:listaPracownikow/pracownik"/>
            <xsd:field xpath="imie"/>
            <xsd:field xpath="nazwisko"/>
        </xsd:unique>

        <xsd:key name="kluczDzial">
            <xsd:selector xpath="dzial"/>
            <xsd:field xpath="@num"/>
        </xsd:key>

        <xsd:keyref name="dzialPracownikRef" refer="kluczDzial">
            <xsd:selector xpath="listaPracownikow/pracownik"/>
            <xsd:field xpath="nrDzialu"/>
        </xsd:keyref>

</xsd:element>
</xsd:schema>

xml的一部分:

    <?xml version="1.0" encoding="UTF-8"?>
<firma xmlns="http://moja_przestrzen" xmlns:i="http://moja_przestrzen/inc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://moja_przestrzen schema.xsd">
    <listaPracownikow>
    <pracownik kraj="Polska" urlop="false">
        <stanowisko>Dyrektor</stanowisko>
        <nrDzialu>1</nrDzialu>
        <imie>Jan</imie>
        <nazwisko>Kowalski</nazwisko>
        <wiek>Utajone</wiek>
        <data_zatrudnienia>2016-08-12</data_zatrudnienia>
        <rozpoczecie_pracy>08:00:00</rozpoczecie_pracy>
        <pensja>5300.0</pensja>
        <plec_osoby>
            <mezczyzna />
        </plec_osoby>
        <nr_telefonu>332-112-333</nr_telefonu>
        <adres>
            <miasto>Gdansk</miasto>
            <ulica>Kopeckiego</ulica>
            <nr_domu>3C</nr_domu>
        </adres>
    </pracownik>
<pracownik kraj="Polska" urlop="false">
    <stanowisko>Wicedyrektor</stanowisko>
    <nrDzialu>1</nrDzialu>
    <imie>Jan</imie>
    <nazwisko>Kowalski</nazwisko>
    <wiek>43</wiek>
    <data_zatrudnienia>2016-09-22</data_zatrudnienia>
    <rozpoczecie_pracy>08:00:00</rozpoczecie_pracy>
    <pensja>5000.0</pensja>
    <plec_osoby>
        <kobieta />
    </plec_osoby>
    <nr_telefonu>332-112-333</nr_telefonu>
    <adres>
        <miasto>Gdansk</miasto>
        <ulica>Gawrowicza</ulica>
        <nr_domu>11A</nr_domu>
    </adres>
</pracownik>
<i:listaDoWydania>1300 1500 6200</i:listaDoWydania>

<dzial num="1">
    <nazwa>Kierownictwo</nazwa>
</dzial>
<dzial num="2">
    <nazwa>Administracja</nazwa>
</dzial>
<dzial num="3">
    <nazwa>Ksiegowosc</nazwa>
</dzial>

我对key和keyref有同样的问题,但我想这是同样的问题。

1 个答案:

答案 0 :(得分:0)

所有元素都在命名空间中,因此XPath表达式中的所有元素名称都需要加前缀:

<xsd:selector xpath="m:listaPracownikow/m:pracownik"/>
<xsd:field xpath="m:imie"/>
<xsd:field xpath="m:nazwisko"/>