Duomenų šaltiniai

Duomenų šaltiniai#

SQL#

resource.source

Duomenų bazės URI. Duomenų bazės URI formuojamas naudojant tokį ABNF šabloną:

uri = type ["+" driver] "://"
      [user [":" password] "@"]
      host [":" port]
      "/" database ["?" params]

Šablone naudojamų kintamųjų aprašymas:

type

Duomenų bazių serverio pavadinimas:

sqlite
postgresql
mysql
oracle
mssql
driver

Konkretaus duomenų bazių serverio tvarkyklė naudojama komunikacijai su duomenų baze.

user

Naudotojo vardas jungimuisi prie duomenų bazės.

password

Duomenų bazės naudotojo slaptažodis.

host

Duomenų bazių serverio adresas.

port

Duomenų bazių serverio prievadas.

database

Konkrečios duomenų bazės pavadinimas.

params

Papildomi parametrai Query string formatu.

resource.prepare

Formulė skirta papildomiems veiksmams reikalingiems ryšiui su duomenų baze užmegzti ir duomenų bazės paruošimui, kad būtų galima skaityt duomenis.

resource.type

Galimos reikšmės: sql.

resource.prepare
connect(dsn, schema: str = None, encoding: str = 'utf-8')#
Parametrai:
  • dsn -- Duomenų bazės URI, kaip nurodyta resource.source.

  • schema -- Duomenų bazės schema.

  • encoding -- Duomenų bazės koduotė.

Naudojama tais atvejais, kai jungiantis prie duomenų bazės reikia perduoti papildomus parametrus.

model.source

Duomenų bazėje esančios lentelės pavadinimas.

property.source

Lentelės stulpelio pavadinimas.

CSV#

resource.type

Galimos reikšmės: csv, tsv.

resource.source

Žiūrėti Failai.

resource.prepare
tabular(sep: ',')#

Nurodoma kaip CSV faile atskirti stulpeliai. Pagal nutylėjimą separator reikšmė yra ,.

model.source

Nenaudojama, kadangi CSV resursas gali turėti tik vieną lentelę.

model.prepare

Žiūrėti Stulpeliai lentelėje.

property.source

Žiūrėti Stulpeliai lentelėje.

JSON#

resource.type

Galimos reikšmės: json, jsonl.

resource.source

Žiūrėti Failai.

model.source

JSON objekto savybės pavadinimas, kuri rodo į masyvą reikšmių, kurios bus naudojamos kaip modelio duomenų eilutės. Kiekvienas masyvo elementas atskirai aprašomas property dimensijoje. Jei JSON objektas yra kompleksinis žiūrėti Kompleksinės struktūros.

property.source

JSON objekto savybė, kurioje pateikiami aprašomo stulpelio duomenys.

property.prepare

Žiūrėti Kompleksinės struktūros.

XML#

resource.type

Galimos reikšmės: xml, html.

resource.source

Žiūrėti Failai.

model.source

XPath iki elementų sąrašo kuriame yra modelio duomenys.

model.prepare

Jei neužpildyta, vykdoma xpath(self) funkcija.

xpath(expr)#

Vykdo nurodyta expr, viso XML dokumento kontekste.

property.source

XPath iki elemento kuriame yra duomenys.

XPath nurodomas reliatyvus modeliui, arba kitai daugiareikšmei savybei, kurios sudėtyje savybė yra. Daugiareikšmės savybės žymimos [] simboliais savybės kodiniame pavadinime, įprastai tai yra array tipo savybės.

model.prepare

Jei neužpildyta, vykdoma xpath(self) funkcija, iš model gauto elemento kontekste.

Pavyzdys

<countries>
    <country id="1" name="Lithuania">
        <cities>
            <city id="10" name="Vilnius">
                <streets>
                    <street id="100">Gedimino st.</street>
                    <street id="101">Konstitucijos st.</street>
                </streets>
            </city>
            <city id="11" name="Kaunas">
                <streets>
                    <street id="102">Laisves st.</street>
                    <street id="103">Daukanto st.</street>
                </streets>
            </city>
        </cities>
    </country>
</countries>
        classDiagram
    direction LR

    class Country {
      + id: integer [1..1]
      + name@en: string [1..1]
    }

    class City {
      + id: integer [1..1]
      + name@en: string [1..1]
    }

    class Street {
      + id: integer [1..1]
      + name@en: string [1..1]
    }

    City --> "[1..1]" Country : country
    City "[1..*]" <-- Country : cities

    Street --> "[1..1]" City : city
    Street "[1..*]" <-- City : streets
    

Pagal aukščiau duotus duomenis ir koncepcinį modelį, struktūros aprašas atrodys taip:

