代码之家  ›  专栏  ›  技术社区  ›  Jakub Mosakowski

Xml架构唯一性不检查唯一性

  •  2
  • Jakub Mosakowski  · 技术社区  · 6 年前

    我想在“imie”和“pracownik”的“姓氏”上添加唯一的键,但我不知道我做错了什么。我读过20个关于unique的主题。尝试了一些答案,例如添加“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 回复  |  直到 6 年前
        1
  •  0
  •   Michael Kay    6 年前

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

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