Exemplo n.º 1
0
 def bits_type(self, tchain, p_elem):
     elem = SchemaNode("list", p_elem)
     zom = SchemaNode("zeroOrMore", elem)
     choi = SchemaNode.choice(zom, occur=2)
     for bit in tchain[0].search("bit"):
         optel = SchemaNode("optional", choi)
         SchemaNode("value", optel, bit.arg)
 def bits_type(self, tchain, p_elem):
     elem = SchemaNode("list", p_elem)
     zom = SchemaNode("zeroOrMore", elem)
     choi = SchemaNode.choice(zom, occur=2)
     for bit in tchain[0].search("bit"):
         optel = SchemaNode("optional", choi)
         SchemaNode("value", optel, bit.arg)
Exemplo n.º 3
0
 def type_with_ranges(self, tchain, p_elem, rangekw, gen_data):
     """Handle types with 'range' or 'length' restrictions."""
     ranges = self.get_ranges(tchain, rangekw)
     if not ranges: return p_elem.subnode(gen_data())
     if len(ranges) > 1:
         p_elem = SchemaNode.choice(p_elem)
         p_elem.occur = 2
     for r in ranges:
         d_elem = gen_data()
         for p in self.range_params(r, rangekw):
             d_elem.subnode(p)
         p_elem.subnode(d_elem)
Exemplo n.º 4
0
 def type_with_ranges(self, tchain, p_elem, rangekw, gen_data):
     """Handle types with 'range' or 'length' restrictions."""
     ranges = self.get_ranges(tchain, rangekw)
     if not ranges: return p_elem.subnode(gen_data())
     if len(ranges) > 1:
         p_elem = SchemaNode.choice(p_elem)
         p_elem.occur = 2
     for r in ranges:
         d_elem = gen_data()
         for p in self.range_params(r, rangekw):
             d_elem.subnode(p)
         p_elem.subnode(d_elem)
Exemplo n.º 5
0
 def choice_stmt(self, stmt, p_elem, pset):
     chelem = SchemaNode.choice(p_elem)
     plist, new_pset = self.select_patch(pset, stmt.arg)
     if self.is_mandatory(stmt, plist):
         chelem.occur = 2
         self.propagate_occur(chelem.parent, 2)
     else:
         defv = self.get_default(stmt, plist)
         if defv:
             chelem.default_case = defv
         else:
             chelem.occur = 3
     for s in plist: self.handle_stmt(s, chelem, new_pset)
     self.handle_substmts(stmt, chelem, new_pset)
    def add_identity(self, ident):
        """Add `id_stmt` and all derivates to `self.identities`.

        `ident` must be a fully qualified identity name.
        """
        def trname(iname): return "__" + iname.replace(":","_")
        if ident in self.identities: return
        parent = SchemaNode.define(trname(ident))
        self.identities[ident] = parent
        if self.identity_deps[ident]:
            parent = SchemaNode.choice(parent, occur=2)
        SchemaNode("value", parent, ident).attr["type"]="QName"
        for i in self.identity_deps[ident]:
            SchemaNode("ref", parent).attr["name"]=trname(i)
            self.add_identity(i)
Exemplo n.º 7
0
 def choice_stmt(self, stmt, p_elem, pset):
     chelem = SchemaNode.choice(p_elem)
     plist, new_pset = self.select_patch(pset, stmt.arg)
     if self.is_mandatory(stmt, plist):
         chelem.occur = 2
         self.propagate_occur(chelem.parent, 2)
     else:
         defv = self.get_default(stmt, plist)
         if defv:
             chelem.default_case = defv
         else:
             chelem.occur = 3
     for s in plist:
         self.handle_stmt(s, chelem, new_pset)
     self.handle_substmts(stmt, chelem, new_pset)
