     toString: =>
       "attribute #{@nameClass} { #{@pattern} }"
     _check: (node, descend) =>
-      return new Empty()
+      return @require(node)
+    require: (node) =>
+      return new EmptyNode("#{this}", this)
     attrCheck: (node) =>
       error = []
       for attr in h.getNodeAttributes(node)

      "#{@pattern}+"
    nullable: =>
      @pattern.nullable()
    require: =>
      return new MissingContent("missing #{this}", this)
    _check: (node, descend) =>
      p1 = @pattern.check(node, descend)

      "#{@pattern1}, #{@pattern2}"
    nullable: =>
      @pattern1.nullable() and @pattern2.nullable()
    require: (node) =>
      p1 = @pattern1.require(node)
      p2 = @pattern2.require(node)
      if p1 instanceof GoodElement
        if p2 instanceof Empty or p2 instanceof EmptyNode
          return p1
      if p2 instanceof GoodElement
        if p1 instanceof Empty or p2 instanceof EmptyNode
          return p2
      if p1 instanceof Empty or p1 instanceof EmptyNode
        if p2 instanceof Empty or p2 instanceof EmptyNode
          return p1
      if p1 instanceof Empty or p1 instanceof EmptyNode
        return new MissingContent("#{p2} not found", p2, node)
      if p2 instanceof Empty or p2 instanceof EmptyNode
        return new MissingContent("#{p1} not found", p1, node)
      return new MissingContent("missing #{p1}, #{p2}", node)

    _check: (node, descend) =>
      if @pattern2 instanceof GoodElement