model

property

type

ref

source

Country

id

countries/country

id

integer

@id

name@en

string

@name

cities[]

backref

City

cities/city

cities[].id

integer

@id

cities[].name@en

string

@name

cities[].country

ref

Country

../../@id

cities[].streets[]

backref

Street

streets/street

cities[].streets[].id

integer

@id

cities[].streets[].name@en

string

@name

cities[].streets[].city

ref

City

../../@id

City

id

countries/country/cities/city

id

integer

@id

name@en

string

@name

country

ref

Country

../../@id

Street

id

countries/country/cities/city/streets/street

id

integer

@id

name@en

string

@name

country

ref

City

../../@id

Struktūros apraše matome du variantus, kaip gali būti aprašomi duomenys. Pirmu atveju Country modelyje naudojama objektų kompozicija, kur vieno Country objekto apimtyje, pateikiami ir kiti objektai.

Reikia atkreipti dėmesį, kad savybės esančios kitos daugiareikšmės savybės sudėtyje, property.source stulpelyje nurodo XPath išraišką reliatyvią daugereikšmei savybei. Daugiareikšmės savybės žymymos [] žyme.

Pavyzdyje cities[].id property.source stulpelyje nurodo @id, kuris yra reliatyvus cities[] savybės streets/street atžvilgiu.

Pagal struktūros aprašą pateiktą aukščiau, kreipiantis į /Country, gausime tokius UDTS specifikaciją atitinkančius duomenis:

{
    "_type": "Country",
    "_id": "29df0534-389d-4eac-a048-799ac64d5103",
    "id": 1,
    "name": {"en": "Lithuana"},
    "cities": [
        {
            "_type": "City",
            "_id": "4a7a3214-e6c3-4a5b-99a8-04be88eac3d4",
            "id": 10,
            "name": {"en": "Vilnius"},
            "country": {
                "_type": "Country",
                "_id": "29df0534-389d-4eac-a048-799ac64d5103"
            },
            "streets": [
                {
                    "_type": "Street",
                    "_id": "c1380514-549f-4cdd-b258-6fecc3a5bbda",
                    "id": 100,
                    "name": {"en": "Gedimino st."},
                    "city": {
                        "_type": "City",
                        "_id": "4a7a3214-e6c3-4a5b-99a8-04be88eac3d4"
                    },
                },
                {
                    "_type": "Street",
                    "_id": "5c02f700-6478-43a0-a147-959927cb3c1c",
                    "id": 101,
                    "name": {"en": "Konstitucijos st."},
                    "city": {
                        "_type": "City",
                        "_id": "4a7a3214-e6c3-4a5b-99a8-04be88eac3d4"
                    },
                }
            ]
        },
        {
            "_type": "City",
            "_id": "0fee7d9a-6827-4931-bbea-d44d197faef2",
            "id": 11,
            "name": {"en": "Kaunas"},
            "country": {
                "_type": "Country",
                "_id": "29df0534-389d-4eac-a048-799ac64d5103"
            },
            "streets": [
                {
                    "_type": "Street",
                    "_id": "399a37d6-63a7-43a4-82de-d3d5c75f5d02",
                    "id": 102,
                    "name": {"en": "Laisves st."},
                    "city": {
                        "_type": "City",
                        "_id": "0fee7d9a-6827-4931-bbea-d44d197faef2"
                    },
                },
                {
                    "_type": "Street",
                    "_id": "5b04fecd-5fff-48f6-8674-7cc6da840281",
                    "id": 103,
                    "name": {"en": "Daukanto st."},
                    "city": {
                        "_type": "City",
                        "_id": "0fee7d9a-6827-4931-bbea-d44d197faef2"
                    },
                }
            ]
        }
    ]
}

Analogiškai, jei kreiptumėmės į /Street, gautume visas gatves iš visų miestų:

{
    "_data": [
        {
            "_type": "Street",
            "_id": "c1380514-549f-4cdd-b258-6fecc3a5bbda",
            "id": 100,
            "name": {"en": "Gedimino st."},
            "city": {
                "_type": "City",
                "_id": "4a7a3214-e6c3-4a5b-99a8-04be88eac3d4"
            },
        },
        {
            "_type": "Street",
            "_id": "5c02f700-6478-43a0-a147-959927cb3c1c",
            "id": 101,
            "name": {"en": "Konstitucijos st."},
            "city": {
                "_type": "City",
                "_id": "4a7a3214-e6c3-4a5b-99a8-04be88eac3d4"
            },
        },
        {
            "_type": "Street",
            "_id": "399a37d6-63a7-43a4-82de-d3d5c75f5d02",
            "id": 102,
            "name": {"en": "Laisves st."},
            "city": {
                "_type": "City",
                "_id": "0fee7d9a-6827-4931-bbea-d44d197faef2"
            },
        },
        {
            "_type": "Street",
            "_id": "5b04fecd-5fff-48f6-8674-7cc6da840281",
            "id": 103,
            "name": {"en": "Daukanto st."},
            "city": {
                "_type": "City",
                "_id": "0fee7d9a-6827-4931-bbea-d44d197faef2"
            },
        }
    ]
}