Exemplo n.º 8
0
    def add_identity(self, ident):
        """Add `id_stmt` and all derivates to `self.identities`.

        `ident` must be a fully qualified identity name.
        """
        def trname(iname):
            return "__" + iname.replace(":", "_")

        if ident in self.identities: return
        parent = SchemaNode.define(trname(ident))
        self.identities[ident] = parent
        if self.identity_deps[ident]:
            parent = SchemaNode.choice(parent, occur=2)
        SchemaNode("value", parent, ident).attr["type"] = "QName"
        for i in self.identity_deps[ident]:
            SchemaNode("ref", parent).attr["name"] = trname(i)
            self.add_identity(i)
    def type_with_ranges(self, tchain, p_elem, rangekw, gen_data):
        """Handle types with 'range' or 'length' restrictions.

        `tchain` is the chain of type definitions from which the
        ranges may need to be extracted. `rangekw` is the statement
        keyword determining the range type (either 'range' or
        'length'). `gen_data` is a function that generates the
        output schema node (a RELAX NG <data> pattern).
        """
        ranges = self.get_ranges(tchain, rangekw)
        if not ranges: return p_elem.subnode(gen_data())
        if len(ranges) > 1:
            p_elem = SchemaNode.choice(p_elem)
            p_elem.occur = 2
        for r in ranges:
            d_elem = gen_data()
            for p in self.range_params(r, rangekw):
                d_elem.subnode(p)
            p_elem.subnode(d_elem)
Exemplo n.º 10
0
    def type_with_ranges(self, tchain, p_elem, rangekw, gen_data):
        """Handle types with 'range' or 'length' restrictions.

        `tchain` is the chain of type definitions from which the
        ranges may need to be extracted. `rangekw` is the statement
        keyword determining the range type (either 'range' or
        'length'). `gen_data` is a function that generates the
        output schema node (a RELAX NG <data> pattern).
        """
        ranges = self.get_ranges(tchain, rangekw)
        if not ranges: return p_elem.subnode(gen_data())
        if len(ranges) > 1:
            p_elem = SchemaNode.choice(p_elem)
            p_elem.occur = 2
        for r in ranges:
            d_elem = gen_data()
            for p in self.range_params(r, rangekw):
                d_elem.subnode(p)
            p_elem.subnode(d_elem)
Exemplo n.º 11
0
 def choice_stmt(self, stmt, p_elem, pset):
     chelem = SchemaNode.choice(p_elem)
     chelem.attr["nma:name"] = stmt.arg
     refd, augs, new_pset = self.process_patches(pset, stmt, chelem)
     left = self.lookup_expand(stmt, new_pset.keys())
     for a in augs:
         left = self.lookup_expand(a, left)
     if refd["mandatory"] or stmt.search_one("mandatory", "true"):
         chelem.attr["nma:mandatory"] = "true"
         self.propagate_occur(chelem, 2)
     else:
         defv = self.get_default(stmt, refd)
         if defv is not None:
             chelem.default_case = defv
         else:
             chelem.occur = 3
     self.handle_substmts(stmt, chelem, new_pset)
     self.apply_augments(augs, chelem, new_pset)
     if not chelem.children:
         chelem.subnode(SchemaNode("empty"))
Exemplo n.º 12
0
 def choice_stmt(self, stmt, p_elem, pset):
     chelem = SchemaNode.choice(p_elem)
     chelem.attr["nma:name"] = stmt.arg
     refd, augs, new_pset = self.process_patches(pset, stmt, chelem)
     left = self.lookup_expand(stmt, new_pset.keys())
     for a in augs:
         left = self.lookup_expand(a, left)
     if refd["mandatory"] or stmt.search_one("mandatory", "true"):
         chelem.attr["nma:mandatory"] = "true"
         self.propagate_occur(chelem, 2)
     else:
         defv = self.get_default(stmt, refd)
         if defv is not None:
             chelem.default_case = defv
         else:
             chelem.occur = 3
     self.handle_substmts(stmt, chelem, new_pset)
     self.apply_augments(augs, chelem, new_pset)
     if not chelem.children:
         chelem.subnode(SchemaNode("empty"))
Exemplo n.º 13
0
 def choice_type(self, tchain, p_elem):
     """Handle ``enumeration`` and ``union`` types."""
     elem = SchemaNode.choice(p_elem, occur=2)
     self.handle_substmts(tchain[0], elem)
Exemplo n.º 14
0
 def boolean_type(self, tchain, p_elem):
     elem = SchemaNode.choice(p_elem, occur=2)
     SchemaNode("value", elem, "true")
     SchemaNode("value", elem, "false")
Exemplo n.º 15
0
 def choice_type(self, tchain, p_elem):
     """Handle ``enumeration`` and ``union`` types."""
     elem = SchemaNode.choice(p_elem, occur=2)
     self.handle_substmts(tchain[0], elem)
Exemplo n.º 16
0
 def boolean_type(self, tchain, p_elem):
     elem = SchemaNode.choice(p_elem, occur=2)
     SchemaNode("value", elem, "true")
     SchemaNode("value", elem, "false")