<!--*****************************************************************-->
<!-- DTD FOR the MATHEMATICAL QUERY MARKUP LANGUAGE (XMathQL) -->
<!-- First draft: April 2002, Irene Schena -->
+<!-- Second draft: Agust 2002, Irene Schena -->
<!--*****************************************************************-->
<!--*****************************************************************-->
<!-- MathQL. -->
<!-- Operators are unambiguous (binary or unary), so there isn't any -->
<!-- grouping operator. -->
-<!-- SORTBY operator for sorting query results. -->
-<!-- CONST is the constant string; rvar is for references and lvar -->
-<!-- for list. -->
-<!-- The attributes binder, rvar, lvar declare variables which are -->
-<!-- referred to and used by means of respectively BINDER, Rvar and -->
-<!-- RVAR, Lvar and LVAR. -->
-<!-- Rvar (Lvar) is casted to a list, on the contrary the use of RVAR-->
-<!-- (LVAR) is casted to a string. -->
+<!-- CONST is the quoted constant string; rvar is for single -->
+<!-- reference and svar for sets of references, i.e. query results. -->
+<!-- The attributes binder, rvar, svar declare variables which are -->
+<!-- referred to and used by means of respectively BINDER, Rvar, Svar-->
<!-- PROPERTY works on a specified RDF property returning its value. -->
<!--*****************************************************************-->
-<!ENTITY % order '(ascendant|descendant)'>
-
-<!ENTITY % position '(MainHypothesis|Hypothesis|MainConclusion|Conclusion|
- Body)'>
-
<!ENTITY % bool '(True|False)'>
-<!ENTITY % token '(CONST|STAR|TWOSTARS|SLASH|QUESTIONMARK)'>
+<!-- MathQL query expression declaration -->
-<!-- MathQL list expression declaration -->
-
-<!ENTITY % listexpr '(Rvar|Lvar|Reference|Pattern|Select|LetIn|SortBy|
- Use|UsedBy|ConstructorsOf|InTheory|TheoryRefTo|
- TypeOf|SuperTypeOf|SubTypeOf|Union|Intersect|Diff|
- Minimize)'>
+<!ENTITY % setexpr '(Rvar|Lvar|Ref|Pattern|Select|LetIn|Relation|
+ TypeOf|SuperTypeOf|SubTypeOf|Union|Intersect|Diff)'>
<!-- MathQL boolean expression declaration -->
-<!ENTITY % boolexpr '(BOOL|NOT|AND|OR|IS|SETEQUAL|SUBSET|EXISTS)'>
+<!ENTITY % boolexpr '(BOOL|NOT|AND|OR|EQ|SUB|MEET|EX)'>
-<!-- MathQL string expression declaration -->
+<!-- MathQL string-set expression declaration -->
-<!ENTITY % functexpr '(NAME|PROPERTY|SUPERPROPERTY|SUBPROPERTY)'>
+<!ENTITY % functexpr '(FUN|PROPERTY|SUPERPROPERTY|SUBPROPERTY)'>
-<!ENTITY % stringexpr '(CONST|POSITION|RVAR|BINDER|%functexpr;)'>
+<!ENTITY % stringsetexpr '(CONST|CONSTLIST|REFOF|BINDER|%functexpr;)'>
<!-- MathQL query top-element -->
-<!ELEMENT MQLquery %listexpr;>
+<!ELEMENT MQLquery %setexpr;>
+
+<!-- MathQL set expressions -->
-<!-- MathQL list expressions -->
<!ELEMENT Rvar EMPTY>
<!ATTLIST Rvar
name CDATA #REQUIRED>
-<!ELEMENT Lvar EMPTY>
-<!ATTLIST Lvar
+<!ELEMENT Svar EMPTY>
+<!ATTLIST Svar
name CDATA #REQUIRED>
-<!ELEMENT Reference (RPrefix, RBody, Ext, (RFragmentID?))>
+<!ELEMENT Ref %stringsetexpr;>
-<!ELEMENT Pattern (PPrefix, PBody, (Ext?), (PFragmentID?))>
+<!ELEMENT Pattern %stringsetexpr;>
<!ELEMENT Select (In, Where)>
-<!ELEMENT LetIn (%listexpr;, Target)>
-
-<!ELEMENT Use (%listexpr;, Position)>
-
-<!ELEMENT UsedBy (%listexpr;, Position)>
-
-<!ELEMENT ConstructorsOf %listexpr;>
-
-<!ELEMENT InTheory (%listexpr;, ItemType)>
+<!ELEMENT LetIn (%setexpr;, Target)>
-<!ELEMENT TheoryRefTo %listexpr;>
+<!ELEMENT Relation (%setexpr;, Attr+)>
+<!ATTLIST Relation
+ name CDATA #REQUIRED>
-<!ELEMENT TypeOf %listexpr;>
+<!ELEMENT TypeOf %setexpr;>
<!ATTLIST TypeOf
binder CDATA #REQUIRED>
-<!ELEMENT SuperTypeOf %listexpr;>
+<!ELEMENT SuperTypeOf %setexpr;>
<!ATTLIST SuperTypeOf
binder CDATA #REQUIRED>
-<!ELEMENT SubTypeOf %listexpr;>
+<!ELEMENT SubTypeOf %setexpr;>
<!ATTLIST SubTypeOf
binder CDATA #REQUIRED>
-<!ELEMENT Union (%listexpr;, %listexpr;)>
-
-<!ELEMENT Intersect (%listexpr;, %listexpr;)>
-
-<!ELEMENT Diff (%listexpr;, %listexpr;)>
-
-<!ELEMENT SortBy (%listexpr;, SortField)>
-
-<!ELEMENT Minimize %listexpr;>
-
-<!-- MathQL list sub-expressions -->
-
-<!ELEMENT RPrefix (CONST)>
+<!ELEMENT Union (%setexpr;, %setexpr;)>
-<!ELEMENT RBody (CONST)>
+<!ELEMENT Intersect (%setexpr;, %setexpr;)>
-<!ELEMENT RFragmentID (NUMBER)+>
+<!ELEMENT Diff (%setexpr;, %setexpr;)>
-<!ELEMENT Ext (CONST)>
+<!-- MathQL set sub-expressions -->
-<!ELEMENT PPrefix (CONST|STAR)>
-
-<!ELEMENT PBody (%token;)+>
-
-<!-- XPointers have max depth = 2 (see CIC inductive definitions) -->
-<!ELEMENT PFragmentID (NUMBER|TWOSTARS|STAR)+>
-
-<!ELEMENT NUMBER EMPTY>
-<!ATTLIST NUMBER
- value NMTOKEN #REQUIRED>
-
-<!-- We need SLASH for grouping CONST with QUESTIONMARK -->
-<!ELEMENT SLASH EMPTY>
-
-<!-- STAR expands only to objects of the specified dir before the last "/":
- ex. cic:/Algebra/* expands to every object in Algebra only -->
-<!ELEMENT STAR EMPTY>
-
-<!-- TWOSTARS expands till the most complete name (with extension if not
- specifified) -->
-<!ELEMENT TWOSTARS EMPTY>
-
-<!-- QUESTIONMARK matches one character except "/" -->
-<!ELEMENT QUESTIONMARK EMPTY>
-
-<!ELEMENT In %listexpr;>
+<!ELEMENT In %setexpr;>
<!ELEMENT Where %boolexpr;>
<!ATTLIST Where
rvar CDATA #REQUIRED>
-<!ELEMENT Target %listexpr;>
+<!ELEMENT Target %setexpr;>
<!ATTLIST Target
- lvar CDATA #REQUIRED>
+ svar CDATA #REQUIRED>
-<!ELEMENT Position EMPTY>
-<!ATTLIST Position
+<!ELEMENT Attr EMPTY>
+<!ATTLIST Attr
binder CDATA #REQUIRED>
-<!ELEMENT ItemType EMPTY>
-<!ATTLIST ItemType
- binder CDATA #REQUIRED>
-
-<!ELEMENT SortField %functexpr;>
-<!ATTLIST SortField
- order %order; #IMPLIED>
-
<!-- MathQL boolean expressions -->
<!ELEMENT BOOL EMPTY>
<!ELEMENT OR (%boolexpr;, %boolexpr;)>
-<!ELEMENT IS (%stringexpr;, %stringexpr;)>
+<!ELEMENT EQ (%stringsetexpr;, %stringsetexpr;)>
-<!ELEMENT SETEQUAL (%listexpr;, %listexpr;)>
+<!ELEMENT SUB (%stringsetexpr;, %stringsetexpr;)>
-<!ELEMENT SUBSET (%listexpr;, %listexpr;)>
+<!ELEMENT MEET (%stringsetexpr;, %stringsetexpr;)>
-<!ELEMENT EXISTS (RVAR, %listexpr;)>
+<!ELEMENT EX %boolexpr;>
-<!-- MathQL string expressions -->
+<!-- MathQL string-set expressions -->
<!ELEMENT CONST (#PCDATA)>
-<!ELEMENT RVAR EMPTY>
-<!ATTLIST RVAR
- name CDATA #REQUIRED>
+<!ELEMENT CONSTLIST (CONST*)>
-<!ELEMENT BINDER EMPTY>
+<!ELEMENT REFOF %setexpr;>
+
+<!ELEMENT BINDER (Rvar)>
<!ATTLIST BINDER
name CDATA #REQUIRED>
-<!ELEMENT POSITION EMPTY>
-<!ATTLIST POSITION
- name %position; #REQUIRED>
-
-<!ELEMENT NAME (RVAR)>
+<!ELEMENT FUN (Rvar)>
+<!ATTLIST FUN
+ name CDATA #REQUIRED>
-<!ELEMENT PROPERTY (RVAR)>
+<!ELEMENT PROPERTY (Rvar)>
<!ATTLIST PROPERTY
name CDATA #REQUIRED>
-<!ELEMENT SUPERPROPERTY (RVAR)>
+<!ELEMENT SUPERPROPERTY (Rvar)>
<!ATTLIST SUPERPROPERTY
name CDATA #REQUIRED>
-<!ELEMENT SUBPROPERTY (RVAR)>
+<!ELEMENT SUBPROPERTY (Rvar)>
<!ATTLIST SUBPROPERTY
name CDATA #REQUIRED>
\ No newline at end of file