XLSX#

resource.type

Galimos reikšmės: xlsx, xls arba odt.

resource.source

Žiūrėti Failai.

model.source

Skaičiuoklės faile esančio lapo pavadinimas.

model.prepare

Žiūrėti Stulpeliai lentelėje.

property.source

Žiūrėti Stulpeliai lentelėje.

WSDL#

Šiuo metu palaikoma tik WSDL 1.1 versija.

Šaltinis inicializuoja WSDL klientą pagal resource.source nurodytą URI.

Pastaba

wsdl šaltinis skaito WSDL failą, aprašantį kitus duomenų šaltinius, todėl pagrinde yra naudojamas kartu su kitais resursais, nurodant Duomenų šaltinių tarpusavio sąsaja.

Šiuo metu WSDL resursas naudojamas tik kartu su SOAP resursu.

resource.source

Pilnas WSDL adresas URI formatu.

resource.type

Galimos reikšmės: wsdl.

SOAP#

resource.source

WSDL elementai, aprašantys konkretų duomenų rinkinį, atskirti tašku, naudojant tokį šabloną:

Service.Port.PortType.Operation

Šablone naudojamų kintamųjų aprašymas:

Service

WSDL Service elemento pavadinimas.

Port

WSDL Port elemento pavadinimas.

PortType

WSDL PortType elemento pavadinimas.

Operation

WSDL SOAP Operation elemento pavadinimas.

resource.type

Galimos reikšmės: soap.

resource.prepare

Žiūrėti Duomenų šaltinių tarpusavio sąsaja.

model.source

XPath iki elementų sąrašo, kuriame yra modelio duomenys.

Pastaba

Kol kas nėra įgyvendinta. Naudoti /.

property.source

XML elemento, kuriame nurodyti duomenys, pavadinimas duomenų šaltinyje.

Pastaba

Svarbu pabrėžti, kad yra įgyvendintas tik vienareikšmių savybių skaitymas, todėl duomenys, esantys duomenų šaltinio daugiareikšmėse savybėse, nebus nuskaityti.

Pavyzdys (be SOAP request duomenų)

Duomenų šaltinis:

<ns0:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/"
              xmlns:ns1="city_app">
    <ns0:Body>
        <ns1:CityOutputResponse>
            <ns1:CityOutput>
                <ns1:id>100</ns1:id>
                <ns1:name>Name One</ns1:name>
            </ns1:CityOutput>
            <ns1:CityOutput>
                <ns1:id>101</ns1:id>
                <ns1:name>Name Two</ns1:name>
            </ns1:CityOutput>
        </ns1:CityOutputResponse>
    </ns0:Body>
</ns0:Envelope>

WSDL:

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
         xmlns:tns="city_app"
         targetNamespace="city_app"
         name="CityService">

    <wsdl:types>
        <xs:schema targetNamespace="city_app">
            <xs:element name="CityInputRequest"/>

            <xs:element name="CityOutputResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="CityOutput" type="tns:CityOutput" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

            <xs:complexType name="CityOutput">
                <xs:sequence>
                    <xs:element name="id" type="xs:int"/>
                    <xs:element name="name" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>

    <wsdl:message name="CityInputRequest">
        <wsdl:part name="parameters" element="tns:CityInputRequest"/>
    </wsdl:message>
    <wsdl:message name="CityOutputResponse">
        <wsdl:part name="parameters" element="tns:CityOutputResponse"/>
    </wsdl:message>

    <wsdl:portType name="CityPortType">
        <wsdl:operation name="CityOperation">
            <wsdl:input message="tns:CityInputRequest"/>
            <wsdl:output message="tns:CityOutputResponse"/>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="CityServiceBinding" type="tns:CityPortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="CityOperation">
            <soap:operation soapAction="urn:CityOperation"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="CityService">
        <wsdl:port name="CityPort" binding="tns:CityServiceBinding">
            <soap:address location="http://example.com/city"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Pagal aukščiau pateiktus duomenis ir WSDL aprašymą, duomenų struktūros aprašas atrodys taip:

resource

model

property

type

ref

source

prepare

towns_wsdl

wsdl

http://example.com/city?wsdl

towns

soap

