Սկիզբ » Ուսումնական նյութեր » Ծրագրավորում » Ռելյացիոն հանրահաշվի գործողությունների ներկայացումը XML լեզվով

Ռելյացիոն հանրահաշվի գործողությունների ներկայացումը XML լեզվով

| Հոկտեմբեր 6, 2012 | Մեկնաբանված չէ |

Նրանք, ովքեր մինչև 2007 թվականը սովորել են ԵՊՀ Կիրառական մաթեմատիկայի և ինֆորմատիկայի ֆակուլտետում, կամ 2007-ից հետո սովորել են ԵՊՀ Տեղեկատվական տեխնոլոգիաների կրթական և հետազոտական կենտրոնում, լավ են ճանաչում Մանուկյան Մանուկին։ Ովքեր չեն ճանաչում՝ նրանց բախտը չի բերել։ Պր-ն Մանուկյանը մեր խմբում կարդում էր “XML և տվյալների բազաներ” դասընթացը, և ուներ խնդիրների ցուցակ, որից ուսանողներին ինքնուրույն աշխատանքներ էր հանձնարարում։ Ես, իհարկե, դասերին չէի նստում, որովհետև կարծում էի, և հիմա էլ կարծում եմ, որ լրիվ անպետք դասընթաց էր։

Որպես բացակայությունների փոխհատուցում Մանուկյանի ցուցակից ընտրեցի, թող անհամեստություն չլինի ասել, ամենադժվար խնդիրը. “Ռելյացիոն հանրահաշվի գործողությունների ներկայացումը XML սխեմայով”։ Քանի որ XML սխեմաներից բան չէի հասկանում, իսկ DTD կանոններ գրելուն քչից-շատից ծանոթ էի, նախ կազմեցի ռելյացիոն հանրահաշվի լեզվի քերականությունը՝ Բեկուս-Նաուրի սխեմայով։ Ահա այն.

Query = SecondaryQuery.
SecondaryQuery = PrimaryQuery { SetOperation PrimaryQuery }.
PrimaryQuery = Relation 
    | "(" SecondaryQuery ")" 
    | "@project" "{" ArgumentList "}" "(" SecondaryQuery ")"
    | "@rename" "{" Relation "}" "(" SecondaryQuery ")"
    | "@select" "{" Predicate "}" "(" SecondaryQuery ")".
Realtion = "Identifier" [ "(" ArgumentList ")" ].
SetOperation = "@union" | "@difference" | "@intersection" | "@times" | "@join".
ArgumentList = "Identifier" { "," "Identifier" }.
Predicate = Disjunction.
Disjunction = Conjunction { "@or" Conjunction }.
Conjunction = Equality { "@and" Equality }.
Equality = Inequality [ ("=" | "<>" Inequality }.
Inequality = Negation [ (">" | ">=" | "<" | "<=") Negation ].
Negation = "@not" Factor.
Factor = "Identifier" 
    | "(" Disjunction ")" 
    | "String"
    | "Number".

Այնուհետև Բեկուս-Նաուրի սխեմայից կազմեցի DTD սխեման։

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

<!ENTITY % query "relation | union | intersection | difference | times | join | project | select | rename" >

<!ELEMENT relation (rname,attributes?) >
<!ELEMENT rname (#PCDATA)>

<!ELEMENT union ((%query;),(%query;)) >

<!ELEMENT intersection ((%query;),(%query;)) >

<!ELEMENT difference ((%query;),(%query;)) >

<!ELEMENT times ((%query;),(%query;)) >

<!ELEMENT join (condition?,(%query;),(%query;)) >

<!ELEMENT project (attributes?,(%query;)) >

<!ELEMENT rename (relation,(%query;))>

<!ELEMENT attributes (attribute+)>

<!ELEMENT attribute (#PCDATA)>

<!ELEMENT select (condition?,(%query;))>

<!ELEMENT condition (#PCDATA)>

Հետո գտա ինչ-որ XML խմբագիր, անունը արդեն չեմ հիշում, որը կարողանում էր DTD սահմանումները վերածել XSL սխեմաների։ Մի քանի կոճակ սեղմելով, ստացա XSL սխեմայի նախնական տարբերակը, ապա մի քանի մանր-մունր խմբագրումներից հետո, ինչպես նաև MathML սխեման ավելացնելուց հետո ստացա ահա սա.

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

  <!-- Relational algebra common query -->
  <xs:element name="query" abstract="true"/>

  <!-- հարաբերություն -->
  <xs:element name="relation" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string"/>
        <xs:element minOccurs="0" ref="attributes"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!-- -->
  <xs:element name="union" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="query"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="intersection" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="query"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="difference" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="query"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="times" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="query"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="join" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="OMOBJ"/>
        <xs:element ref="query"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="project" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="attributes"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="rename" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="relation"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="attributes">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="attribute" type="xs:string" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="select" substitutionGroup="query">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="OMOBJ"/>
        <xs:element ref="query"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>

Սրա եղածն, իհարկե մի երևելի բան չէ, և որպեսզի աշխատանքը ներկայացնելն ավելի տպավորիչ լինի C++ լեզվով և Qt4.x գրադարանի օգտագործմամբ գրեցի մի աշխատանքային միջավայր, որի պատուհաններից մեկում կարելի էր ներմուծել ռելյացիոն հանրահաշվի հարցում, ապա, ընտրելով “Թարգմանել” գործողությունը, այդ հարցումը թարգմանել XML ներկայացման։ Համոզվելու համար, որ գեներացված XML կոդը համապատասխանում է XSL սխեմային, պետք է ընտրել “Վավերացում” գործողությունը։


Պրոյեկտի կոդը կարելի է վերցնել սկզբնաղբյուրից։

Ռելյացիոն հանրահաշվի գործողությունների ներկայացումը XML լեզվով, 9.8 out of 10 based on 5 ratings

Նշագրեր: ,

Բաժին: Ծրագրավորում, Տվյալների բազաներ

Կիսվել , տարածել , պահպանել

VN:F [1.9.20_1166]
Rating: 9.8/10 (5 votes cast)

Մեկնաբանեք

Կհաստատվեն միայն մեսրոպատառ հայերենով գրած մեկնաբանությունները

305