CityService.CityPort.CityPortType.CityOperation

wsdl(towns_wsdl)

City

id

/

id

integer

id

name

string

name


Struktūros apraše, aprašyti du ištekliai towns_wsdl ir towns, naudojantys Duomenų šaltinių tarpusavio sąsaja.

Resurso towns_wsdl resource.source stulpelyje yra nurodomas WSDL dokumento adresas. Šis resursas inicializuos WSDL klientą.

Resurso towns resource.source stulpelyje nurodomi WSDL elementai, aprašantys konkretų duomenų rinkinį. resource.prepare stulpelyje yra nurodoma wsdl(towns_wsdl) funkcija, kuri grąžina SOAP operaciją, naudojant towns_wsdl resurse inicializuotą WSDL klientą ir WSDL elementus, aprašytus resource.source.

Reikia atkreipti dėmesį, kad property.source stulpeliuose aprašomi elementai turi sutapti su duomenų šaltinyje esančių elementų pavadinimais.

Pagal duomenų struktūros aprašą pateiktą aukščiau, kreipiantis į /City, gausime tokius UDTS specifikaciją atitinkančius duomenis:

{
    "_data": [
        {
            "_type": "City",
            "_id": "c1380514-549f-4cdd-b258-6fecc3a5bbda",
            "id": 100,
            "name": "Name One",
        },
        {
            "_type": "City",
            "_id": "5c02f700-6478-43a0-a147-959927cb3c1c",
            "id": 101,
            "name": "Name Two",
        }
    ]
}

Pavyzdys (su SOAP request duomenimis)

Remiantis ankstesniu pavyzdžiu, turint WSDL, papildytą CityInputRequest schema:

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
         xmlns:xs="http://www.w3.org/2001/XMLSchema"
         xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
         xmlns:tns="city_app"
         targetNamespace="city_app"
         name="CityService">

    <wsdl:types>
        <xs:schema targetNamespace="city_app">
            <xs:element name="CityInputRequest">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="request_model" type="tns:RequestModelType" minOccurs="0" nillable="true"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

            <xs:complexType name="RequestModelType">
                <xs:sequence>
                    <xs:element name="param1" type="xs:string" minOccurs="0" nillable="true"/>
                    <xs:element name="param2" type="xs:string" minOccurs="0" nillable="true"/>
                </xs:sequence>
            </xs:complexType>

            <xs:element name="CityOutputResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="CityOutput" type="tns:CityOutput" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

            <xs:complexType name="CityOutput">
                <xs:sequence>
                    <xs:element name="id" type="xs:int"/>
                    <xs:element name="name" type="xs:string"/>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>

    <wsdl:message name="CityInputRequest">
        <wsdl:part name="parameters" element="tns:CityInputRequest"/>
    </wsdl:message>
    <wsdl:message name="CityOutputResponse">
        <wsdl:part name="parameters" element="tns:CityOutputResponse"/>
    </wsdl:message>

    <wsdl:portType name="CityPortType">
        <wsdl:operation name="CityOperation">
            <wsdl:input message="tns:CityInputRequest"/>
            <wsdl:output message="tns:CityOutputResponse"/>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="CityServiceBinding" type="tns:CityPortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="CityOperation">
            <soap:operation soapAction="urn:CityOperation"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>

    <wsdl:service name="CityService">
        <wsdl:port name="CityPort" binding="tns:CityServiceBinding">
            <soap:address location="http://example.com/city"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

ir turint DSA, papildytą resource.param ir property eilutėmis:

resource

model

property

type

ref

source

prepare

towns_wsdl

wsdl

http://example.com/city?wsdl

towns

soap

CityService.CityPort.CityPortType.CityOperation

wsdl(towns_wsdl)

param

parameter1

request_model/param1

input("value1")

param

parameter2

request_model/param2

input("value2")

City

id

/

id

integer

id

name

string

name

p1

string

param(parameter1)

p2

string

param(parameter2)


kreipiantis į /City?p1="first", bus suformuotas toks python dictionary, kurį Zeep klientas perduos kaip SOAP request body:

{"request_model": {"param1": "first", "param2": "value2"}}

ir gausime tokius UDTS specifikaciją atitinkančius duomenis:

{
    "_data": [
        {
            "_type": "City",
            "_id": "c1380514-549f-4cdd-b258-6fecc3a5bbda",
            "id": 100,
            "name": "Name One",
            "p1": "first",
            "p2": "value2",
        },
        {
            "_type": "City",
            "_id": "5c02f700-6478-43a0-a147-959927cb3c1c",
            "id": 101,
            "name": "Name Two",
            "p1": "first",
            "p2": "value2",
        }
    ]
}